feat: UI revamp - sticky headers, tabs, failure reasons, notif filters - #325
Conversation
Lock table headers while scrolling in both apps: DataTable opts in by default, and the hand-rolled tables (activity, chain overview, provider breakdown, workflows) get bounded scroll boxes. #317 Consolidate multi-table screens into tabs: middleman Suppliers (Suppliers/Activity/Overview) and provider Keys (Keys/Activity), with the active tab persisted in the URL. #317 Surface the failure reason on failed transactions in both apps’ tables, reading the log/message columns through a shared failureReasonDisplay helper. #317 Add server-side filtering to notification history (event type, read/unread, channel) in both apps; the unread badge count stays unfiltered. #317 Make the left sidebar collapsible to an icon rail with a header toggle, hidden on the landing/auth pages. #317 Add unit tests for the notification filter conditions (both apps) and the shared failure-reason helper. #317
4a1f9c4 to
c4f99bb
Compare
- provider: restore UUID search on notifications (re-add enableSearch) - provider/middleman: surface pending activity on the Activity tab by lifting the pending query above the Radix tab boundary and wiring TabsBadge — the poll was trapped in the unmounted tab, so pending stake/unstake was invisible on the default tab - db: extract shared buildNotificationEventFilterConditions to @igniter/db/notifications; both DAL copies now delegate (dedup) - commons: extract isInternalPath to @igniter/commons/utils; Sidebar and SidebarTriggerGate share it (dedup)
|
One thing worth a look before merging, and it's minor: In refetchInterval: (q) => (Object.keys(q.state.data?.byKey ?? {}).length > 0 ? 4000 : false),And a micro nit, take it or leave it: in Otherwise 👍 from my side. |
Gate the interval on byKey the same way middleman's SuppliersTabs gates its poll: only poll while there's pending activity, otherwise stop. byKey is the badge's own source, so the poll and badge can't diverge.
-Show friendly on-chain failure reasons in transaction tables Failed transactions previously surfaced only the raw ABCI log (or a generic "Unknown error"), hard to read and duplicated in both the table cell and the detail drawer. Thread the chain's own error text end to end and map known Cosmos SDK error codes to short human-readable messages, shown through a single copyable popover.
- provider: restore UUID search on notifications (re-add enableSearch) - provider/middleman: surface pending activity on the Activity tab by lifting the pending query above the Radix tab boundary and wiring TabsBadge — the poll was trapped in the unmounted tab, so pending stake/unstake was invisible on the default tab - db: extract shared buildNotificationEventFilterConditions to @igniter/db/notifications; both DAL copies now delegate (dedup) - commons: extract isInternalPath to @igniter/commons/utils; Sidebar and SidebarTriggerGate share it (dedup)
Lock table headers while scrolling in both apps: DataTable opts in by default, and the hand-rolled tables (activity, chain overview, provider breakdown, workflows) get bounded scroll boxes. #317
Consolidate multi-table screens into tabs: middleman Suppliers (Suppliers/Activity/Overview) and provider Keys (Keys/Activity), with the active tab persisted in the URL. #317
Surface the failure reason on failed transactions in both apps’ tables, reading the log/message columns through a shared failureReasonDisplay helper. #317
Add server-side filtering to notification history (event type, read/unread, channel) in both apps; the unread badge count stays unfiltered. #317
Make the left sidebar collapsible to an icon rail with a header toggle, hidden on the landing/auth pages. #317
Add unit tests for the notification filter conditions (both apps) and the shared failure-reason helper. #317