fix: add purchase-options cache invalidation on balance changes

- WebSocketNotifications: invalidate purchase-options on all 10 balance-affecting events
- Dashboard: invalidate purchase-options after trial activation
- Balance: invalidate purchase-options after payment return and promocode activation
- PromoOffersSection: invalidate purchase-options and balance after promo claim
This commit is contained in:
Fringg
2026-03-08 14:17:45 +03:00
parent 71a0111a04
commit f1102d2783
4 changed files with 15 additions and 0 deletions

View File

@@ -116,6 +116,8 @@ export default function PromoOffersSection({ className = '' }: PromoOffersSectio
queryClient.invalidateQueries({ queryKey: ['promo-offers'] }); queryClient.invalidateQueries({ queryKey: ['promo-offers'] });
queryClient.invalidateQueries({ queryKey: ['active-discount'] }); queryClient.invalidateQueries({ queryKey: ['active-discount'] });
queryClient.invalidateQueries({ queryKey: ['subscription'] }); queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
queryClient.invalidateQueries({ queryKey: ['balance'] });
setSuccessMessage(result.message); setSuccessMessage(result.message);
setClaimingId(null); setClaimingId(null);
setTimeout(() => setSuccessMessage(null), 5000); setTimeout(() => setSuccessMessage(null), 5000);

View File

@@ -41,6 +41,7 @@ export default function WebSocketNotifications() {
}); });
// Refresh data // Refresh data
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] });
refreshUser(); refreshUser();
return; return;
@@ -67,6 +68,7 @@ export default function WebSocketNotifications() {
duration: 5000, duration: 5000,
}); });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] });
refreshUser(); refreshUser();
return; return;
@@ -82,6 +84,7 @@ export default function WebSocketNotifications() {
}); });
queryClient.invalidateQueries({ queryKey: ['subscription'] }); queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
refreshUser(); refreshUser();
return; return;
} }
@@ -95,6 +98,7 @@ export default function WebSocketNotifications() {
}); });
queryClient.invalidateQueries({ queryKey: ['subscription'] }); queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
refreshUser(); refreshUser();
return; return;
} }
@@ -151,6 +155,7 @@ export default function WebSocketNotifications() {
duration: 5000, duration: 5000,
}); });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
refreshUser(); refreshUser();
return; return;
} }
@@ -180,6 +185,7 @@ export default function WebSocketNotifications() {
}); });
queryClient.invalidateQueries({ queryKey: ['subscription'] }); queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] });
refreshUser(); refreshUser();
return; return;
@@ -195,6 +201,7 @@ export default function WebSocketNotifications() {
}); });
queryClient.invalidateQueries({ queryKey: ['subscription'] }); queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] });
refreshUser(); refreshUser();
return; return;
@@ -220,6 +227,7 @@ export default function WebSocketNotifications() {
}); });
queryClient.invalidateQueries({ queryKey: ['subscription'] }); queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
refreshUser(); refreshUser();
return; return;
} }
@@ -329,6 +337,7 @@ export default function WebSocketNotifications() {
duration: 8000, duration: 8000,
}); });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
queryClient.invalidateQueries({ queryKey: ['referral-stats'] }); queryClient.invalidateQueries({ queryKey: ['referral-stats'] });
refreshUser(); refreshUser();
return; return;
@@ -375,6 +384,7 @@ export default function WebSocketNotifications() {
duration: 6000, duration: 6000,
}); });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] });
refreshUser(); refreshUser();
return; return;

View File

@@ -79,6 +79,7 @@ export default function Balance() {
refreshUser(); refreshUser();
queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] });
queryClient.invalidateQueries({ queryKey: ['subscription'] }); queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
showToast({ showToast({
type: 'success', type: 'success',
@@ -164,6 +165,7 @@ export default function Balance() {
await refetchBalance(); await refetchBalance();
await refreshUser(); await refreshUser();
queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
} }
} catch (error: unknown) { } catch (error: unknown) {
const axiosError = error as { response?: { data?: { detail?: string } } }; const axiosError = error as { response?: { data?: { detail?: string } } };

View File

@@ -87,6 +87,7 @@ export default function Dashboard() {
queryClient.invalidateQueries({ queryKey: ['subscription'] }); queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['trial-info'] }); queryClient.invalidateQueries({ queryKey: ['trial-info'] });
queryClient.invalidateQueries({ queryKey: ['balance'] }); queryClient.invalidateQueries({ queryKey: ['balance'] });
queryClient.invalidateQueries({ queryKey: ['purchase-options'] });
refreshUser(); refreshUser();
}, },
onError: (error: { response?: { data?: { detail?: string } } }) => { onError: (error: { response?: { data?: { detail?: string } } }) => {