diff --git a/frontend/public/components/resource-list.tsx b/frontend/public/components/resource-list.tsx index 4b3774dc4ed..2fa336039bd 100644 --- a/frontend/public/components/resource-list.tsx +++ b/frontend/public/components/resource-list.tsx @@ -27,6 +27,7 @@ import { ResourceListPage as ResourceListPageExt, isResourceListPage, } from '@console/dynamic-plugin-sdk/src/extensions/pages'; +import { useNamespaceFromURL } from './useNamespaceFromURL'; // Parameters can be in pros.params (in URL) or in props.route (attribute of Route tag) const allParams = (props) => Object.assign({}, _.get(props, 'params'), props); @@ -72,7 +73,8 @@ const ResourceListPage_ = connectToPlural( export const ResourceListPage = (props) => { const params = useParams(); - return ; + const ns = useNamespaceFromURL(); + return ; }; const ResourceDetailsPage_ = connectToPlural((props: ResourceDetailsPageProps) => { @@ -125,7 +127,8 @@ const ResourceDetailsPage_ = connectToPlural((props: ResourceDetailsPageProps) = export const ResourceDetailsPage = (props) => { const params = useParams(); - return ; + const ns = useNamespaceFromURL(); + return ; }; export type ResourceListPageProps = { diff --git a/frontend/public/components/useNamespaceFromURL.ts b/frontend/public/components/useNamespaceFromURL.ts new file mode 100644 index 00000000000..4dd3ab7dbb1 --- /dev/null +++ b/frontend/public/components/useNamespaceFromURL.ts @@ -0,0 +1,21 @@ +import { useParams } from 'react-router'; +import { useActiveNamespace } from '@console/dynamic-plugin-sdk/src/lib-core'; +import { ALL_NAMESPACES_KEY } from '@console/shared/src/constants'; + +/** + * Hook to get the namespace from URL params or active namespace selector. + * + * For routes with explicit namespace (/k8s/ns/:ns/:plural), returns the URL param. + * For routes without namespace (/k8s/all-namespaces/:plural), returns the active + * namespace from the selector, converting ALL_NAMESPACES_KEY to undefined. + * + * @returns The namespace string or undefined for all-namespaces view + */ +export const useNamespaceFromURL = (): string | undefined => { + const params = useParams<{ ns?: string }>(); + const [activeNamespace] = useActiveNamespace(); + + // Use namespace from URL params if available, otherwise use active namespace + // Convert ALL_NAMESPACES_KEY to undefined for the all-namespaces routes + return params.ns || (activeNamespace === ALL_NAMESPACES_KEY ? undefined : activeNamespace); +};