Skip to content

OSAC-2934: [UI] Catalog item detail page - #106

Open
ElayAharoni wants to merge 22 commits into
osac-project:mainfrom
ElayAharoni:OSAC-2934-catalog-item-detail-page
Open

OSAC-2934: [UI] Catalog item detail page#106
ElayAharoni wants to merge 22 commits into
osac-project:mainfrom
ElayAharoni:OSAC-2934-catalog-item-detail-page

Conversation

@ElayAharoni

@ElayAharoni ElayAharoni commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

OSAC-2934: [UI] Catalog item detail page

Jira: https://redhat.atlassian.net/browse/OSAC-2934
Story type: [UI]

Summary

Adds a catalog item detail page at /admin/catalog/:type/:id for Cluster, ComputeInstance, and BareMetalInstance catalog items. The page shows a header (name, publication status, breadcrumb, role/scope-gated action buttons) above three tabs: Overview, Field Definitions (read-only table), and Provisioned Resources (server-side-paginated list, filtered via CEL to resources created from the catalog item). This is the first story to introduce server-side pagination and Markdown rendering in this codebase.

Changes

API hooks (libs/ui-components/src/api/)

  • cel.ts (new) — shared CEL string-escaping and catalog-item filter builder, extracted from networking.ts
  • New use*ForCatalogItem paginated provisioned-resources hooks (Cluster/ComputeInstance/BareMetalInstance)
  • New single-item catalog fetch hooks for the (kind, visibility-tier) combinations that were missing
  • New useComputeInstanceTemplate/useBareMetalInstanceTemplate hooks, mirroring the existing useClusterTemplate — required wiring BareMetalInstanceTemplates into the shared @osac/types barrel export, which was missing for that kind

Components (libs/ui-components/src/components/)

  • Primitives/SanitizedMarkdown.tsxreact-markdown + rehype-sanitize wrapper for descriptions
  • catalog/catalogItemDisplay.tsformatCatalogFieldValidationSummary (i18n-aware)
  • catalogManagement/CatalogItem{OverviewTab,FieldDefinitionsTab,ProvisionedResourcesTab,PublishToggle,DetailActionButtons,Details}.tsx — the tab content, header actions, and composing detail component

Pages/routing

  • Three kind-specific pages under pages/admin/{cluster,compute-instance,baremetal-instance}/, sharing a common CatalogItemDetailPageShell for loading/error/not-found handling
  • AdminCatalogRoutes.tsx — wires :type/:id to the three pages

Known, deliberate scope boundary

The header's Delete button and publish/unpublish toggle are disabled with an explanatory tooltip ("Deleting and publishing catalog items is not yet available."). Wiring real delete/publish mutations is OSAC-2933's scope — these components already expose onDeleteClick/onTogglePublish callback props so OSAC-2933 can supply real implementations without touching these files.

Testing

  • Unit tests: ~100 new/extended tests across API hooks, components, pages, and routing — happy paths plus edge cases (role/scope visibility gating, empty/loading/error states, pagination interaction and reset-on-navigation, Markdown sanitization against script tags and javascript: URLs, i18n interpolation).
  • Integration tests: N/A — this repo has no frontend integration harness; E2E coverage is tracked separately under OSAC-2935.
  • Coverage: No numeric coverage tool is configured in this repo; every new public hook/component has behavioral-contract test coverage for its primary path and documented edge cases.
  • Full repo test suite (pnpm test), lint, and typecheck all pass.
  • This branch went through two rounds of independent code review (all findings addressed) plus a separate cross-cutting review pass, in addition to the usual per-task review during development.

Acceptance Criteria

  • AC-1: Detail page accessible via list link or direct URL /admin/catalog/:type/:id
  • AC-2: Header shows name, publication status badge, breadcrumb, action buttons
  • AC-3: Overview tab shows name, description (rendered Markdown), resource type, scope, template name, publication status, creation date — template name now resolves to a human-readable value for all three kinds
  • AC-4: Field Definitions tab — read-only table (Path, Display Name, Editable, Default Value, Validation Constraints)
  • AC-5: Provisioned Resources tab lists resources via a this.spec.catalog_item == "<id>" CEL filter
  • AC-6: Provisioned Resources tab uses server-side pagination
  • AC-7: Header uses Flex justifyContentSpaceBetween layout
  • AC-8: Header actions include Edit (primary), Delete (danger), publish/unpublish Switch
  • AC-9: All action buttons and toggle hidden for Tenant Admins viewing general (global) items
  • AC-10: Sanitizing Markdown renderer strips unsafe HTML and javascript: URLs

Summary by CodeRabbit

  • New Features
    • Added admin catalog item detail routing and pages for cluster, compute instance, and bare-metal (with overview/field definitions/provisioned resources).
    • Added role-aware public vs private catalog item rendering, shared detail page shell, and reusable action controls (edit/delete/publish).
    • Added provisioned resources tables and pagination, plus new filtered listing hooks and CEL-safe filtering.
    • Added sanitized Markdown rendering and validation-summary formatting.
  • Bug Fixes
    • Unknown catalog item types now redirect back to the catalog list.
  • Tests
    • Expanded coverage for routing, admin shells/pages, API hooks (public/private/template), pagination, and tooltip/Markdown behavior.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
… kind

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
…gination

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
…oggle

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
…ty comment

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
…C-2933 lands

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
…stance kinds

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
@openshift-ci-robot

openshift-ci-robot commented Jul 29, 2026

Copy link
Copy Markdown

@ElayAharoni: This pull request references OSAC-2934 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

OSAC-2934: [UI] Catalog item detail page

Jira: https://redhat.atlassian.net/browse/OSAC-2934
Story type: [UI]

Summary

Adds a catalog item detail page at /admin/catalog/:type/:id for Cluster, ComputeInstance, and BareMetalInstance catalog items. The page shows a header (name, publication status, breadcrumb, role/scope-gated action buttons) above three tabs: Overview, Field Definitions (read-only table), and Provisioned Resources (server-side-paginated list, filtered via CEL to resources created from the catalog item). This is the first story to introduce server-side pagination and Markdown rendering in this codebase.

Changes

API hooks (libs/ui-components/src/api/)

  • cel.ts (new) — shared CEL string-escaping and catalog-item filter builder, extracted from networking.ts
  • New use*ForCatalogItem paginated provisioned-resources hooks (Cluster/ComputeInstance/BareMetalInstance)
  • New single-item catalog fetch hooks for the (kind, visibility-tier) combinations that were missing
  • New useComputeInstanceTemplate/useBareMetalInstanceTemplate hooks, mirroring the existing useClusterTemplate — required wiring BareMetalInstanceTemplates into the shared @osac/types barrel export, which was missing for that kind

Components (libs/ui-components/src/components/)

  • Primitives/SanitizedMarkdown.tsxreact-markdown + rehype-sanitize wrapper for descriptions
  • catalog/catalogItemDisplay.tsformatCatalogFieldValidationSummary (i18n-aware)
  • catalogManagement/CatalogItem{OverviewTab,FieldDefinitionsTab,ProvisionedResourcesTab,PublishToggle,DetailActionButtons,Details}.tsx — the tab content, header actions, and composing detail component

Pages/routing

  • Three kind-specific pages under pages/admin/{cluster,compute-instance,baremetal-instance}/, sharing a common CatalogItemDetailPageShell for loading/error/not-found handling
  • AdminCatalogRoutes.tsx — wires :type/:id to the three pages

Known, deliberate scope boundary

The header's Delete button and publish/unpublish toggle are disabled with an explanatory tooltip ("Deleting and publishing catalog items is not yet available."). Wiring real delete/publish mutations is OSAC-2933's scope — these components already expose onDeleteClick/onTogglePublish callback props so OSAC-2933 can supply real implementations without touching these files.

Testing

  • Unit tests: ~100 new/extended tests across API hooks, components, pages, and routing — happy paths plus edge cases (role/scope visibility gating, empty/loading/error states, pagination interaction and reset-on-navigation, Markdown sanitization against script tags and javascript: URLs, i18n interpolation).
  • Integration tests: N/A — this repo has no frontend integration harness; E2E coverage is tracked separately under OSAC-2935.
  • Coverage: No numeric coverage tool is configured in this repo; every new public hook/component has behavioral-contract test coverage for its primary path and documented edge cases.
  • Full repo test suite (pnpm test), lint, and typecheck all pass.
  • This branch went through two rounds of independent code review (all findings addressed) plus a separate cross-cutting review pass, in addition to the usual per-task review during development.

Acceptance Criteria

  • AC-1: Detail page accessible via list link or direct URL /admin/catalog/:type/:id
  • AC-2: Header shows name, publication status badge, breadcrumb, action buttons
  • AC-3: Overview tab shows name, description (rendered Markdown), resource type, scope, template name, publication status, creation date — template name now resolves to a human-readable value for all three kinds
  • AC-4: Field Definitions tab — read-only table (Path, Display Name, Editable, Default Value, Validation Constraints)
  • AC-5: Provisioned Resources tab lists resources via a this.spec.catalog_item == "<id>" CEL filter
  • AC-6: Provisioned Resources tab uses server-side pagination
  • AC-7: Header uses Flex justifyContentSpaceBetween layout
  • AC-8: Header actions include Edit (primary), Delete (danger), publish/unpublish Switch
  • AC-9: All action buttons and toggle hidden for Tenant Admins viewing general (global) items
  • AC-10: Sanitizing Markdown renderer strips unsafe HTML and javascript: URLs

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci

openshift-ci Bot commented Jul 29, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: ElayAharoni

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f69b2a05-d7d5-4a97-b60f-7b4f73842a85

📥 Commits

Reviewing files that changed from the base of the PR and between 67ebcbe and 00485b8.

📒 Files selected for processing (14)
  • libs/ui-components/src/api/v1/baremetal-instance-templates.test.ts
  • libs/ui-components/src/api/v1/baremetal-instance-templates.ts
  • libs/ui-components/src/api/v1/compute-instance-templates.test.ts
  • libs/ui-components/src/api/v1/compute-instance-templates.ts
  • libs/ui-components/src/components/catalog/catalogItemDisplay.test.ts
  • libs/ui-components/src/components/catalog/catalogItemDisplay.ts
  • libs/ui-components/src/components/catalogManagement/CatalogItemDetailActionButtons.test.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemOverviewTab.test.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemOverviewTab.tsx
  • libs/ui-components/src/pages/admin/baremetal-instance/BareMetalInstanceCatalogItemDetailPage.tsx
  • libs/ui-components/src/pages/admin/cluster/ClusterCatalogItemDetailPage.tsx
  • libs/ui-components/src/pages/admin/compute-instance/ComputeInstanceCatalogItemDetailPage.tsx
  • libs/ui-components/src/pages/admin/useCatalogItemDetailData.test.ts
  • libs/ui-components/src/pages/admin/useCatalogItemDetailData.ts

Walkthrough

Catalog management now supports typed detail routing, catalog-scoped resource queries, sanitized Markdown, field-definition summaries, action controls, provisioned-resource tabs, and role-aware detail pages for clusters, compute instances, and bare-metal instances.

Changes

Catalog detail routing

Layer / File(s) Summary
Typed detail route dispatch
apps/app-frontend/src/shell/AdminCatalogRoutes.tsx, apps/app-frontend/src/shell/AdminCatalogRoutes.test.tsx
Supported catalog types render their detail pages, while unknown types redirect to the catalog list.
Catalog API hooks and contracts
libs/ui-components/src/api/*, libs/types/src/index.ts, libs/ui-components/package.json
Added catalog filters, public/private catalog hooks, template hooks, API route typing, protobuf exports, and Markdown dependencies.
Detail UI primitives
libs/ui-components/src/components/Primitives/*, libs/ui-components/src/components/catalog/catalogItemDisplay.*
Added sanitized Markdown, conditional tooltips, and validation-constraint formatting.
Catalog detail management UI
libs/ui-components/src/components/catalogManagement/*
Added overview, field-definition, action, publication, kind-mapping, and provisioned-resource components with pagination and tests.
Role-aware detail pages
libs/ui-components/src/pages/admin/*
Added shared loading/error/not-found handling and detail loaders for cluster, compute-instance, and bare-metal catalog items.
Catalog translations
libs/i18n/locales/en/translation.json
Added labels and empty-state messages for catalog details, validation constraints, publication, scopes, templates, and resources.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant AdminCatalogRoutes
  participant CatalogItemDetailPage
  participant CatalogItemAPI
  participant CatalogItemDetails
  participant ProvisionedResourcesAPI
  AdminCatalogRoutes->>CatalogItemDetailPage: dispatch type and id
  CatalogItemDetailPage->>CatalogItemAPI: fetch public or private item
  CatalogItemDetailPage->>CatalogItemDetails: provide item and template data
  CatalogItemDetails->>ProvisionedResourcesAPI: fetch catalog-scoped resources
  ProvisionedResourcesAPI-->>CatalogItemDetails: return items and total
Loading

Possibly related PRs

Suggested labels: lgtm

Suggested reviewers: batzionb, larsks, liatb-rh

🚥 Pre-merge checks | ✅ 11
✅ Passed checks (11 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the main change: adding UI catalog item detail pages and related support code.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
No-Hardcoded-Secrets ✅ Passed Scanned changed files; found no hardcoded API keys/tokens/passwords/private keys, no embedded-credential URLs, and no long base64 blobs. Only benign labels/mock IDs.
No-Weak-Crypto ✅ Passed Scanned PR-touched source files; no MD5/SHA1/DES/RC4/3DES/Blowfish/ECB, custom crypto, or secret comparisons found.
No-Injection-Vectors ✅ Passed No banned sinks found in the modified code; markdown is rendered via react-markdown + rehype-sanitize, not dangerouslySetInnerHTML.
Container-Privileges ✅ Passed PR diff only touched app/code files plus non-manifest JSON/lockfiles; no changed manifests contained privileged, hostPID/Network/IPC, SYS_ADMIN, or allowPrivilegeEscalation flags.
No-Sensitive-Data-In-Logs ✅ Passed No console/logger/trace calls were added in the touched files; the password hook returns data but does not log it.
Ai-Attribution ✅ Passed PR commits include Assisted-by: Claude Code trailers, and no AI-related Co-Authored-By trailers were found.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ElayAharoni
ElayAharoni marked this pull request as ready for review July 29, 2026 07:00
@openshift-ci
openshift-ci Bot requested review from eliorerz and liatb-rh July 29, 2026 07:00
@ElayAharoni
ElayAharoni requested review from batzionb and rawagner and removed request for eliorerz, liatb-rh and rawagner July 29, 2026 07:00
@ElayAharoni
ElayAharoni requested review from batzionb and rawagner and removed request for batzionb July 29, 2026 07:01
Comment thread libs/ui-components/src/components/catalogManagement/CatalogItemDetails.tsx Outdated
…rnally

Replaces the single kind-switching CatalogItemProvisionedResourcesTab with
three per-kind components (Cluster/ComputeInstance/BareMetalInstance), each
calling only its own hook — matching the per-kind convention used elsewhere
in catalog management (list panels, create wizard pages). CatalogItemDetails
now derives its kind from catalogItem.$typeName via catalogItemDetailKind()
instead of requiring callers to pass a redundant kind prop.

Addresses review feedback from rawagner on PR osac-project#106.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
…rnary

CatalogItemDetailActionButtons duplicated the same
"isDisabled ? <Tooltip>...</Tooltip> : <Component>" branch for the publish
toggle and the Delete button. Extracts a shared WithTooltip primitive
(mirroring flightctl-ui's component of the same name) that conditionally
wraps children in a Tooltip, with an opt-in span wrapper for controls that
don't fire hover/focus events while disabled (e.g. a disabled Switch).

Addresses review feedback from rawagner on PR osac-project#106.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@libs/ui-components/src/api/v1/baremetal-instance-templates.ts`:
- Around line 7-15: Both template hooks must trim IDs before query gating and
RPC use. In libs/ui-components/src/api/v1/baremetal-instance-templates.ts lines
7-15, update useBareMetalInstanceTemplate to derive trimmedId, then use it for
queryKey, client.get, and enabled. Apply the same change to
useComputeInstanceTemplate in
libs/ui-components/src/api/v1/compute-instance-templates.ts lines 7-15.

In `@libs/ui-components/src/api/v1/private/cluster-catalog-item.ts`:
- Around line 17-25: The private hooks use public generated services, so their
get() calls reach published-only endpoints. Update usePrivateClusterCatalogItem
in libs/ui-components/src/api/v1/private/cluster-catalog-item.ts lines 17-25,
usePrivateBaremetalInstanceCatalogItem in
libs/ui-components/src/api/v1/private/baremetal-instance-catalog-item.ts lines
20-30, and usePrivateComputeInstanceCatalogItem in
libs/ui-components/src/api/v1/private/compute-instance-catalog-item.ts lines
17-28 to pass the corresponding private RPC client or route to useApiFetch,
while preserving their existing query keys and enabled conditions.

In `@libs/ui-components/src/components/catalog/catalogItemDisplay.ts`:
- Around line 190-196: Update the integer hint logic in catalog item display so
schema.type === 'integer' always adds the “whole number” summary text, including
when minimum or maximum bounds are present. Remove the bound-type guard while
preserving the existing bound summary behavior and update the related
catalogItemDisplay test expectation.

In
`@libs/ui-components/src/components/catalogManagement/CatalogItemDetailActionButtons.test.tsx`:
- Around line 69-99: Update the catalogItem metadata fixtures in both
tenantAdmin tests to use complete osac.public.v1.Metadata objects, including
required fields such as name, creator, labels, annotations, and version. Remove
both as never casts while preserving the tenant and project scope values used by
each test.

In
`@libs/ui-components/src/components/catalogManagement/catalogItemDetailKind.ts`:
- Around line 16-20: Update the default branch of the item type mapping around
exhaustiveCheck so unrecognized $typeName values no longer return
'compute-instance'. Preserve the compile-time never check, and instead emit a
warning or return the established unsupported catalog-item state so unexpected
backend types are visible and cannot select the compute-instance route.

In
`@libs/ui-components/src/components/catalogManagement/CatalogItemOverviewTab.tsx`:
- Around line 51-66: Preserve Markdown-significant whitespace in the description
rendering within CatalogItemOverviewTab by using a trimmed value only for the
emptiness check, while passing the original catalogItem.description to
SanitizedMarkdown. Keep displayValue() for empty descriptions and add a
regression test covering an indented code block or trailing-space hard line
break.

In `@libs/ui-components/src/pages/admin/cluster/ClusterCatalogItemDetailPage.tsx`:
- Around line 9-37: Extract the duplicated role-gated catalog-item and template
resolution into a shared generic hook, such as useCatalogItemDetailData,
preserving the active query result, loading/error state, retry function, and
resolved template. Update ClusterCatalogItemDetailPage.tsx lines 9-37,
ComputeInstanceCatalogItemDetailPage.tsx lines 9-37, and
BareMetalInstanceCatalogItemDetailPage.tsx lines 9-37 to call the shared hook
with their respective public, private, and template hooks, then pass its results
to each existing shell.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c9958d86-d6bd-4e75-8072-25a70ec75f73

📥 Commits

Reviewing files that changed from the base of the PR and between 53f774c and 67ebcbe.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (60)
  • apps/app-frontend/src/shell/AdminCatalogRoutes.test.tsx
  • apps/app-frontend/src/shell/AdminCatalogRoutes.tsx
  • libs/i18n/locales/en/translation.json
  • libs/types/src/index.ts
  • libs/ui-components/package.json
  • libs/ui-components/src/api/cel.test.ts
  • libs/ui-components/src/api/cel.ts
  • libs/ui-components/src/api/types.ts
  • libs/ui-components/src/api/v1/baremetal-instance-templates.test.ts
  • libs/ui-components/src/api/v1/baremetal-instance-templates.ts
  • libs/ui-components/src/api/v1/baremetal-instance.test.ts
  • libs/ui-components/src/api/v1/baremetal-instance.ts
  • libs/ui-components/src/api/v1/cluster.test.ts
  • libs/ui-components/src/api/v1/cluster.ts
  • libs/ui-components/src/api/v1/compute-instance-templates.test.ts
  • libs/ui-components/src/api/v1/compute-instance-templates.ts
  • libs/ui-components/src/api/v1/compute-instance.test.ts
  • libs/ui-components/src/api/v1/compute-instance.ts
  • libs/ui-components/src/api/v1/networking.test.ts
  • libs/ui-components/src/api/v1/networking.ts
  • libs/ui-components/src/api/v1/private/baremetal-instance-catalog-item.test.ts
  • libs/ui-components/src/api/v1/private/baremetal-instance-catalog-item.ts
  • libs/ui-components/src/api/v1/private/cluster-catalog-item.test.ts
  • libs/ui-components/src/api/v1/private/cluster-catalog-item.ts
  • libs/ui-components/src/api/v1/private/compute-instance-catalog-item.test.ts
  • libs/ui-components/src/api/v1/private/compute-instance-catalog-item.ts
  • libs/ui-components/src/components/Primitives/SanitizedMarkdown.test.tsx
  • libs/ui-components/src/components/Primitives/SanitizedMarkdown.tsx
  • libs/ui-components/src/components/Primitives/WithTooltip.test.tsx
  • libs/ui-components/src/components/Primitives/WithTooltip.tsx
  • libs/ui-components/src/components/catalog/catalogItemDisplay.test.ts
  • libs/ui-components/src/components/catalog/catalogItemDisplay.ts
  • libs/ui-components/src/components/catalogManagement/BareMetalInstanceProvisionedResourcesTab.test.tsx
  • libs/ui-components/src/components/catalogManagement/BareMetalInstanceProvisionedResourcesTab.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemDetailActionButtons.test.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemDetailActionButtons.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemDetails.test.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemDetails.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemFieldDefinitionsTab.test.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemFieldDefinitionsTab.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemOverviewTab.test.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemOverviewTab.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemPublishToggle.test.tsx
  • libs/ui-components/src/components/catalogManagement/CatalogItemPublishToggle.tsx
  • libs/ui-components/src/components/catalogManagement/ClusterProvisionedResourcesTab.test.tsx
  • libs/ui-components/src/components/catalogManagement/ClusterProvisionedResourcesTab.tsx
  • libs/ui-components/src/components/catalogManagement/ComputeInstanceProvisionedResourcesTab.test.tsx
  • libs/ui-components/src/components/catalogManagement/ComputeInstanceProvisionedResourcesTab.tsx
  • libs/ui-components/src/components/catalogManagement/ProvisionedResourcesTable.test.tsx
  • libs/ui-components/src/components/catalogManagement/ProvisionedResourcesTable.tsx
  • libs/ui-components/src/components/catalogManagement/catalogItemDetailKind.test.ts
  • libs/ui-components/src/components/catalogManagement/catalogItemDetailKind.ts
  • libs/ui-components/src/pages/admin/CatalogItemDetailPageShell.test.tsx
  • libs/ui-components/src/pages/admin/CatalogItemDetailPageShell.tsx
  • libs/ui-components/src/pages/admin/baremetal-instance/BareMetalInstanceCatalogItemDetailPage.test.tsx
  • libs/ui-components/src/pages/admin/baremetal-instance/BareMetalInstanceCatalogItemDetailPage.tsx
  • libs/ui-components/src/pages/admin/cluster/ClusterCatalogItemDetailPage.test.tsx
  • libs/ui-components/src/pages/admin/cluster/ClusterCatalogItemDetailPage.tsx
  • libs/ui-components/src/pages/admin/compute-instance/ComputeInstanceCatalogItemDetailPage.test.tsx
  • libs/ui-components/src/pages/admin/compute-instance/ComputeInstanceCatalogItemDetailPage.tsx
💤 Files with no reviewable changes (1)
  • libs/ui-components/src/api/v1/networking.test.ts

Comment thread libs/ui-components/src/api/v1/baremetal-instance-templates.ts
Comment thread libs/ui-components/src/api/v1/private/cluster-catalog-item.ts
Comment thread libs/ui-components/src/components/catalog/catalogItemDisplay.ts Outdated
Comment thread libs/ui-components/src/components/catalogManagement/CatalogItemOverviewTab.tsx Outdated
useComputeInstanceTemplate and useBareMetalInstanceTemplate checked
Boolean(id) directly instead of trimming first, so a whitespace-only id
slipped past the enabled guard and reached the Get RPC.

Addresses CodeRabbit review feedback on PR osac-project#106.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
formatCatalogFieldValidationSummary suppressed the "whole number" hint
whenever minimum/maximum was also present, silently dropping the integer
constraint from the summary shown next to a bounded integer field.

Addresses CodeRabbit review feedback on PR osac-project#106.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
…tests

CatalogItemDetailActionButtons.test.tsx cast partial metadata objects to
never to satisfy the public Metadata type, bypassing type checking on the
fixtures entirely. Adds a publicMetadata() builder providing the full
required shape (name, creator, labels, annotations, version) instead.

Addresses CodeRabbit review feedback on PR osac-project#106.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
CatalogItemOverviewTab trimmed the description before handing it to
SanitizedMarkdown, which strips leading indentation needed for indented
code blocks and trailing hard-line-break spaces. Trim only to decide
whether a description is present; render the original string.

Addresses CodeRabbit review feedback on PR osac-project#106.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
The three kind-specific catalog item detail pages duplicated identical
role-gated public/private hook selection plus template resolution, with
only the hook triplet swapped per kind. Collapses that into a single
generic useCatalogItemDetailData hook so the role-gating logic lives in
one place.

Addresses CodeRabbit review feedback on PR osac-project#106.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
@openshift-ci

openshift-ci Bot commented Jul 30, 2026

Copy link
Copy Markdown

PR needs rebase.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

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.

3 participants