From c6f76fa7f33317ffe6918e3799d60636367f64d3 Mon Sep 17 00:00:00 2001 From: Samuel Rowe Date: Fri, 29 Jul 2022 21:13:35 +0530 Subject: [PATCH] fix(frontend): updated to prune empty values from final result in network forms --- .../components/Modal/network/form-utils.ts | 68 ++++++++++++------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/services/frontend/src/components/Modal/network/form-utils.ts b/services/frontend/src/components/Modal/network/form-utils.ts index fdaa24f..b5c8843 100644 --- a/services/frontend/src/components/Modal/network/form-utils.ts +++ b/services/frontend/src/components/Modal/network/form-utils.ts @@ -93,24 +93,21 @@ export const getInitialValues = (node?: INetworkNodeItem): IEditNetworkForm => { networkName: name, driver: ipam?.driver ?? "", configurations: - ipam?.config.map((item) => ({ - subnet: item.subnet, - ipRange: item.ip_range, - gateway: item.gateway, - auxAddresses: Object.entries(item.aux_addresses).map( + ipam?.config?.map((item) => ({ + subnet: item.subnet ?? "", + ipRange: item.ip_range ?? "", + gateway: item.gateway ?? "", + auxAddresses: Object.entries(item.aux_addresses ?? []).map( ([hostName, ipAddress]) => ({ hostName, ipAddress }) ) })) ?? [], - options: Object.keys(ipam?.options || {}).map((key) => { - if (!ipam) { - throw new Error("Control should not reach here."); - } + options: Object.keys(ipam?.options ?? {}).map((key) => { return { key, - value: ipam.options[key].toString() + value: ipam?.options?.[key].toString() ?? "" }; }), labels: Object.entries(labels as any).map(([key, value]: any) => ({ @@ -129,34 +126,55 @@ export const getFinalValues = ( return { key: previous?.key ?? "network", type: "NETWORK", + position: { + left: 0, + top: 0 + }, inputs: previous?.inputs ?? [], outputs: previous?.outputs ?? [], - config: (previous as any)?.config ?? {}, canvasConfig: { node_name: values.entryName }, networkConfig: { name: values.networkName, ipam: { - driver, + driver: driver ? driver : undefined, config: configurations.map((configuration) => ({ - subnet: configuration.subnet, - ip_range: configuration.ipRange, - gateway: configuration.gateway, - aux_addresses: Object.fromEntries( - configuration.auxAddresses.map((auxAddress) => [ - auxAddress.hostName, - auxAddress.ipAddress - ]) - ) + subnet: configuration.subnet ? configuration.subnet : undefined, + ip_range: configuration.ipRange ? configuration.ipRange : undefined, + gateway: configuration.gateway ? configuration.gateway : undefined, + aux_addresses: (() => { + if (configuration.auxAddresses.length === 0) { + return undefined; + } + + /* We do not have to worry about empty `hostName` and `ipAddress` + * values because Yup would report such values as error. + */ + return Object.fromEntries( + configuration.auxAddresses.map((auxAddress) => [ + auxAddress.hostName, + auxAddress.ipAddress + ]) + ); + })() })), - options: Object.fromEntries( - options.map((option) => [option.key, option.value]) - ) + options: (() => { + if (options.length === 0) { + return undefined; + } + + /* We do not have to worry about empty `key` and `value` + * values because Yup would report such values as error. + */ + return Object.fromEntries( + options.map((option) => [option.key, option.value]) + ); + })() }, labels: Object.fromEntries( labels.map((label) => [label.key, label.value]) ) } - } as any; + }; };