diff --git a/src/activity/index.ts b/src/activity/index.ts index b7b91ea..f020142 100644 --- a/src/activity/index.ts +++ b/src/activity/index.ts @@ -1,3 +1,4 @@ export {default as SourceLabel} from './SourceLabel.vue'; export {onActivitiesProcessed} from './activitiesProcessed'; export {useActivitiesProcessed} from './useActivitiesProcessed'; +export {useProcessedResource} from './useProcessedResource'; diff --git a/src/activity/useProcessedResource.ts b/src/activity/useProcessedResource.ts new file mode 100644 index 0000000..13a263a --- /dev/null +++ b/src/activity/useProcessedResource.ts @@ -0,0 +1,15 @@ +import {ref, type Ref, watchEffect} from "vue"; +import {useActivitiesProcessed} from "./useActivitiesProcessed"; + +export const useProcessedResource = (loader: () => Promise, initial: T): Ref => { + const data = ref(initial) as Ref; + + const load = async () => { + data.value = await loader(); + }; + + watchEffect(load); + useActivitiesProcessed(load); + + return data; +}; diff --git a/src/ledger/ledger.ts b/src/ledger/ledger.ts index e0de2b2..ae05c82 100644 --- a/src/ledger/ledger.ts +++ b/src/ledger/ledger.ts @@ -13,6 +13,7 @@ import {defineStore} from "pinia"; import {computed, ref, triggerRef} from "vue"; import {ledgerApi, transactionApi} from "@/mammon"; import {useRouteParams} from "@vueuse/router"; +import {onActivitiesProcessed} from "@/activity"; export const LedgerTypes = { Main: 'MAIN', @@ -71,6 +72,8 @@ export const useLedgersStore = defineStore('ledgers', () => { refresh(); + onActivitiesProcessed(refresh); + return {ledgers, findById, findAllById, createMain, createCombined, updateMain, updateCombined, refresh}; }) diff --git a/src/pages/ledger/ListLedgerTransactions.vue b/src/pages/ledger/ListLedgerTransactions.vue index 0df4889..e6def76 100644 --- a/src/pages/ledger/ListLedgerTransactions.vue +++ b/src/pages/ledger/ListLedgerTransactions.vue @@ -7,19 +7,17 @@ import {IskLabel} from "@/market"; import {SortableHeader, useSort, VirtualScrollTable} from "@/components/table"; import {TransferList, TransferTypes} from "@/transaction"; import {Dropdown} from "@/components"; -import {SourceLabel} from "@/activity"; +import {SourceLabel, useProcessedResource} from "@/activity"; import {useCharactersStore} from "@/characters"; import {formatEveDate} from "@/formaters.ts"; const {ledgerId} = useLedgerParam(); const charactersStore = useCharactersStore(); -const transactions = computedAsync(async () => { - if (ledgerId.value) { - return await findAllTransactionInLeger(ledgerId.value); - } - return []; -}, []); +const transactions = useProcessedResource( + () => ledgerId.value ? findAllTransactionInLeger(ledgerId.value) : Promise.resolve([]), + [], +); const { sortedArray, headerProps } = useSort(computedAsync(() => Promise.all(transactions.value.map(async transaction => { const source = transaction.source; diff --git a/src/pages/ledger/ListLedgers.vue b/src/pages/ledger/ListLedgers.vue index 7e3ed8d..f0939a3 100644 --- a/src/pages/ledger/ListLedgers.vue +++ b/src/pages/ledger/ListLedgers.vue @@ -14,7 +14,6 @@ const editLedgerModal = ref(); const processActivities = async () => { await activityApi.fetchAllNewActivities(); await activityApi.processNewActivities(); - await ledgersStore.refresh(); } const { sortedArray, headerProps } = useSort(() => ledgersStore.ledgers); diff --git a/src/pages/ledger/ViewLedgerAcquisitions.vue b/src/pages/ledger/ViewLedgerAcquisitions.vue index fbac26a..605cd35 100644 --- a/src/pages/ledger/ViewLedgerAcquisitions.vue +++ b/src/pages/ledger/ViewLedgerAcquisitions.vue @@ -1,12 +1,12 @@