useImageFetch.ts 969 B

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