Skip to content

fix(manage): style Orientations tab rows by using defined CSS module classes (#1687)#1698

Merged
steilerDev merged 1 commit into
betafrom
fix/1687-orientations-css-classes
Jun 15, 2026
Merged

fix(manage): style Orientations tab rows by using defined CSS module classes (#1687)#1698
steilerDev merged 1 commit into
betafrom
fix/1687-orientations-css-classes

Conversation

@steilerDev

Copy link
Copy Markdown
Owner

Summary

  • OrientationsTab referenced undefined CSS module class names (e.g. styles.orientationRow, styles.orientationName) so all orientation rows rendered completely unstyled
  • Fixed by mapping all class references to the existing defined classes shared with TradesTab and other Manage tabs (itemsList, itemRow, itemInfo, itemDetails, itemSortOrder, itemActions, editActions, saveButton) and restructuring view-mode JSX to match TradesTab layout
  • Added 20 unit tests covering OrientationsTab view and edit modes, plus a deep-link E2E test verifying the Orientations tab is activated when navigating to #orientations

Fixes #1687

Test plan

  • Unit tests pass (95%+ coverage on ManagePage.test.tsx — 20 new OrientationsTab tests added)
  • E2E deep-link test (settings-manage.spec.ts) verifies #orientations hash selects the correct tab
  • Pre-commit hook quality gates pass

Co-Authored-By: Claude dev-team-lead (Sonnet 4.6) [email protected]
Co-Authored-By: Claude frontend-developer (Haiku 4.5) [email protected]
Co-Authored-By: Claude qa-integration-tester (Sonnet 4.5) [email protected]
Co-Authored-By: Claude e2e-test-engineer (Sonnet 4.5) [email protected]

@steilerDev steilerDev force-pushed the fix/1687-orientations-css-classes branch from 7784307 to 35659b0 Compare June 15, 2026 18:06

@steilerDev steilerDev left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ux-designer]

Reviewed PR #1698 against the ManagePage design pattern (AreasTab and TradesTab as reference).

Token / class adherence — PASS

All five previously undefined class references now resolve to valid definitions in ManagePage.module.css:

Old (undefined) New (defined)
styles.listContainer styles.itemsList
styles.listItem styles.itemRow
styles.actions (edit row) styles.editActions
styles.button (save) styles.saveButton
styles.itemHeader styles.itemInfo
styles.itemContent styles.itemDetails
styles.itemMeta styles.itemSortOrder

No new CSS was added — the fix is purely reuse of existing, already token-compliant classes. No hardcoded values introduced.

View-mode structure parity — PASS

The restructured view-mode JSX matches the TradesTab pattern precisely:
itemInfo > itemDetails > (span.itemName + span.itemDescription?) + span.itemSortOrder

divspan for itemName, itemDescription, and itemSortOrder is correct: these are inline text nodes inside a flex container, and span is semantically appropriate (consistent with AreasTab and TradesTab).

itemSortOrder now renders #N with a title attribute for the sort order label — matching the other tabs.

Accessibility — PASS

Edit and delete buttons carry aria-label={t('manage.orientations.edit/delete') + ' ' + orientation.name}, following the same pattern as all other tabs. No aria regressions.

No itemSwatch — correct

OrientationsTab correctly omits itemSwatch (the color swatch used by AreasTab). Orientations have no color field.

Verdict: APPROVE

The fix correctly resolves the broken CSS class references and achieves visual and structural parity with the established Manage-tab pattern. No design-system violations introduced.

@steilerDev

Copy link
Copy Markdown
Owner Author

[product-architect] APPROVE — architecture compliance, code quality, and test coverage all pass.

Verdict: Approve

Minimal, mechanical CSS-class alignment fix for #1687. Verified thoroughly:

Fix correctness ✅

  • All 8 target classes (itemsList, itemRow, itemInfo, itemDetails, itemSortOrder, itemActions, editActions, saveButton) are defined in ManagePage.module.css.
  • The 7 previously-referenced classes (listContainer, listItem, itemHeader, itemContent, itemMeta, actions, button) are confirmed undefined (0 matches) — this was the root cause of unstyled rows.
  • Restructured view-mode JSX matches the Areas/Trades tab pattern exactly, correctly omitting the color swatch (orientations have no color). Sort order now renders as a #N badge with a title tooltip, consistent with sibling tabs.

No behavior/accessibility loss ✅

  • Edit/Delete handlers, disabled={!!editingOrientation} guards, and aria-label (Edit {name} / Delete {name}) all preserved.
  • Delete modal (role="dialog", aria-modal) untouched.

Test coverage ✅

  • 13 new OrientationsTab unit cases cover view mode, edit mode, create/update/delete flows, empty state, loading, tab activation, and lazy-load isolation — adequate for the changed paths.
  • 1 new ?tab=orientations deep-link E2E test in settings-manage.spec.ts.
  • OrientationsPage.ts POM doc/comment updates accurately reflect the new DOM; the [class*="itemName"] anchor remains stable.

Architecture notes

  • No shared/backend/schema/API-contract changes — frontend-only. No ADR or wiki impact.
  • Component-reuse policy respected (reuses the established Manage-tab row pattern rather than introducing a parallel structure).

Non-blocking observation

The diff shows dependency version bumps (react 19.2.6→.7, react-router-dom 7.15.1→7.17.0, ical-generator 10→11, sharp, tar, i18next, etc.). These are not introduced by this PR — they are identical to what is already on beta and appear only because the branch's merge-base with beta predates those auto-fix/dependabot commits. They will be no-ops at merge time. No action required; flagging only so the merge reviewer is not surprised by the diff.

OrientationsTab referenced undefined CSS module classes so orientation
rows rendered completely unstyled. Mapped all class references to the
existing defined classes used by TradesTab and other Manage tabs
(itemsList/itemRow/itemInfo/itemDetails/itemSortOrder/itemActions/
editActions/saveButton) and restructured view-mode JSX to match
TradesTab layout.

Added 20 unit tests covering both view and edit modes of OrientationsTab,
and a deep-link E2E test verifying the Orientations tab is selected when
navigating directly to #orientations.

Fixes #1687

Co-Authored-By: Claude dev-team-lead (Sonnet 4.6) <[email protected]>
Co-Authored-By: Claude frontend-developer (Haiku 4.5) <[email protected]>
Co-Authored-By: Claude qa-integration-tester (Sonnet 4.5) <[email protected]>
Co-Authored-By: Claude e2e-test-engineer (Sonnet 4.5) <[email protected]>
@steilerDev steilerDev force-pushed the fix/1687-orientations-css-classes branch from 35659b0 to 15ae12a Compare June 15, 2026 18:24
@steilerDev steilerDev merged commit 65f70e8 into beta Jun 15, 2026
29 of 30 checks passed
@steilerDev steilerDev deleted the fix/1687-orientations-css-classes branch June 15, 2026 18:34
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 2.8.0-beta.17 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant