Commit 67f0ab3
[ops] Convert all ops tables to DataManagerTable (#23871)
## Summary
Converts all 25 remaining `Table`/`CN1Table` usages in the ops app to
`DataManagerTable`, adding cursor-based pagination, URL-persisted
filters, and consistent table styling across all ops pages.
## Changed Tables
### Simple Table → DataManagerTable (pagination only, no filters)
| File | Changes/Caveats |
|------|----------------|
| **BakeryTable.tsx** | Renamed `$size` → `$first`, added cursor
pagination. Preserves modal for approve/deny/consume baking requests. |
| **BobbyTable.tsx** | Standard conversion. Uses
`useCoreServiceSchema()` for dynamic schema. |
| **CeleryTable.tsx** | Has `@ts-expect-error` on columns prop —
pre-existing mismatch where "sql" column key doesn't exist in row data
type. |
| **Pasta.tsx** | Renamed `$size` → `$first`, added cursor pagination.
Keeps "Cook some pasta!" button and CardPage wrapper. |
| **OpsBridgeZeroHashReceiveOperations.tsx** | `PAGE_SIZES = [50, 100]`.
Replaced custom `Empty` styled component with DataManagerTable's
`emptyState` prop. |
| **OpsBridgeReservedUmas.tsx** | Keeps "Reserve an UMA" form and
"Release" action links below/in table. |
| **OpsBridgeBannedClabes.tsx** | Keeps "Ban Form" above table and
"Unban/Release" action links. |
| **LedgerAccounts.tsx** | `PAGE_SIZES = [30, 50, 100]`. Complex
`onClickRow` with `getAccountId` lookup to navigate to account details.
|
| **CrossRiverWebhooks.tsx** | No cursor pagination — query returns flat
array (not a connection type). Uses `pageSizes={[100]}` with
`resultCount={rows.length}`. |
| **ManagePaycoreUmaaasPlatformCurrency.tsx** | Was importing `Table`
from public `@lightsparkdev/ui`. Query already had `$after`; added
`page_info`. |
### Fragment-Based Tables (styling swap only, no query/pagination)
| File | Changes/Caveats |
|------|----------------|
| **OpsManualReviewTicketSenderTransactions.tsx** |
`showHeader={false}`, `pageSizes={[100]}`. Receives data as props. |
| **OpsManualReviewTicketSenderTickets.tsx** | Keeps `onClickRow` for
navigation. Receives data as props. |
| **OpsGkListTable.tsx** | CN1Table → DataManagerTable. Keeps
`onClickRow` navigation and `.fragments` static property. |
| **WebhookTesterListTable.tsx** | CN1Table → DataManagerTable. Keeps
TrashCan delete action column with mutation. Keeps `.fragments` static
property. |
### Filter Migration (existing filters → DataManagerTable built-in
filters)
| File | Filter Changes | Caveats |
|------|---------------|---------|
| **OpsSparkSspTransactions.tsx** | 3 `Select` dropdowns → 3 ENUM
filters (Status, Network, Type) | Removed `Settings`/`Label` styled
components. Custom enum mapping via `statusMap`/`networkMap`/`typeMap`.
|
| **OpsManualReview.tsx** | `ButtonRow` toggle → ENUM filter
(Open/Closed) | `PAYOPS_tickets` does **not** support `after` argument —
removed `$after` from query while keeping `end_cursor` in `page_info`. |
| **OpsOnboarding.tsx** | Multi-select `ButtonRow` → ENUM filter with
`isMulti: true` | Default filter value:
`[AccountGoLiveStatus.Requested]`. |
| **OpsBridgeBitsoReceiveOperations.tsx** | UMA `TextInput` + Button →
STRING filter | Keeps `Toggle` for CREATED status as separate
client-side post-fetch filter (not migrated into DataManagerTable). |
| **OpsCompliance.tsx** | CN1Table + `Select` dropdown → ENUM filter |
Custom status mapping: "Manual Review" → `[VerificationPending,
ReVerificationPending]`, "Verified" → `[VerificationSucceeded]`,
"Declined" → `[VerificationFailed]`. |
| **OpsBillingInvoices.tsx** | CN1Table + `Select` + `TextInput` → ENUM
filter + STRING filter | Status filter wraps single selection in array
for `$statuses` variable. Account ID uses `isStringFilterState`. |
| **OpsBillingPlans.tsx** | CN1Table + Radio buttons → 2 BOOLEAN filters
(Is Public, Is Enabled) | Uses `FilterType.BOOLEAN` with
`isBooleanFilterState`. Keeps the "Create Billing Plan" form below the
table. |
### Client-Side Filtering (kept external, DataManagerTable for styling
only)
| File | Changes/Caveats |
|------|----------------|
| **OpsBridgeUsers.tsx** | Keeps `Select` dropdowns above table for
client-side status/VASP filtering. GraphQL query doesn't support filter
variables. |
| **OpsPerms.tsx** | Keeps `TextInput` search above table. Two queries
combined client-side. `showHeader={false}`, `pageSizes={[100]}`. |
| **Knobs.tsx** | Keeps `TextInput` search + "Create Knob" button above
table. `pageSizes={[1000]}`. Keeps modal for CRUD operations. |
| **SofiViewReports.tsx** | Multiple tables inside `.map()` loop — both
inner tables converted. Keeps lazy query search UI and all styled
components. |
## GraphQL Changes
- Added `$after: String` variable and `after: $after` argument to 17
queries for cursor-based pagination
- Added `page_info { has_next_page end_cursor }` to all connection
queries
- Exception: `PAYOPS_tickets` does not support `after` — kept without it
- Exception: `CrossRiverWebhooks` returns a flat array, not a connection
type — no pagination changes
- Auto-generated `graphql.tsx` updated via `yarn gql-codegen`
## What's NOT converted (out of scope)
- `OpsBillingInvoice.tsx` — single invoice detail page (uses CN1Table
for layout, not a data listing)
- `OpsInspectorDetailsBridgeZeroHashSendOperation.tsx` — inspector
detail view (layout, not a table)
## Test plan
- [ ] Verify each converted table page loads correctly in the ops app
- [ ] Verify pagination works (page size selector, next/previous pages)
- [ ] Verify filters work for tables that had them (SSP transactions,
Manual Review, Onboarding, Bitso, Compliance, Billing)
- [ ] Verify client-side filtering still works (Bridge Users, Perms,
Knobs)
- [ ] Verify row click navigation works where applicable
- [ ] Verify modals/forms still work (Bakery approve/deny, Knobs CRUD,
Billing Plans create)
- [ ] Verify action columns work (BannedClabes unban, ReservedUmas
release, WebhookTester delete)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
GitOrigin-RevId: a15f179b80a0cc680502e9c463ea2342756b13c41 parent 6354e9e commit 67f0ab3
File tree
1 file changed
+6
-2
lines changed- packages/ui/src/components/DataManagerTable
1 file changed
+6
-2
lines changedLines changed: 6 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
560 | 560 | | |
561 | 561 | | |
562 | 562 | | |
563 | | - | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
564 | 568 | | |
565 | 569 | | |
566 | 570 | | |
| |||
999 | 1003 | | |
1000 | 1004 | | |
1001 | 1005 | | |
1002 | | - | |
| 1006 | + | |
1003 | 1007 | | |
1004 | 1008 | | |
1005 | 1009 | | |
| |||
0 commit comments