initial: bootstrap from BukidBountyApp base
This commit is contained in:
56
resources/js/composables/usePhotoList.js
Normal file
56
resources/js/composables/usePhotoList.js
Normal file
@@ -0,0 +1,56 @@
|
||||
import { ref } from 'vue';
|
||||
import axios from 'axios';
|
||||
import { useFileBlobCache } from './useFileBlobCache';
|
||||
|
||||
/**
|
||||
* Composable for fetching and managing a list of photos for a specific entity.
|
||||
*/
|
||||
export function usePhotoList() {
|
||||
const { getFile, preCacheFiles, blobCache } = useFileBlobCache();
|
||||
|
||||
const photos = ref([]);
|
||||
const loading = ref(false);
|
||||
const error = ref(null);
|
||||
|
||||
/**
|
||||
* Fetch photos for a target hash and type.
|
||||
*
|
||||
* @param {string} targetHash
|
||||
* @param {string} type - 'StoreMarket', 'ProductMarket', 'User'
|
||||
*/
|
||||
const fetchPhotos = async (targetHash, type = 'StoreMarket') => {
|
||||
if (!targetHash) return;
|
||||
|
||||
loading.value = true;
|
||||
error.value = null;
|
||||
|
||||
try {
|
||||
const response = await axios.post(`/Request/Photos/${type}`, {
|
||||
target: targetHash
|
||||
});
|
||||
|
||||
if (response.data && Array.isArray(response.data)) {
|
||||
photos.value = response.data;
|
||||
// Pre-cache all blobs for these hashes
|
||||
await preCacheFiles(photos.value);
|
||||
} else {
|
||||
photos.value = [];
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Error fetching photos:', err);
|
||||
error.value = 'Failed to load photos.';
|
||||
photos.value = [];
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
photos,
|
||||
loading,
|
||||
error,
|
||||
fetchPhotos,
|
||||
blobCache,
|
||||
getFile
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user