Skip to content

feat(contracts): add contracts list page and navigation entry - #4311

Draft
michaelponrajah wants to merge 2 commits into
chore/regenerate-graphql-schemafrom
feat/contracts-navigation
Draft

michaelponrajah wants to merge 2 commits into
chore/regenerate-graphql-schemafrom
feat/contracts-navigation

Conversation

@michaelponrajah

Copy link
Copy Markdown
Contributor

Context

Contracts already exist in the schema, with a status mapping landed in #4298 and detail alignment in #4308, but there is no list view and no way to reach contracts from the main navigation. This adds that surface.

Description

  • /contracts list page (src/pages/contracts/ContractsPage.tsx) — paginated table showing status, name (falling back to external ID), customer, start and end dates, with rows linking through to the details route.
  • /contracts/:id details route — currently a placeholder; real content comes in a follow-up.
  • Both routes gated on the contractsView permission and the ProductCatalog feature flag.
  • Contracts entry in the main nav under Billing & operations, with a new contract icon in the design system.
  • Pagination follows BillableMetricsList: PaginatedContent with its sticky defaults plus insetPager, and the table's -mb-px overlap so the last row's border and the pager share a single divider. No per-page class overrides — the shared Pagination components are untouched.

Known gaps (why this is a draft)

  • ContractDetails renders a hardcoded, untranslated "Todo". Needs real copy via pnpm translations:add before review.
  • The search input and Filters button render disabled — placeholders for follow-up work.

Verification

  • pnpm types, pnpm lint (0 errors, only pre-existing formik warnings), pnpm translations:inspect and pnpm translations:ensure-consistency all pass.
  • 87 tests pass across src/pages/contracts and src/components/designSystem/Pagination.
  • Checked against a local dev org with 28 contracts at 1440x800: pager pinned to the viewport bottom on page 1, single shared border when scrolled to the end of the list, still pinned after paging to page 2.

Fixes LAGO-XXX

🤖 Generated with Claude Code

michaelponrajah and others added 2 commits September 16, 2026 18:47
Add a paginated contracts list at /contracts and a placeholder details
route at /contracts/:id, both gated on the contractsView permission and
the ProductCatalog feature flag, plus a Contracts entry in the main nav
and its icon.

Pagination follows the billable metrics list: PaginatedContent with its
sticky defaults and insetPager, and the table's -mb-px overlap so the
last row's border and the pager share one divider. No per-page class
overrides, so the shared Pagination components are untouched.

The details page is an untranslated "Todo" placeholder pending its own
scope.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The details route's registration was asserted but the list route's was
not, so dropping `featureFlag: ProductCatalog` or the `contractsView`
permission from /contracts would have left the suite green while making
the page reachable by URL for any organisation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@michaelponrajah
michaelponrajah force-pushed the feat/contracts-navigation branch from ee8ac36 to 0126a95 Compare September 16, 2026 16:55
@michaelponrajah
michaelponrajah changed the base branch from main to chore/regenerate-graphql-schema September 16, 2026 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant