From c3e4074adfa38eafba9b3244bbb8ef96ab398826 Mon Sep 17 00:00:00 2001 From: typescreep Date: Thu, 7 Aug 2025 18:20:29 +0300 Subject: [PATCH] table customization id with context --- .../TableBuiltinInfo/TableBuiltinInfo.tsx | 11 ++++++-- .../organisms/TableCrdInfo/TableCrdInfo.tsx | 3 +++ .../molecules/ResourceInfo/ResourceInfo.tsx | 4 ++- .../TableNonCrdInfo/TableNonCrdInfo.tsx | 4 ++- src/pages/TableApiPage/TableApiPage.tsx | 8 ++++++ .../TableBuiltinPage/TableBuiltinPage.tsx | 8 ++++++ src/pages/TableCrdPage/TableCrdPage.tsx | 8 ++++++ src/utils/getTableCustomizationIdPrefix.ts | 25 +++++++++++++++++++ 8 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 src/utils/getTableCustomizationIdPrefix.ts diff --git a/src/components/organisms/TableBuiltinInfo/TableBuiltinInfo.tsx b/src/components/organisms/TableBuiltinInfo/TableBuiltinInfo.tsx index 54901a7..cd775c8 100644 --- a/src/components/organisms/TableBuiltinInfo/TableBuiltinInfo.tsx +++ b/src/components/organisms/TableBuiltinInfo/TableBuiltinInfo.tsx @@ -28,9 +28,16 @@ type TTableBuiltinInfoProps = { typeName: string limit: string | null inside?: boolean + customizationIdPrefix: string } -export const TableBuiltinInfo: FC = ({ namespace, typeName, limit, inside }) => { +export const TableBuiltinInfo: FC = ({ + namespace, + typeName, + limit, + inside, + customizationIdPrefix, +}) => { const navigate = useNavigate() const params = useParams() const cluster = useSelector((state: RootState) => state.cluster.cluster) @@ -131,7 +138,7 @@ export const TableBuiltinInfo: FC = ({ namespace, typeNa {!error && data && ( = ({ @@ -21,6 +22,7 @@ export const TableCrdInfo: FC = ({ apiExtensionVersion, crdName, inside, + customizationIdPrefix, }) => { const cluster = useSelector((state: RootState) => state.cluster.cluster) @@ -96,6 +98,7 @@ export const TableCrdInfo: FC = ({ canDelete: isNamespaced ? true : deletePermission.data?.status.allowed, }} inside={inside} + customizationIdPrefix={customizationIdPrefix} /> )} diff --git a/src/components/organisms/TableCrdInfo/molecules/ResourceInfo/ResourceInfo.tsx b/src/components/organisms/TableCrdInfo/molecules/ResourceInfo/ResourceInfo.tsx index 0e3bbe0..dbaa9a6 100644 --- a/src/components/organisms/TableCrdInfo/molecules/ResourceInfo/ResourceInfo.tsx +++ b/src/components/organisms/TableCrdInfo/molecules/ResourceInfo/ResourceInfo.tsx @@ -37,6 +37,7 @@ type TResourceInfoProps = { canDelete?: boolean } inside?: boolean + customizationIdPrefix: string } export const ResourceInfo: FC = ({ @@ -50,6 +51,7 @@ export const ResourceInfo: FC = ({ crdAdditionalPrinterColumns, permissions, inside, + customizationIdPrefix, }) => { const navigate = useNavigate() const params = useParams() @@ -128,7 +130,7 @@ export const ResourceInfo: FC = ({ {!error && data && ( = ({ @@ -40,6 +41,7 @@ export const TableNonCrdInfo: FC = ({ typeName, limit, inside, + customizationIdPrefix, }) => { const navigate = useNavigate() const params = useParams() @@ -145,7 +147,7 @@ export const TableNonCrdInfo: FC = ({ {!error && data && ( = ({ forcedTheme, inside }) => project: !!namespace, inside, })}api-table` + const tableCustomizationIdPrefix = getTableCustomizationIdPrefix({ + instance: !!syntheticProject, + project: BASE_USE_NAMESPACE_NAV !== 'true' && !!namespace, + namespace: !!namespace, + inside, + }) const isProjectList = !namespace && @@ -79,6 +86,7 @@ export const TableApiPage: FC = ({ forcedTheme, inside }) => typeName={typeName} limit={searchParams.get('limit')} inside={inside} + customizationIdPrefix={tableCustomizationIdPrefix} /> )} diff --git a/src/pages/TableBuiltinPage/TableBuiltinPage.tsx b/src/pages/TableBuiltinPage/TableBuiltinPage.tsx index 87bfd04..9792b88 100644 --- a/src/pages/TableBuiltinPage/TableBuiltinPage.tsx +++ b/src/pages/TableBuiltinPage/TableBuiltinPage.tsx @@ -6,6 +6,7 @@ import type { RootState } from 'store/store' import { TableBuiltinInfo, BackLink, ManageableBreadcrumbs, ManageableSidebar, NavigationContainer } from 'components' import { getSidebarIdPrefix } from 'utils/getSidebarIdPrefix' import { getBreadcrumbsIdPrefix } from 'utils/getBreadcrumbsIdPrefix' +import { getTableCustomizationIdPrefix } from 'utils/getTableCustomizationIdPrefix' import { getTablesBackLink } from 'utils/getBacklink' import { BaseTemplate } from 'templates' import { BASE_USE_NAMESPACE_NAV } from 'constants/customizationApiGroupAndVersion' @@ -39,6 +40,12 @@ export const TableBuiltinPage: FC = ({ forcedTheme, insi project: !!namespace, inside, })}builtin-table` + const tableCustomizationIdPrefix = getTableCustomizationIdPrefix({ + instance: !!syntheticProject, + project: BASE_USE_NAMESPACE_NAV !== 'true' && !!namespace, + namespace: !!namespace, + inside, + }) return ( = ({ forcedTheme, insi typeName={typeName} limit={searchParams.get('limit')} inside={inside} + customizationIdPrefix={tableCustomizationIdPrefix} /> )} diff --git a/src/pages/TableCrdPage/TableCrdPage.tsx b/src/pages/TableCrdPage/TableCrdPage.tsx index f07c159..3029efb 100644 --- a/src/pages/TableCrdPage/TableCrdPage.tsx +++ b/src/pages/TableCrdPage/TableCrdPage.tsx @@ -6,6 +6,7 @@ import type { RootState } from 'store/store' import { TableCrdInfo, BackLink, ManageableBreadcrumbs, ManageableSidebar, NavigationContainer } from 'components' import { getSidebarIdPrefix } from 'utils/getSidebarIdPrefix' import { getBreadcrumbsIdPrefix } from 'utils/getBreadcrumbsIdPrefix' +import { getTableCustomizationIdPrefix } from 'utils/getTableCustomizationIdPrefix' import { getTablesBackLink } from 'utils/getBacklink' import { BaseTemplate } from 'templates' import { BASE_USE_NAMESPACE_NAV } from 'constants/customizationApiGroupAndVersion' @@ -38,6 +39,12 @@ export const TableCrdPage: FC = ({ forcedTheme, inside }) => project: !!namespace, inside, })}crd-table` + const tableCustomizationIdPrefix = getTableCustomizationIdPrefix({ + instance: !!syntheticProject, + project: BASE_USE_NAMESPACE_NAV !== 'true' && !!namespace, + namespace: !!namespace, + inside, + }) return ( = ({ forcedTheme, inside }) => crdName={crdName} apiExtensionVersion={apiExtensionVersion} inside={inside} + customizationIdPrefix={tableCustomizationIdPrefix} /> )} diff --git a/src/utils/getTableCustomizationIdPrefix.ts b/src/utils/getTableCustomizationIdPrefix.ts new file mode 100644 index 0000000..ba41cfa --- /dev/null +++ b/src/utils/getTableCustomizationIdPrefix.ts @@ -0,0 +1,25 @@ +export const getTableCustomizationIdPrefix = ({ + project, + instance, + namespace, + inside, +}: { + project?: boolean + instance?: boolean + namespace?: boolean + inside?: boolean +}): string => { + let result = inside ? 'inside-' : 'stock-' + + if (instance) { + result += 'instance-' + } else if (project) { + result += 'project-' + } else if (namespace) { + result += 'namespace-' + } else { + result += 'cluster-' + } + + return result +}