fix(namespace): wait for system ns setting to load before selecting existing ns [EE-6917] (#11484)

Co-authored-by: testa113 <testa113>
pull/11507/head
Ali 8 months ago committed by GitHub
parent e5f6363244
commit 5f89255d9c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -77,14 +77,12 @@ export function ApplicationsStacksDatatable({
namespaces={namespaces} namespaces={namespaces}
value={namespace} value={namespace}
onChange={onNamespaceChange} onChange={onNamespaceChange}
showSystem={tableState.showSystemResources} showSystem={showSystem}
/> />
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<SystemResourceDescription <SystemResourceDescription showSystemResources={showSystem} />
showSystemResources={tableState.showSystemResources}
/>
</div> </div>
</div> </div>
} }

@ -7,13 +7,17 @@ import { InputGroup } from '@@/form-components/InputGroup';
import { Namespace } from './types'; import { Namespace } from './types';
function transformNamespaces(namespaces: Namespace[], showSystem: boolean) { function transformNamespaces(namespaces: Namespace[], showSystem?: boolean) {
return namespaces const transformedNamespaces = namespaces.map(({ Name, IsSystem }) => ({
.filter((ns) => showSystem || !ns.IsSystem) label: IsSystem ? `${Name} - system` : Name,
.map(({ Name, IsSystem }) => ({ value: Name,
label: IsSystem ? `${Name} - system` : Name, isSystem: IsSystem,
value: Name, }));
})); if (showSystem === undefined) {
return transformedNamespaces;
}
// only filter when showSystem is set
return transformedNamespaces.filter((ns) => showSystem || !ns.isSystem);
} }
export function NamespaceFilter({ export function NamespaceFilter({
@ -25,19 +29,22 @@ export function NamespaceFilter({
namespaces: Namespace[]; namespaces: Namespace[];
value: string; value: string;
onChange: (value: string) => void; onChange: (value: string) => void;
showSystem: boolean; showSystem?: boolean;
}) { }) {
const transformedNamespaces = transformNamespaces(namespaces, showSystem); const transformedNamespaces = transformNamespaces(namespaces, showSystem);
// sync value with displayed namespaces // sync value with displayed namespaces
useEffect(() => { useEffect(() => {
const names = transformedNamespaces.map((ns) => ns.value); const names = transformedNamespaces.map((ns) => ns.value);
if (value && !names.find((ns) => ns === value)) { const isSelectedNamespaceFound = names.some((ns) => ns === value);
onChange( if (value && !isSelectedNamespaceFound) {
names.length > 0 ? names.find((ns) => ns === 'default') || names[0] : '' const newNamespaceValue =
); names.length > 0
? names.find((ns) => ns === 'default') || names[0]
: '';
onChange(newNamespaceValue);
} }
}, [value, onChange, transformedNamespaces]); }, [value, onChange, transformedNamespaces, showSystem]);
return ( return (
<InputGroup> <InputGroup>

@ -3,11 +3,11 @@ import { Authorized } from '@/react/hooks/useUser';
import { TextTip } from '@@/Tip/TextTip'; import { TextTip } from '@@/Tip/TextTip';
interface Props { interface Props {
showSystemResources: boolean; showSystemResources?: boolean;
} }
export function SystemResourceDescription({ showSystemResources }: Props) { export function SystemResourceDescription({ showSystemResources }: Props) {
return !showSystemResources ? ( return showSystemResources === false ? (
<Authorized authorizations="K8sAccessSystemNamespaces" adminOnlyCE> <Authorized authorizations="K8sAccessSystemNamespaces" adminOnlyCE>
<TextTip color="blue" className="!mb-0"> <TextTip color="blue" className="!mb-0">
System resources are hidden, this can be changed in the table settings System resources are hidden, this can be changed in the table settings

Loading…
Cancel
Save