useImageFetch.ts 1.0 KB

123456789101112131415161718192021222324252627
  1. import {useImageManager} from "~/composables/data/useImageManager";
  2. import {AsyncData, FetchResult} from "#app";
  3. import ApiResource from "~/models/ApiResource";
  4. interface useImageFetchReturnType {
  5. fetch: (id: number | null, defaultImage?: string | null, height?: number, width?: number) => AsyncData<string | ArrayBuffer | null, Error | null>
  6. }
  7. /**
  8. * Sert d'intermédiaire entre les composants et l'ImageManager en fournissant une méthode useAsyncData toute prête.
  9. */
  10. export const useImageFetch = (): useImageFetchReturnType => {
  11. const { imageManager } = useImageManager()
  12. const fetch = (
  13. id: number | null, // If id is null, fetch shall return the default image url
  14. defaultImage: string | null = null,
  15. height: number = 0,
  16. width: number = 0
  17. ) => useAsyncData(
  18. 'img' + (id ?? defaultImage ?? 0),
  19. () => imageManager.get(id, defaultImage, height, width),
  20. { lazy: true, server: false } // Always fetch images client-side
  21. )
  22. return { fetch }
  23. }