| 123456789101112131415161718192021222324252627282930313233 |
- import type { AsyncData } from '#app'
- import { v4 as uuid4 } from 'uuid'
- import type { Ref } from 'vue'
- import { useImageManager } from '~/composables/data/useImageManager'
- import { IMAGE_SIZE } from '~/types/enum/enums'
- interface useImageFetchReturnType {
- fetch: (
- id: Ref<number | null>,
- size?: IMAGE_SIZE,
- defaultImage?: string | null,
- ) => AsyncData<string | ArrayBuffer | null, Error | null>
- }
- /**
- * Sert d'intermédiaire entre les composants et l'ImageManager en fournissant une méthode useAsyncData toute prête.
- */
- export const useImageFetch = (): useImageFetchReturnType => {
- const { imageManager } = useImageManager()
- const fetch = (
- id: Ref<number | null>, // If id is null, fetch shall return the default image url
- size: IMAGE_SIZE = IMAGE_SIZE.MD,
- defaultImage: string | null = null,
- ) =>
- useAsyncData(
- 'img' + (id ?? defaultImage ?? 0) + '_' + uuid4(),
- () => imageManager.get(id.value, size, defaultImage),
- { lazy: true, server: false }, // Always fetch images client-side
- )
- return { fetch }
- }
|