diff --git a/src/components/widgets/balance-trend.vue b/src/components/widgets/balance-trend.vue index 008a20dc..34ad8a96 100644 --- a/src/components/widgets/balance-trend.vue +++ b/src/components/widgets/balance-trend.vue @@ -1,25 +1,19 @@ diff --git a/src/components/widgets/expenses-structure.vue b/src/components/widgets/expenses-structure.vue index 56ca078d..df87855d 100644 --- a/src/components/widgets/expenses-structure.vue +++ b/src/components/widgets/expenses-structure.vue @@ -1,25 +1,20 @@ @@ -53,17 +45,9 @@ defineOptions({ name: "expenses-structure-widget", }); -const props = withDefaults( - defineProps<{ - selectedPeriod?: { from: Date; to: Date }; - }>(), - { - selectedPeriod: () => ({ - from: startOfMonth(new Date()), - to: new Date(), - }), - }, -); +const props = defineProps<{ + selectedPeriod: { from: Date; to: Date }; +}>(); const { formatBaseCurrency } = useFormatCurrency(); const periodFrom = ref(new Date().getTime()); @@ -75,7 +59,10 @@ watch( }, ); -const { data: spendingsByCategories } = useQuery({ +const { + data: spendingsByCategories, + isFetching: isSpendingsByCategoriesFetching, +} = useQuery({ queryKey: [...VUE_QUERY_CACHE_KEYS.widgetExpensesStructureTotal, periodFrom], queryFn: () => getSpendingsByCategories({ @@ -83,36 +70,45 @@ const { data: spendingsByCategories } = useQuery({ to: props.selectedPeriod.to, }), staleTime: Infinity, - placeholderData: {}, -}); - -const { data: currentMonthExpense } = useQuery({ - queryKey: [ - ...VUE_QUERY_CACHE_KEYS.widgetExpensesStructureCurrentAmount, - periodFrom, - ], - queryFn: () => - getExpensesAmountForPeriod({ - from: props.selectedPeriod.from, - to: props.selectedPeriod.to, - }), - staleTime: Infinity, - placeholderData: 0, + placeholderData: (previousData) => previousData || {}, }); -const { data: prevMonthExpense } = useQuery({ - queryKey: [ - ...VUE_QUERY_CACHE_KEYS.widgetExpensesStructurePrevAmount, - periodFrom, - ], - queryFn: () => - getExpensesAmountForPeriod({ - from: startOfMonth(subMonths(props.selectedPeriod.from, 1)), - to: endOfMonth(subMonths(props.selectedPeriod.to, 1)), - }), - staleTime: Infinity, - placeholderData: 0, -}); +const { data: currentMonthExpense, isFetching: isCurrentMonthExpenseFetching } = + useQuery({ + queryKey: [ + ...VUE_QUERY_CACHE_KEYS.widgetExpensesStructureCurrentAmount, + periodFrom, + ], + queryFn: () => + getExpensesAmountForPeriod({ + from: props.selectedPeriod.from, + to: props.selectedPeriod.to, + }), + staleTime: Infinity, + placeholderData: (previousData) => previousData || 0, + }); + +const { data: prevMonthExpense, isFetching: isPrevMonthExpenseFetching } = + useQuery({ + queryKey: [ + ...VUE_QUERY_CACHE_KEYS.widgetExpensesStructurePrevAmount, + periodFrom, + ], + queryFn: () => + getExpensesAmountForPeriod({ + from: startOfMonth(subMonths(props.selectedPeriod.from, 1)), + to: endOfMonth(subMonths(props.selectedPeriod.to, 1)), + }), + staleTime: Infinity, + placeholderData: (previousData) => previousData || 0, + }); + +const isWidgetDataFetching = computed( + () => + isSpendingsByCategoriesFetching.value || + isCurrentMonthExpenseFetching.value || + isPrevMonthExpenseFetching.value, +); const expensesDiff = computed(() => { const percentage = Number( @@ -172,34 +168,3 @@ const chartOptions = computed(() => }), ); - - diff --git a/src/pages/dashboard/dashboard.vue b/src/pages/dashboard/dashboard.vue index 90a2a0f8..0ac6e8a1 100644 --- a/src/pages/dashboard/dashboard.vue +++ b/src/pages/dashboard/dashboard.vue @@ -30,10 +30,7 @@ :selected-period="currentPeriod" class="dashboard-page__spending-categories" /> - +