Summary
src/components/dashboard/DataRefreshWrapper.tsx calls setTimeout from a useEffect but has no cleanup, and the wrapper's keyed children remount on each refresh, throwing away form state.
Affected area
src/components/dashboard/DataRefreshWrapper.tsx
Steps to reproduce
Click Refresh multiple times quickly → multiple timeout handles stack, and any active form loses state.
Expected behaviour
Cancel timers on next refresh, conditionally remount via specific keys rather than the entire wrapper, and preserve form drafts.
Acceptance criteria
Summary
src/components/dashboard/DataRefreshWrapper.tsxcallssetTimeoutfrom a useEffect but has no cleanup, and the wrapper's keyed children remount on each refresh, throwing away form state.Affected area
src/components/dashboard/DataRefreshWrapper.tsxSteps to reproduce
Click Refresh multiple times quickly → multiple timeout handles stack, and any active form loses state.
Expected behaviour
Cancel timers on next refresh, conditionally remount via specific keys rather than the entire wrapper, and preserve form drafts.
Acceptance criteria