You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the Refine-inspired core simplification effort (#127 ✅, #128, #129, #130 ✅, #131, #132). Refine's useTable has syncWithLocation: filters, sorting, and pagination live in the URL query string.
Scope note: this issue covers the core primitive only (phase 1): the router contract extension and the useListState hook. Migrating plugin list pages (comments moderation, media library, blog search, cms content list, form-builder submissions, kanban filters) is tracked in #136 (phase 2).
Problem
Plugin list pages keep list state in local useState, so it is lost on refresh, invisible to the back button, and impossible to share/bookmark:
comments/.../moderation-page.internal.tsx — activeTab, currentPage in useState
media/.../library-page.internal.tsx — selectedFolder in useState
Concrete defects: refreshing the moderation page drops you back to "pending" tab page 1; you cannot link a teammate to "spam tab, page 3"; browser back after a filter change leaves the page instead of undoing it.
Proposal
1. Search-params contract on the router adapter (#127 — already shipped)
Context
Part of the Refine-inspired core simplification effort (#127 ✅, #128, #129, #130 ✅, #131, #132). Refine's
useTablehassyncWithLocation: filters, sorting, and pagination live in the URL query string.Scope note: this issue covers the core primitive only (phase 1): the router contract extension and the
useListStatehook. Migrating plugin list pages (comments moderation, media library, blog search, cms content list, form-builder submissions, kanban filters) is tracked in #136 (phase 2).Problem
Plugin list pages keep list state in local
useState, so it is lost on refresh, invisible to the back button, and impossible to share/bookmark:comments/.../moderation-page.internal.tsx—activeTab,currentPageinuseStatemedia/.../library-page.internal.tsx—selectedFolderinuseStateConcrete defects: refreshing the moderation page drops you back to "pending" tab page 1; you cannot link a teammate to "spam tab, page 3"; browser back after a filter change leaves the page instead of undoing it.
Proposal
1. Search-params contract on the router adapter (#127 — already shipped)
Mapped per framework by the bindings (Next
useSearchParams+router.replace; React RouteruseSearchParams; TanStackuseSearch/navigate({ search })).2.
useListStatehelper in corereplacesemantics for rapid changes (typing) vs push for discrete changes (tab switch) so the back button behaves sensiblyScope (core only)
StackRoutercontract + all three framework bindings withgetSearchParams/setSearchParamsuseListStateinpackages/stack/src/client/+ unit tests (types, defaults, replace/push, namespacing)useListStateusageAcceptance criteria
useListStateround-trips state through the URL across all three framework bindingsPlugin list-page migrations → #136.