Skip to content

Commit aff3105

Browse files
feat: enable namespace definition editing and customize entity about cards (#479)
* feat: customize entity about cards and enable namespace definition editing - Create OpenChoreoAboutCard with permission-gated edit icon linking to /definition tab, annotation-driven View Source/TechDocs visibility, and renamed labels (Domain→Namespace, System→Project) - Keep upstream EntityAboutCard for Backstage-native kinds (API, Resource) - Add namespace update/delete permissions and wire into useResourceDefinitionPermission hook - Add Definition tab to Domain/Namespace entity page with full backend support (GET/PUT/DELETE /api/v1/namespaces/{namespaceName}) - Add namespace to PlatformResourceService, router valid kinds, ResourceDefinition utils, and PlatformResourceKind type - Enable annotation editor for all OpenChoreo-managed entity kinds with info banner about Backstage-only persistence Signed-off-by: Kavith Lokuhewage <kaviththiranga@gmail.com> * fix: alias Domain as Namespace in resource definition tab title Signed-off-by: Kavith Lokuhewage <kaviththiranga@gmail.com> * fix: address coderabbit comment Signed-off-by: Kavith Lokuhewage <kaviththiranga@gmail.com> --------- Signed-off-by: Kavith Lokuhewage <kaviththiranga@gmail.com>
1 parent a869fc1 commit aff3105

File tree

13 files changed

+481
-26
lines changed

13 files changed

+481
-26
lines changed

packages/app/src/components/catalog/EntityLayoutWithDelete.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const KIND_DISPLAY_NAMES: Record<string, string> = {
2020

2121
/** Platform resource kinds that support upfront permission checking for delete */
2222
const PLATFORM_RESOURCE_KINDS = new Set([
23+
'domain',
2324
'environment',
2425
'dataplane',
2526
'clusterdataplane',

packages/app/src/components/catalog/EntityPage.tsx

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
hasRelationWarnings,
2121
} from '@backstage/plugin-catalog';
2222
import { EntityRelationWarning } from './EntityRelationWarning';
23+
import { OpenChoreoAboutCard } from './OpenChoreoAboutCard';
2324
import {
2425
ComponentTypeUtils,
2526
type PageVariant,
@@ -264,9 +265,18 @@ function OverviewContent() {
264265
</FeatureGate>
265266
</EntitySwitch.Case>
266267
</EntitySwitch>
267-
<Grid item md={6}>
268-
<EntityAboutCard variant="gridItem" />
269-
</Grid>
268+
<EntitySwitch>
269+
<EntitySwitch.Case if={isKind('component')}>
270+
<Grid item md={6} xs={12}>
271+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
272+
</Grid>
273+
</EntitySwitch.Case>
274+
<EntitySwitch.Case>
275+
<Grid item md={6} xs={12}>
276+
<EntityAboutCard variant="gridItem" />
277+
</Grid>
278+
</EntitySwitch.Case>
279+
</EntitySwitch>
270280
<Grid item md={6} xs={12}>
271281
<EntityCatalogGraphCard
272282
variant="gridItem"
@@ -605,7 +615,7 @@ const systemPage = (
605615

606616
{/* Row 2: About + Catalog Relations */}
607617
<Grid item md={6} xs={12}>
608-
<EntityAboutCard variant="gridItem" />
618+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
609619
</Grid>
610620
<Grid item md={6} xs={12}>
611621
<EntityCatalogGraphCard
@@ -681,7 +691,7 @@ const domainPage = (
681691
<NamespaceResourcesCard />
682692
</Grid>
683693
<Grid item md={6}>
684-
<EntityAboutCard variant="gridItem" />
694+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
685695
</Grid>
686696
<Grid item md={6} xs={12}>
687697
<EntityCatalogGraphCard
@@ -694,6 +704,9 @@ const domainPage = (
694704
</Grid>
695705
</Grid>
696706
</OpenChoreoEntityLayout.Route>
707+
<OpenChoreoEntityLayout.Route path="/definition" title="Definition">
708+
<ResourceDefinitionTab />
709+
</OpenChoreoEntityLayout.Route>
697710
</EntityLayoutWithDelete>
698711
);
699712

@@ -748,7 +761,7 @@ const environmentPage = (
748761
</Grid>
749762
{/* Row 4: About + Catalog Graph */}
750763
<Grid item md={6} xs={12}>
751-
<EntityAboutCard variant="gridItem" />
764+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
752765
</Grid>
753766
<Grid item md={6} xs={12}>
754767
<EntityCatalogGraphCard
@@ -794,7 +807,7 @@ const dataplanePage = (
794807
</Grid>
795808
{/* Row 3: About + Catalog Graph */}
796809
<Grid item md={6} xs={12}>
797-
<EntityAboutCard variant="gridItem" />
810+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
798811
</Grid>
799812
<Grid item md={6} xs={12}>
800813
<EntityCatalogGraphCard
@@ -837,7 +850,7 @@ const clusterDataplanePage = (
837850
</Grid>
838851
{/* Row 3: About + Catalog Graph */}
839852
<Grid item md={6} xs={12}>
840-
<EntityAboutCard variant="gridItem" />
853+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
841854
</Grid>
842855
<Grid item md={6} xs={12}>
843856
<EntityCatalogGraphCard
@@ -889,7 +902,7 @@ const workflowPlanePage = (
889902
</Grid>
890903
{/* Row 2: About */}
891904
<Grid item md={12} xs={12}>
892-
<EntityAboutCard variant="gridItem" />
905+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
893906
</Grid>
894907
</Grid>
895908
</OpenChoreoEntityLayout.Route>
@@ -921,7 +934,7 @@ const clusterWorkflowPlanePage = (
921934
/>
922935
</Grid>
923936
<Grid item md={12} xs={12}>
924-
<EntityAboutCard variant="gridItem" />
937+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
925938
</Grid>
926939
</Grid>
927940
</OpenChoreoEntityLayout.Route>
@@ -948,7 +961,7 @@ const observabilityPlanePage = (
948961
</Grid>
949962
{/* Row 2: About + Catalog Graph */}
950963
<Grid item md={6} xs={12}>
951-
<EntityAboutCard variant="gridItem" />
964+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
952965
</Grid>
953966
<Grid item md={6} xs={12}>
954967
<EntityCatalogGraphCard
@@ -986,7 +999,7 @@ const clusterObservabilityPlanePage = (
986999
</Grid>
9871000
{/* Row 2: About + Catalog Graph */}
9881001
<Grid item md={6} xs={12}>
989-
<EntityAboutCard variant="gridItem" />
1002+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
9901003
</Grid>
9911004
<Grid item md={6} xs={12}>
9921005
<EntityCatalogGraphCard
@@ -1021,7 +1034,7 @@ const deploymentPipelinePage = (
10211034
</Grid>
10221035
{/* Row 2: About + Catalog Graph */}
10231036
<Grid item md={6} xs={12}>
1024-
<EntityAboutCard variant="gridItem" />
1037+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
10251038
</Grid>
10261039
<Grid item md={6} xs={12}>
10271040
<EntityCatalogGraphCard
@@ -1065,7 +1078,7 @@ const componentTypePage = (
10651078
/>
10661079
</Grid>
10671080
<Grid item md={12} xs={12}>
1068-
<EntityAboutCard variant="gridItem" />
1081+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
10691082
</Grid>
10701083
</Grid>
10711084
</OpenChoreoEntityLayout.Route>
@@ -1094,7 +1107,7 @@ const traitTypePage = (
10941107
/>
10951108
</Grid>
10961109
<Grid item md={12} xs={12}>
1097-
<EntityAboutCard variant="gridItem" />
1110+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
10981111
</Grid>
10991112
</Grid>
11001113
</OpenChoreoEntityLayout.Route>
@@ -1120,7 +1133,7 @@ const clusterComponentTypePage = (
11201133
/>
11211134
</Grid>
11221135
<Grid item md={12} xs={12}>
1123-
<EntityAboutCard variant="gridItem" />
1136+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
11241137
</Grid>
11251138
</Grid>
11261139
</OpenChoreoEntityLayout.Route>
@@ -1146,7 +1159,7 @@ const clusterTraitTypePage = (
11461159
/>
11471160
</Grid>
11481161
<Grid item md={12} xs={12}>
1149-
<EntityAboutCard variant="gridItem" />
1162+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
11501163
</Grid>
11511164
</Grid>
11521165
</OpenChoreoEntityLayout.Route>
@@ -1175,7 +1188,7 @@ const workflowPage = (
11751188
/>
11761189
</Grid>
11771190
<Grid item md={12} xs={12}>
1178-
<EntityAboutCard variant="gridItem" />
1191+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
11791192
</Grid>
11801193
</Grid>
11811194
</OpenChoreoEntityLayout.Route>
@@ -1210,7 +1223,7 @@ const clusterWorkflowPage = (
12101223
/>
12111224
</Grid>
12121225
<Grid item md={12} xs={12}>
1213-
<EntityAboutCard variant="gridItem" />
1226+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
12141227
</Grid>
12151228
</Grid>
12161229
</OpenChoreoEntityLayout.Route>
@@ -1254,7 +1267,7 @@ const componentWorkflowPage = (
12541267
/>
12551268
</Grid>
12561269
<Grid item md={12} xs={12}>
1257-
<EntityAboutCard variant="gridItem" />
1270+
<OpenChoreoAboutCard variant="gridItem" showEditIcon />
12581271
</Grid>
12591272
</Grid>
12601273
</OpenChoreoEntityLayout.Route>

0 commit comments

Comments
 (0)