fix(striker-ui): guard against uninit subnodes in network init form

main
Tsu-ba-me 1 year ago
parent 49bd47322d
commit a91d4f6e5e
  1. 64
      striker-ui/components/NetworkInitForm.tsx
  2. 36
      striker-ui/types/APIHost.d.ts

@ -1317,40 +1317,46 @@ const NetworkInitForm = forwardRef<
networks: pNetworks, networks: pNetworks,
} = hostDetail as APIHostDetail; } = hostDetail as APIHostDetail;
if (
[pDns, pGateway, pGatewayInterface, pNetworks].some(
(condition) => !condition,
)
) {
return;
}
dnsCSVInputRef.current.setValue?.call(null, pDns); dnsCSVInputRef.current.setValue?.call(null, pDns);
gatewayInputRef.current.setValue?.call(null, pGateway); gatewayInputRef.current.setValue?.call(null, pGateway);
const applied: string[] = []; const applied: string[] = [];
const inputs = Object.values(pNetworks).reduce<NetworkInput[]>( const inputs = Object.values(pNetworks as APIHostNetworkList).reduce<
(previous, { ip, link1Uuid, link2Uuid = '', subnetMask, type }) => { NetworkInput[]
const typeCount = >((previous, { ip, link1Uuid, link2Uuid = '', subnetMask, type }) => {
getNetworkTypeCount(type, { inputs: previous }) + 1; const typeCount = getNetworkTypeCount(type, { inputs: previous }) + 1;
const isRequired = requiredNetworks[type] === typeCount; const isRequired = requiredNetworks[type] === typeCount;
const name = `${NETWORK_TYPES[type]} ${typeCount}`;
applied.push(link1Uuid, link2Uuid);
previous.push({
inputUUID: uuidv4(),
interfaces: [
networkInterfaceInputMap[link1Uuid]?.metadata,
networkInterfaceInputMap[link2Uuid]?.metadata,
],
ipAddress: ip,
isRequired,
name,
subnetMask,
type,
typeCount,
});
return previous; const name = `${NETWORK_TYPES[type]} ${typeCount}`;
},
[], applied.push(link1Uuid, link2Uuid);
);
setGatewayInterface(pGatewayInterface); previous.push({
inputUUID: uuidv4(),
interfaces: [
networkInterfaceInputMap[link1Uuid]?.metadata,
networkInterfaceInputMap[link2Uuid]?.metadata,
],
ipAddress: ip,
isRequired,
name,
subnetMask,
type,
typeCount,
});
return previous;
}, []);
setGatewayInterface(pGatewayInterface as string);
setNetworkInterfaceInputMap((previous) => { setNetworkInterfaceInputMap((previous) => {
const result = { ...previous }; const result = { ...previous };
@ -1369,11 +1375,9 @@ const NetworkInitForm = forwardRef<
testInputToToggleSubmitDisabled(); testInputToToggleSubmitDisabled();
} }
}, [ }, [
createNetwork,
expectHostDetail, expectHostDetail,
getNetworkTypeCount, getNetworkTypeCount,
hostDetail, hostDetail,
networkInputs,
networkInterfaceInputMap, networkInterfaceInputMap,
requiredNetworks, requiredNetworks,
testInputToToggleSubmitDisabled, testInputToToggleSubmitDisabled,

@ -39,24 +39,28 @@ type APIHostOverviewList = {
[hostUUID: string]: APIHostOverview; [hostUUID: string]: APIHostOverview;
}; };
type APIHostNetwork = {
createBridge?: NumberBoolean;
ip: string;
link1MacToSet: string;
link1Uuid: string;
link2MacToSet?: string;
link2Uuid?: string;
subnetMask: string;
type: NetworkType;
};
type APIHostNetworkList = {
[networkId: string]: APIHostNetwork;
};
type APIHostDetail = APIHostOverview & { type APIHostDetail = APIHostOverview & {
dns: string; dns?: string;
domain?: string; domain?: string;
gateway: string; gateway?: string;
gatewayInterface: string; gatewayInterface?: string;
installTarget: APIHostInstallTarget; installTarget?: APIHostInstallTarget;
networks: { networks?: APIHostNetworkList;
[networkId: string]: {
createBridge?: NumberBoolean;
ip: string;
link1MacToSet: string;
link1Uuid: string;
link2MacToSet?: string;
link2Uuid?: string;
subnetMask: string;
type: NetworkType;
};
};
organization?: string; organization?: string;
prefix?: string; prefix?: string;
sequence?: string; sequence?: string;

Loading…
Cancel
Save