src/app/dashboard/contributor/page.tsx#ContributorDashboardPage tracks the claims-list
tab purely as local component state:
const [tab, setTab] = useState<"active" | "completed">("active");
...
<Tabs tabs={[...]} active={tab} onChange={setTab} />
There's no synchronization with the URL (no ?tab=completed search param, no route
segment). A contributor who switches to "Completed" to review their paid-out bounties,
then refreshes the page (or copies the URL to reference later, or opens the dashboard in
a new tab from a bookmark), always lands back on "Active" — the tab selection is
invisible to anything outside the current render, including the browser's own back/forward
navigation and any link the user might try to share pointing at their completed work.
Suggested fix: sync tab with a URL search param via useSearchParams/router.replace
(shallow, no full navigation), so the selected tab survives a refresh and can be linked
to directly — e.g. /dashboard/contributor?tab=completed.
src/app/dashboard/contributor/page.tsx#ContributorDashboardPagetracks the claims-listtab purely as local component state:
There's no synchronization with the URL (no
?tab=completedsearch param, no routesegment). A contributor who switches to "Completed" to review their paid-out bounties,
then refreshes the page (or copies the URL to reference later, or opens the dashboard in
a new tab from a bookmark), always lands back on "Active" — the tab selection is
invisible to anything outside the current render, including the browser's own back/forward
navigation and any link the user might try to share pointing at their completed work.
Suggested fix: sync
tabwith a URL search param viauseSearchParams/router.replace(shallow, no full navigation), so the selected tab survives a refresh and can be linked
to directly — e.g.
/dashboard/contributor?tab=completed.