Skip to content

feat(custom-properties): inline Add/Edit panel with Show Hint toggle in workspace profile - #33062

Merged
Rohit0301 merged 23 commits into
mainfrom
edit-custom-property-ux-rules
Sep 11, 2026
Merged

Rohit0301 merged 23 commits into
mainfrom
edit-custom-property-ux-rules

Conversation

@Rohit0301

@Rohit0301 Rohit0301 commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Describe your changes:

Fixes 6444

Screenshot 2026-09-09 at 5 12 54 PM Screenshot 2026-09-09 at 5 13 03 PM Screenshot 2026-09-09 at 5 13 15 PM Screenshot 2026-09-09 at 5 14 11 PM Screenshot 2026-09-09 at 5 14 27 PM

I added an inline Custom Properties management panel to the workspace profile page. The panel lets users browse entity types, view their custom properties, and add/edit properties without leaving the profile context. A Show Hint toggle in the Add/Edit header surfaces per-field documentation inline, driven by a new Hint icon added to the core-components icon library.

Type of change:

  • New feature

High-level design:

New components (CustomPropertiesPanel/):

  • CustomPropertiesLandingPage — grid of entity types the user can manage
  • CustomPropertiesDetailPage — table of existing custom properties for a selected type, with Add/Edit actions
  • CustomPropertiesAddPage — react-hook-form form for creating a new custom property (name, display name, type, enum/format/entity-ref/table config, description)
  • CustomPropertiesEditPage — form for editing display name, description, and mutable config of an existing property
  • CustomPropertiesPanel — orchestrator with breadcrumb navigation, sub-view state, and the Show Hint toggle

Icon: hint.svg added to openmetadata-ui-core-components/icons/, regenerated via yarn icons:generate, exported as Hint from @openmetadata/ui-core-components/icons.

i18n: new keys added to en-us.json and synced to all 19 other locale files via yarn i18n.

Tests:

Use cases covered

  • Admin can browse entity types with custom properties from the workspace profile
  • Admin can add a new custom property (text, enum, date, entity-reference, table types)
  • Admin can edit display name, description, and enum/entity-ref config of an existing property
  • Show Hint toggle surfaces inline field docs on the Add/Edit form

Unit tests

  • Not added (UI-only panel wiring; logic delegated to existing REST utilities and core-components form helpers)

Backend integration tests

  • Not applicable (no backend API changes)

Ingestion integration tests

  • Not applicable

Playwright (UI) tests

  • Added: openmetadata-ui/src/main/resources/ui/playwright/e2e/Features/AIMode/CustomPropertiesPanel.spec.ts

Manual testing performed

  1. Opened workspace profile → Custom Properties nav entry
  2. Selected an entity type, confirmed property list renders
  3. Added a new enum property with multi-select — saved successfully
  4. Edited description of an existing property — saved successfully
  5. Toggled Show Hint on Add form — per-field doc popovers appeared

UI screen recording / screenshots:

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • My PR is linked to a GitHub issue via Fixes #<issue-number> above.
  • For UI changes: I attached a screen recording and/or screenshots above.
  • I have added tests (Playwright) and listed them above.

…Edit UX in workspace profile

- Add CustomPropertiesPanel, CustomPropertiesLandingPage, CustomPropertiesDetailPage, CustomPropertiesAddPage, CustomPropertiesEditPage components for managing custom properties directly from the workspace profile
- Wire the panel into ProfilePage and profileNavConfig under the Custom Properties nav entry
- Add a "Show Hint" toggle (with new Hint icon) in the Add/Edit header that surfaces field-level documentation inline
- Add Hint SVG icon to core-components icons library and regenerate the icon barrel
- Add i18n keys for new UI strings across all 20 locale files
- Add Playwright E2E spec for the Custom Properties panel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

❌ PR checklist incomplete

This PR cannot be merged until the following are addressed on its linked issue:

  • No GitHub issue is linked. Link an issue in the Development section of the PR (or add Fixes #12345 to the description). For a same-org cross-repo issue, add Fixes open-metadata/<repo>#123 to the description.

The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically.

Maintainers can bypass this check by adding the skip-pr-checks label.

@github-actions github-actions Bot added the UI UI specific issues label Sep 9, 2026
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@Rohit0301 Rohit0301 self-assigned this Sep 9, 2026
@Rohit0301 Rohit0301 added the safe to test Add this label to run secure Github workflows on PRs label Sep 9, 2026
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

🔄 Playwright impact map auto-refreshed

This PR touched specs or UI source that changed the source→spec routing map. I regenerated .github/playwright/impact-map.generated.json and pushed the diff to this branch.

- source entries: 553 → 560
- 7 added, 0 removed, 7 changed spec-list

New source→spec entries:
  openmetadata-ui/src/main/resources/ui/src/components/common/Table/TableV2.tsx
  openmetadata-ui/src/main/resources/ui/src/components/discovery/personal-space/AIUserMenu/AIUserMenu.tsx
  openmetadata-ui/src/main/resources/ui/src/components/discovery/personal-space/Profile/ProfilePage.tsx
  openmetadata-ui/src/main/resources/ui/src/components/discovery/personal-space/Profile/panels/CustomPropertiesPanel/CustomPropertiesAddPage.tsx
  openmetadata-ui/src/main/resources/ui/src/components/discovery/personal-space/Profile/panels/CustomPropertiesPanel/CustomPropertiesDetailPage.tsx
  openmetadata-ui/src/main/resources/ui/src/components/discovery/personal-space/Profile/panels/CustomPropertiesPanel/CustomPropertiesEditPage.tsx
  openmetadata-ui/src/main/resources/ui/src/components/discovery/personal-space/Profile/panels/CustomPropertiesPanel/CustomPropertiesLandingPage.tsx

Entries whose spec list changed:
  openmetadata-ui/src/main/resources/ui/src/components/DataQuality/TestSuite/TestSuitePipelineTab/TestSuitePipelineTab.component.tsx
  openmetadata-ui/src/main/resources/ui/src/components/Glossary/GlossaryTermTab/GlossaryTermTab.component.tsx
  openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionListTable/IngestionListTable.tsx
  openmetadata-ui/src/main/resources/ui/src/components/common/DeleteModal/DeleteModal.tsx
  openmetadata-ui/src/main/resources/ui/src/components/common/DeleteWidget/DeleteEntityModal.tsx
  openmetadata-ui/src/main/resources/ui/src/context/LineageProvider/LineageProvider.tsx
  openmetadata-ui/src/main/resources/ui/src/generated/entity/data/table.ts

What is this file? It is the auto-generated half of Playwright's PR planner. It routes "if source X changes, run specs Y" by walking spec imports and cross-referencing getByTestId strings. Hand-authored routing in impact-map.json always wins on conflict.

What if I want to regenerate locally instead? Run this before pushing your next change to skip the bot commit:

python3 .github/scripts/generate_playwright_impact_map.py
git add .github/playwright/impact-map.generated.json
git commit --amend --no-edit  # or a separate commit

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 72%
72.42% (99048/136764) 56.94% (58426/102597) 58.22% (19516/33519)

Rohit0301 and others added 9 commits September 10, 2026 14:43
…types

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ve dynamic header via callback

- Remove getContentClassName from utils; inline as a variable in CustomPropertiesPanel
- Extend ProfileContentHeader with optional breadcrumbs, onBreadcrumbAction, iconNode,
  and actions props so dynamic panels can override any slot without duplicating markup
- Replace renderWithManagedHeader with selfContainedLayout (controls content scroll
  wrapper only; header always rendered by ProfilePage)
- Add HeaderOverride type and onHeaderChange callback to ProfileNavRenderContext so
  panels push dynamic state up to ProfilePage rather than rendering their own header
- CustomPropertiesPanel calls onHeaderChange in a useEffect whenever subView changes,
  keeping all header rendering centralized in ProfilePage
- Simple panels (ProfileDetailsPanel, PermissionsTab, AccessTokenPanel) unchanged

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…r HeaderOverride

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds 84 Jest + React Testing Library tests across 6 new test files covering
the CustomPropertiesPanel components and utilities added in this branch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace `any` with proper inline types and `as unknown as T` assertions
across all 5 CustomPropertiesPanel test files. Also fix jsx-a11y issues:
add aria-label to textarea/button mocks, tabIndex+onKeyDown to Card mock,
and remove non-null assertion using a deferred-object pattern.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🔄 Playwright impact map auto-refreshed

This PR touched specs or UI source that changed the source→spec routing map. I regenerated .github/playwright/impact-map.generated.json and pushed the diff to this branch.

- source entries: 765 → 765
- 0 added, 0 removed, 6 changed spec-list

Entries whose spec list changed:
  openmetadata-ui/src/main/resources/ui/playwright/support/entity/TableClass.ts
  openmetadata-ui/src/main/resources/ui/playwright/support/fixtures/base.ts
  openmetadata-ui/src/main/resources/ui/playwright/utils/common.ts
  openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts
  openmetadata-ui/src/main/resources/ui/playwright/utils/entity.ts
  openmetadata-ui/src/main/resources/ui/playwright/utils/tier.ts

What is this file? It is the auto-generated half of Playwright's PR planner. It routes "if source X changes, run specs Y" by walking spec imports and cross-referencing getByTestId strings. Hand-authored routing in impact-map.json always wins on conflict.

What if I want to regenerate locally instead? Run this before pushing your next change to skip the bot commit:

python3 .github/scripts/generate_playwright_impact_map.py
git add .github/playwright/impact-map.generated.json
git commit --amend --no-edit  # or a separate commit

karanh37
karanh37 previously approved these changes Sep 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🚦 Removed from the merge queue — manual (2026-09-11T06:30:35Z)

Blocked the queue: ui-checkstyle

Replace raw permission.EditAll with permission[Operation.EditAll] to satisfy
the openmetadata-permissions/no-raw-permission-access ESLint rule.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Comment thread openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json Outdated
"entity-feed-plural": "Entity feeds",
"entity-fqn": "Entity FQN",
"entity-group-api": "API",
"entity-group-dashboards-and-reporting": "Dashboards & Reporting",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

From where this entity-group coming?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

we have defined that on the frontend, as per the figma design.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

It should be on page directory no?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This isn’t actually a page; it’s a component that renders inside the modal. We’re not adding it to any route.

@github-actions

Copy link
Copy Markdown
Contributor

🔄 Playwright impact map auto-refreshed

This PR touched specs or UI source that changed the source→spec routing map. I regenerated .github/playwright/impact-map.generated.json and pushed the diff to this branch.

- source entries: 765 → 766
- 1 added, 0 removed, 0 changed spec-list

New source→spec entries:
  openmetadata-ui/src/main/resources/ui/src/components/common/atoms/Tag/GlossaryTag.tsx

What is this file? It is the auto-generated half of Playwright's PR planner. It routes "if source X changes, run specs Y" by walking spec imports and cross-referencing getByTestId strings. Hand-authored routing in impact-map.json always wins on conflict.

What if I want to regenerate locally instead? Run this before pushing your next change to skip the bot commit:

python3 .github/scripts/generate_playwright_impact_map.py
git add .github/playwright/impact-map.generated.json
git commit --amend --no-edit  # or a separate commit

@gitar-bot

gitar-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Code Review ✅ Approved 1 resolved / 1 findings

Adds inline custom properties management panel to workspace profile with Add/Edit forms and a Show Hint toggle for inline field documentation. The enum value removal bug has been fixed, and Playwright tests cover the new UI flows. No issues found.

✅ 1 resolved
Bug: Editing an enum property cannot remove existing values

📄 openmetadata-ui/src/main/resources/ui/src/components/discovery/personal-space/Profile/panels/CustomPropertiesPanel/CustomPropertiesEditPage.tsx:291-303
In CustomPropertiesEditPage.handleSubmit, the enum config is rebuilt as uniq([...existingEnumValues, ...newValues]). Since the form's enumConfig is already initialized to existingEnumValues, re-merging the existing values makes removal impossible: any value the user deletes from the multi-select is silently re-added on save. This diverges from the existing EditCustomPropertyModal, which lets users remove enum values. Use the submitted values directly (e.g. values: uniq(data.enumConfig.map(toId))) so deletions are honored.

Options

Display: compact → Counting what did not apply, without listing it.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source

@sonarqubecloud

Copy link
Copy Markdown

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

Labels

safe to test Add this label to run secure Github workflows on PRs UI UI specific issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants