diff --git a/backend/package-lock.json b/backend/package-lock.json index 9a43a93..848adb0 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,12 +1,12 @@ { "name": "hoa-ledgeriq-backend", - "version": "2026.3.17", + "version": "2026.3.19", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "hoa-ledgeriq-backend", - "version": "2026.3.17", + "version": "2026.3.19", "dependencies": { "@nestjs/common": "^10.4.15", "@nestjs/config": "^3.3.0", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5a53fd5..dfcd69e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "hoa-ledgeriq-frontend", - "version": "2026.3.17", + "version": "2026.3.19", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "hoa-ledgeriq-frontend", - "version": "2026.3.17", + "version": "2026.3.19", "dependencies": { "@mantine/core": "^7.15.3", "@mantine/dates": "^7.15.3", diff --git a/frontend/src/pages/board-planning/InvestmentScenarioDetailPage.tsx b/frontend/src/pages/board-planning/InvestmentScenarioDetailPage.tsx index 4e89659..e3ad1c6 100644 --- a/frontend/src/pages/board-planning/InvestmentScenarioDetailPage.tsx +++ b/frontend/src/pages/board-planning/InvestmentScenarioDetailPage.tsx @@ -40,7 +40,7 @@ export function InvestmentScenarioDetailPage() { }, }); - const { data: projection, isLoading: projLoading } = useQuery({ + const { data: projection, isLoading: projLoading, dataUpdatedAt: projUpdatedAt } = useQuery({ queryKey: ['board-planning-projection', id], queryFn: async () => { const { data } = await api.get(`/board-planning/scenarios/${id}/projection`); @@ -49,6 +49,17 @@ export function InvestmentScenarioDetailPage() { enabled: !!id, }); + // When projection refreshes (which may create auto-renew records on the backend), + // re-fetch the scenario so the investments list picks up any new renewal records. + const [lastProjUpdate, setLastProjUpdate] = useState(0); + if (projUpdatedAt && projUpdatedAt !== lastProjUpdate) { + setLastProjUpdate(projUpdatedAt); + if (lastProjUpdate > 0) { + // Only re-fetch after a real update (not the initial load) + queryClient.invalidateQueries({ queryKey: ['board-planning-scenario', id] }); + } + } + const addMutation = useMutation({ mutationFn: (dto: any) => api.post(`/board-planning/scenarios/${id}/investments`, dto), onSuccess: () => { @@ -100,13 +111,10 @@ export function InvestmentScenarioDetailPage() { }, }); - if (isLoading) return