diff --git a/app/composables/useComposants.ts b/app/composables/useComposants.ts index be1d070..468c8f1 100644 --- a/app/composables/useComposants.ts +++ b/app/composables/useComposants.ts @@ -40,11 +40,13 @@ interface LoadComposantsOptions { itemsPerPage?: number orderBy?: string orderDir?: 'asc' | 'desc' + force?: boolean } const composants = ref([]) const total = ref(0) const loading = ref(false) +const loaded = ref(false) const extractTotal = (payload: unknown, fallbackLength: number): number => { const p = payload as Record | null @@ -98,15 +100,31 @@ export function useComposants() { } const loadComposants = async (options: LoadComposantsOptions = {}): Promise => { + const { + search = '', + page = 1, + itemsPerPage = 30, + orderBy = 'name', + orderDir = 'asc', + force = false, + } = options + + if (!force && loaded.value && !search && page === 1) { + return { + success: true, + data: { items: composants.value, total: total.value, page, itemsPerPage }, + } + } + + if (loading.value) { + return { + success: true, + data: { items: composants.value, total: total.value, page, itemsPerPage }, + } + } + loading.value = true try { - const { - search = '', - page = 1, - itemsPerPage = 30, - orderBy = 'name', - orderDir = 'asc', - } = options const params = new URLSearchParams() params.set('itemsPerPage', String(itemsPerPage)) @@ -124,6 +142,7 @@ export function useComposants() { const enrichedItems = await Promise.all(items.map((item) => withResolvedConstructeurs(item))) composants.value = enrichedItems total.value = extractTotal(result.data, items.length) + loaded.value = true return { success: true, data: { @@ -216,15 +235,23 @@ export function useComposants() { const getComposants = () => composants.value const isLoading = () => loading.value + const clearComposantsCache = () => { + composants.value = [] + total.value = 0 + loaded.value = false + } + return { composants, total, loading, + loaded, loadComposants, createComposant, updateComposant: updateComposantData, deleteComposant, getComposants, isLoading, + clearComposantsCache, } } diff --git a/app/composables/usePieces.ts b/app/composables/usePieces.ts index cd11e81..76e9af2 100644 --- a/app/composables/usePieces.ts +++ b/app/composables/usePieces.ts @@ -41,11 +41,13 @@ interface LoadPiecesOptions { itemsPerPage?: number orderBy?: string orderDir?: 'asc' | 'desc' + force?: boolean } const pieces = ref([]) const total = ref(0) const loading = ref(false) +const loaded = ref(false) const extractTotal = (payload: unknown, fallbackLength: number): number => { const p = payload as Record | null @@ -108,15 +110,31 @@ export function usePieces() { } const loadPieces = async (options: LoadPiecesOptions = {}): Promise => { + const { + search = '', + page = 1, + itemsPerPage = 30, + orderBy = 'name', + orderDir = 'asc', + force = false, + } = options + + if (!force && loaded.value && !search && page === 1) { + return { + success: true, + data: { items: pieces.value, total: total.value, page, itemsPerPage }, + } + } + + if (loading.value) { + return { + success: true, + data: { items: pieces.value, total: total.value, page, itemsPerPage }, + } + } + loading.value = true try { - const { - search = '', - page = 1, - itemsPerPage = 30, - orderBy = 'name', - orderDir = 'asc', - } = options const params = new URLSearchParams() params.set('itemsPerPage', String(itemsPerPage)) @@ -134,6 +152,7 @@ export function usePieces() { const enrichedItems = await Promise.all(items.map((item) => withResolvedConstructeurs(item))) pieces.value = enrichedItems total.value = extractTotal(result.data, items.length) + loaded.value = true return { success: true, data: { @@ -226,15 +245,23 @@ export function usePieces() { const getPieces = () => pieces.value const isLoading = () => loading.value + const clearPiecesCache = () => { + pieces.value = [] + total.value = 0 + loaded.value = false + } + return { pieces, total, loading, + loaded, loadPieces, createPiece, updatePiece: updatePieceData, deletePiece, getPieces, isLoading, + clearPiecesCache, } }