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, size?: IMAGE_SIZE, defaultImage?: string | null, ) => AsyncData } /** * 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, // 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 } }