feat(client): route-param titles + data-testid prop (PMC-100) #39

Closed
David wants to merge 0 commits from feat/pmc-100-component-infra into main
Owner

Summary

Closes PMC-100 (Component infrastructure and cross-cutting UI). Two commits for the actionable sub-tasks; the rest closed as already-done / blocked-on-backend / deferred (see per-issue YouTrack comments).

  • PMC-104: route-param titles on AssetDetailPage + ContractDetailPage (last two detail surfaces still hardcoded; the rest landed in their per-story PRs).
  • PMC-111: optional data_testid: Option<String> prop on Button, Input, TableRow. Emits data-testid="..." when set; default omits the attribute.

Closed without code:

  • PMC-101 (TableRow honest cursor): no active offenders - every clickable=true caller wires onclick.
  • PMC-105/106/109 already done in main (audit pass).
  • PMC-107/108 (top-bar search caret / persistence): blocked on a global search backend.
  • PMC-110 (dead href=# sweep): already done across the codebase by per-story PRs and audit.
  • PMC-112 (use_mock_submit hook): deferred until API-client PR #26 merges and the unwired form count drops.
  • PMC-113 (required-field a11y): already done in main; asterisks already have aria_label + role.
  • PMC-114/115/116/118 already done in main (audit pass).
  • PMC-117 (native validation tooltip replacement): deferred until typed ApiError validation lands.

Test plan

  • cargo check --features web clean
  • /assets/foo / /contracts/bar headers read "Asset foo" / "Contract bar"
  • <Button data_testid="primary".to_string()> renders data-testid="primary" on the

🤖 Generated with Claude Code

## Summary Closes PMC-100 (Component infrastructure and cross-cutting UI). Two commits for the actionable sub-tasks; the rest closed as already-done / blocked-on-backend / deferred (see per-issue YouTrack comments). - PMC-104: route-param titles on AssetDetailPage + ContractDetailPage (last two detail surfaces still hardcoded; the rest landed in their per-story PRs). - PMC-111: optional `data_testid: Option<String>` prop on Button, Input, TableRow. Emits `data-testid="..."` when set; default omits the attribute. Closed without code: - PMC-101 (TableRow honest cursor): no active offenders - every clickable=true caller wires onclick. - PMC-105/106/109 already done in main (audit pass). - PMC-107/108 (top-bar search caret / persistence): blocked on a global search backend. - PMC-110 (dead href=# sweep): already done across the codebase by per-story PRs and audit. - PMC-112 (use_mock_submit hook): deferred until API-client PR #26 merges and the unwired form count drops. - PMC-113 (required-field a11y): already done in main; asterisks already have aria_label + role. - PMC-114/115/116/118 already done in main (audit pass). - PMC-117 (native validation tooltip replacement): deferred until typed ApiError validation lands. ## Test plan - [ ] `cargo check --features web` clean - [ ] /assets/foo / /contracts/bar headers read "Asset foo" / "Contract bar" - [ ] `<Button data_testid="primary".to_string()>` renders `data-testid="primary"` on the <button>; omitted prop emits no attribute 🤖 Generated with [Claude Code](https://claude.com/claude-code)
AssetDetailPage and ContractDetailPage were the two remaining detail surfaces still rendering hardcoded sample headers ("Exchange Server 01", "Managed Services Agreement"). Switch them to "Asset {props.id}" / "Contract {props.id}" to complete the F10 sweep; the other detail pages were already done in their per-story PRs.

#PMC-104 State Done
feat(components): optional data-testid prop on Button, Input, TableRow (PMC-111)
Some checks failed
Check / clippy + fmt + tests (pull_request) Failing after 4s
Create release / Create release from merged PR (pull_request) Has been skipped
de5747b649
Adds an `Option<String>` `data_testid` prop to Button, Input, and TableRow that flows to `data-testid="..."` on the rendered element when set. Enables stable selectors for Playwright / MCP browser automation without leaking test scaffolding into normal builds; when omitted (the default), no attribute is emitted.

Modal and form Select/Textarea can pick up the same prop as needed; landing the pattern on the three highest-traffic components is the cheap unlock.

#PMC-111 State Done
vas2000-work closed this pull request 2026-05-21 01:21:59 +02:00
Some checks failed
Check / clippy + fmt + tests (pull_request) Failing after 4s
Required
Details
Create release / Create release from merged PR (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/mokosh-apps!39
No description provided.