useImageFetch.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import {useAsyncData, AsyncData, useFetch, FetchResult} from "#app";
  2. import {useEntityManager} from "~/composables/data/useEntityManager";
  3. import ApiResource from "~/models/ApiResource";
  4. import {AssociativeArray} from "~/types/enum/data";
  5. import {useImageManager} from "~/composables/data/useImageManager";
  6. import {ref, Ref} from "@vue/reactivity";
  7. interface useImageFetchReturnType {
  8. fetch: (id: number | null, defaultImage?: string, height?: number, width?: number) => FetchResult<any>
  9. }
  10. export const useImageFetch = (lazy: boolean = false): useImageFetchReturnType => {
  11. const { imageManager } = useImageManager()
  12. const fetch = (
  13. id: number | null, // If id is null, fetch shall return the default value
  14. defaultImage: string = '',
  15. height: number = 0,
  16. width: number = 0
  17. ): FetchResult<any> => useFetch(
  18. // @ts-ignore
  19. async () => {
  20. const image: Ref<String> = ref(defaultImage ? `assets/images/byDefault/${defaultImage}` : '')
  21. if (id !== null) {
  22. try {
  23. image.value = await imageManager.get(id, height, width)
  24. } catch (e) {
  25. console.error(e)
  26. }
  27. }
  28. return image
  29. }
  30. )
  31. return { fetch }
  32. }