Skip to content

[EDIFIKANA] Add Properties row + fix OrgDetail mock fidelity#558

Open
CRamsan wants to merge 4 commits into
mainfrom
cr/542-org-detail-property-count
Open

[EDIFIKANA] Add Properties row + fix OrgDetail mock fidelity#558
CRamsan wants to merge 4 commits into
mainfrom
cr/542-org-detail-property-count

Conversation

@CRamsan

@CRamsan CRamsan commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds a "Properties" count row to OrgDetailScreen's info card (Your Role / Members / Properties / Joined), computed via PropertyManager.getPropertyList() filtered to the org — matching the pattern already established in MyOrganizationsViewModel. ([FEATURE] Organization Detail #542)
  • Fixes OrgDetailScreen's mock fidelity: cards now use the established Shapes.pill/border/elevation pattern with an explicit white container color (was falling back to Material3's tonal-elevation gray), the "Active" state renders as a real pill badge instead of plain text, typography matches the mock's declared sizes/weights, and the Transfer Ownership row gained its missing leading icon.
  • Adds StatusColors (success/warning container colors, light+dark) and StatusPillBadge as new shared design tokens/composable in ui-components — no success/warning color existed anywhere in the Kotlin theme before this.
  • Extracts MyOrganizationsScreen's "Current" badge onto the new shared StatusPillBadge, removing a near-duplicate composable found during review.

Demo

  • edifikana/front-end/app/screenshots/OrgDetailScreenPreviewKt.../OrgDetailScreenPreview_Phone.png
  • edifikana/front-end/app/screenshots/OrgDetailScreenPreviewKt.../OrgDetailScreenPreview_Desktop.png
  • edifikana/front-end/app/screenshots/OrgDetailScreenPreviewKt.../OrgDetailScreenPreview_Tablet.png
  • edifikana/front-end/app/screenshots/OrgDetailScreenPreviewKt.../OrgDetailScreenSoleOwnerPreview.png
  • edifikana/front-end/app/screenshots/MyOrganizationsScreenPreviewKt.../MyOrganizationsScreenPreview_Phone.png
  • edifikana/front-end/app/screenshots/MyOrganizationsScreenPreviewKt.../MyOrganizationsScreenPreview_Desktop.png
  • edifikana/front-end/app/screenshots/MyOrganizationsScreenPreviewKt.../MyOrganizationsScreenPreview_Tablet.png

References

  • Closes [FEATURE] Organization Detail #542
  • Plan: ~/.claude/plans/issue-542-org-detail-property-count.md
  • Verification: ~/.claude/plans/issue-542-org-detail-property-count-verification.md
  • Mock: edifikana/mockups/organization-detail.html

Test plan

  • ./gradlew :edifikana:front-end:app:release --quiet passes (compiler, ktlint, detekt, unit tests)
  • ./gradlew :edifikana:front-end:ui-components:release --quiet passes
  • ./gradlew :edifikana:front-end:app:jvmTest --tests "com.cramsan.edifikana.client.lib.features.settings.organizations.orgdetail.OrgDetailViewModelTest" — all 10 tests pass, including the two new cases (property count with cross-org filtering, and fetch-failure defaulting to 0)
  • Navigate to Settings → My Organizations → tap an organization to open Organization Detail; confirm the info card shows Your Role / Members / Properties / Joined in that order with correct values
  • Confirm the "Active" badge renders as a green pill (not plain text) on the current organization
  • Confirm the Transfer Ownership row (Owner role only) shows a wrench icon in a warning-colored circle
  • Visually compare against edifikana/mockups/organization-detail.html — white, bordered, shadowed pill-cornered cards
  • Confirm My Organizations screen's "Current" badge still renders correctly after being refactored onto the shared StatusPillBadge

Cramsan and others added 4 commits July 22, 2026 17:58
Computes the per-org property count via PropertyManager.getPropertyList()
filtered to orgId, matching the pattern already used in
MyOrganizationsViewModel, and renders it in OrgDetailScreen's InfoCard
between Members and Joined to match the mockup.
…hy (#542)

OrgDetailScreen's cards, "Active" status, and typography had drifted from
organization-detail.html: bare Card() with no shape/border/elevation, a
plain-text "Active" label instead of a badge, headlineSmall/bodyMedium
defaults instead of the mock's declared sizes/weights, and a bare
Transfer Ownership row with no leading icon.

- Apply Shapes.pill/outlineVariant border/Elevation.resting to all three
  cards, matching the pattern already established in
  MyOrganizationsScreen.OrgCard, plus an explicit surfaceContainerLowest
  container color so cards render white instead of tonal-elevation gray.
- Add StatusColors (success/warning container + on-container, light+dark)
  to ui-components/theme — no equivalent semantic color existed anywhere
  in the Kotlin theme for the mock's green/amber badge tokens.
- Render "Active" as a real pill Surface instead of plain colored text.
- Match org-name and info-row value typography to the mock's declared
  sizes/weights (20sp/600, 16sp/500) via local style overrides.
- Add IconBadge (wrench, warning colors) as the Transfer Ownership row's
  leading element, matching the mock's list-item icon.
review-ui flagged three P1s on the OrgDetailScreen mock-fidelity fix:
a hardcoded fontSize/fontWeight literal for the org name, a hardcoded
RoundedCornerShape(percent = 50) badge shape literal, and a duplicated
badge composable (structurally identical to MyOrganizationsScreen's
"Current" badge).

- Add Shapes.badgePill and Typography.cardTitle tokens to
  ui-components/theme, following the existing Shapes/Elevation/Spacing
  token-object convention.
- Extract StatusPillBadge (ui-components/components) and use it from
  both OrgDetailScreen's "Active" badge and MyOrganizationsScreen's
  "Current" badge, removing the duplication instead of just fixing it
  in one place.
@claude

claude Bot commented Jul 23, 2026

Copy link
Copy Markdown

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

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.

[FEATURE] Organization Detail

1 participant