diff --git a/src/containers/AccessPointDetails/components/General/components/Advanced/index.js b/src/containers/AccessPointDetails/components/General/components/Advanced/index.js
new file mode 100644
index 0000000..d9d30ad
--- /dev/null
+++ b/src/containers/AccessPointDetails/components/General/components/Advanced/index.js
@@ -0,0 +1,507 @@
+import React, { useEffect } from 'react';
+import PropTypes from 'prop-types';
+import { Form, Select as AntdSelect } from 'antd';
+import { Input, Select } from 'components/WithRoles';
+import _ from 'lodash';
+import DisabledText from 'components/DisabledText';
+import Tooltip from 'components/Tooltip';
+
+import { sortRadioTypes } from 'utils/sortRadioTypes';
+import { USER_FRIENDLY_RATES, USER_FRIENDLY_BANDWIDTHS } from '../../constants';
+
+import styles from '../../../../index.module.scss';
+
+const { Option } = AntdSelect;
+
+const Advanced = ({ extraFields, childProfiles, data, radioTypes, form, Item }) => {
+ const { details: { advancedRadioMap = {}, radioMap = {} } = {} } = data;
+
+ const defaultOptions = (
+
+ );
+
+ const defaultOptionsBoolean = (
+
+ );
+
+ useEffect(() => {
+ if (data?.details) {
+ const currentRadios = Object.keys(advancedRadioMap);
+ const formData = {
+ advancedRadioMap: {},
+ radioMap: {},
+ };
+
+ currentRadios.forEach(radio => {
+ formData.advancedRadioMap[radio] = {
+ radioAdminState: advancedRadioMap[radio]?.radioAdminState || 'disabled',
+ deauthAttackDetection: advancedRadioMap[radio]?.deauthAttackDetection ? 'true' : 'false',
+ uapsdState: advancedRadioMap[radio]?.uapsdState || 'disabled',
+ managementRate: {
+ value: advancedRadioMap[radio]?.managementRate?.value || 'rate1mbps',
+ },
+ multicastRate: {
+ value: advancedRadioMap[radio]?.multicastRate?.value || 'rate6mbps',
+ },
+ bestApSettings: {
+ value: {
+ dropInSnrPercentage:
+ advancedRadioMap[radio]?.bestApSettings?.value?.dropInSnrPercentage || 0,
+ minLoadFactor: advancedRadioMap[radio]?.bestApSettings?.value?.minLoadFactor || 0,
+ },
+ },
+ };
+
+ formData.radioMap[radio] = {
+ rxCellSizeDb: {
+ value: radioMap[radio]?.rxCellSizeDb?.value || 0,
+ },
+ probeResponseThresholdDb: {
+ value: radioMap[radio]?.probeResponseThresholdDb?.value || 0,
+ },
+ clientDisconnectThresholdDb: {
+ value: radioMap[radio]?.clientDisconnectThresholdDb?.value || 0,
+ },
+ eirpTxPower: {
+ value: radioMap[radio]?.eirpTxPower?.value || 0,
+ },
+ };
+ });
+
+ form.setFieldsValue({ ...formData });
+ }
+ }, [data]);
+
+ useEffect(() => {
+ if (data?.details) {
+ const currentRadios = Object.keys(advancedRadioMap);
+ const formData = {
+ radioMap: {},
+ };
+ currentRadios.forEach(radio => {
+ const isEnabled =
+ childProfiles.rf?.[0]?.details?.rfConfigMap?.[radio]?.autoChannelSelection;
+ formData.radioMap[radio] = {
+ [isEnabled ? 'channelNumber' : 'manualChannelNumber']: isEnabled
+ ? radioMap[radio]?.channelNumber
+ : radioMap[radio]?.manualChannelNumber,
+ [isEnabled ? 'backupChannelNumber' : 'manualBackupChannelNumber']: isEnabled
+ ? radioMap[radio]?.backupChannelNumber
+ : radioMap[radio]?.manualBackupChannelNumber,
+ };
+ });
+
+ form.setFieldsValue({ ...formData });
+ }
+ }, [data]);
+
+ const renderItem = (label, obj = {}, dataIndex, renderInput, options = {}) => {
+ if (extraFields.some(field => field.label === label)) {
+ return null;
+ }
+ return (
+
Radio Specific Parameters:
+ {renderBandwidthLabels()} + {renderItem('Enable Radio', advancedRadioMap, ['radioAdminState'], renderOptionItem, { + dropdown: defaultOptions, + mapName: 'advancedRadioMap', + })} + {renderItem( + 'Deauth Attack Detection', + advancedRadioMap, + ['deauthAttackDetection'], + renderOptionItem, + { + mapName: 'advancedRadioMap', + dropdown: defaultOptionsBoolean, + } + )} + {renderItem('UAPSD', advancedRadioMap, ['uapsdState'], renderOptionItem, { + mapName: 'advancedRadioMap', + dropdown: defaultOptions, + })} + {renderChannelItem('Active Channel')} + {renderChannelItem('Backup Channel')} + {extraFields.map(field => + renderConditionalItem(field.label, field.obj, field.dataIndex, field.dependencies) + )} + {renderItem( + 'Management Rate (Mbps)', + advancedRadioMap, + ['managementRate', 'value'], + renderOptionItem, + { + mapName: 'advancedRadioMap', + dropdown: key => ( + + ), + } + )} + {renderItem( + 'Multicast Rate (Mbps)', + advancedRadioMap, + ['multicastRate', 'value'], + renderOptionItem, + { + mapName: 'advancedRadioMap', + dropdown: ( + + ), + } + )} + {renderItem( + 'Probe Response Threshold', + radioMap, + ['probeResponseThresholdDb', 'value'], + renderInputItem, + { + min: -100, + max: -40, + error: '-100 - -40 dBm', + addOnText: 'dBm', + mapName: 'radioMap', + } + )} + {renderItem( + 'Client Disconnect Threshold', + radioMap, + ['clientDisconnectThresholdDb', 'value'], + renderInputItem, + { + min: -100, + max: 0, + error: '-100 - 0 dBm', + addOnText: 'dBm', + mapName: 'radioMap', + } + )} + {renderItem('EIRP Tx Power', radioMap, ['eirpTxPower', 'value'], renderInputItem, { + min: 1, + max: 32, + error: '1 - 32 dBm', + addOnText: 'dBm', + mapName: 'radioMap', + })} + + {renderItem( + 'SNR', + advancedRadioMap, + ['bestApSettings', 'value', 'dropInSnrPercentage'], + renderInputItem, + { + min: 0, + max: 100, + error: '0 - 100%', + addOnText: '% Drop', + mapName: 'advancedRadioMap', + hidden: true, + } + )} + {renderItem( + 'Min Load', + advancedRadioMap, + ['bestApSettings', 'value', 'minLoadFactor'], + renderInputItem, + { + min: 0, + max: 100, + error: '0 - 100%', + addOnText: '%', + mapName: 'advancedRadioMap', + hidden: true, + } + )} + > + ); +}; + +Advanced.propTypes = { + extraFields: PropTypes.instanceOf(Array), + data: PropTypes.instanceOf(Object), + childProfiles: PropTypes.instanceOf(Object), + radioTypes: PropTypes.instanceOf(Object), + form: PropTypes.instanceOf(Object), + Item: PropTypes.node, +}; + +Advanced.defaultProps = { + extraFields: [], + data: {}, + childProfiles: {}, + radioTypes: {}, + form: null, + Item: Form.Item, +}; + +export default Advanced; diff --git a/src/containers/AccessPointDetails/components/General/index.js b/src/containers/AccessPointDetails/components/General/index.js index 85df25f..48bbb54 100644 --- a/src/containers/AccessPointDetails/components/General/index.js +++ b/src/containers/AccessPointDetails/components/General/index.js @@ -11,16 +11,14 @@ import { Empty, Typography, } from 'antd'; +import _ from 'lodash'; + import { Card } from 'components/Skeleton'; import { Input, Select, RoleProtectedBtn } from 'components/WithRoles'; -import _ from 'lodash'; import ThemeContext from 'contexts/ThemeContext'; -import DisabledText from 'components/DisabledText'; -import Tooltip from 'components/Tooltip'; - -import { sortRadioTypes } from 'utils/sortRadioTypes'; import { pageLayout } from 'utils/form'; -import { USER_FRIENDLY_RATES, USER_FRIENDLY_BANDWIDTHS } from './constants'; + +import Advanced from './components/Advanced'; import styles from '../../index.module.scss'; @@ -112,80 +110,8 @@ const General = ({ longitude, serial, lastModifiedTimestamp, - details: { advancedRadioMap = {}, radioMap = {} } = {}, } = data; - useEffect(() => { - if (data?.details) { - const currentRadios = Object.keys(advancedRadioMap); - const formData = { - advancedRadioMap: {}, - radioMap: {}, - }; - - currentRadios.forEach(radio => { - formData.advancedRadioMap[radio] = { - radioAdminState: advancedRadioMap[radio]?.radioAdminState || 'disabled', - deauthAttackDetection: advancedRadioMap[radio]?.deauthAttackDetection ? 'true' : 'false', - uapsdState: advancedRadioMap[radio]?.uapsdState || 'disabled', - managementRate: { - value: advancedRadioMap[radio]?.managementRate?.value || 'rate1mbps', - }, - multicastRate: { - value: advancedRadioMap[radio]?.multicastRate?.value || 'rate6mbps', - }, - bestApSettings: { - value: { - dropInSnrPercentage: - advancedRadioMap[radio]?.bestApSettings?.value?.dropInSnrPercentage || 0, - minLoadFactor: advancedRadioMap[radio]?.bestApSettings?.value?.minLoadFactor || 0, - }, - }, - }; - - formData.radioMap[radio] = { - rxCellSizeDb: { - value: radioMap[radio]?.rxCellSizeDb?.value || 0, - }, - probeResponseThresholdDb: { - value: radioMap[radio]?.probeResponseThresholdDb?.value || 0, - }, - clientDisconnectThresholdDb: { - value: radioMap[radio]?.clientDisconnectThresholdDb?.value || 0, - }, - eirpTxPower: { - value: radioMap[radio]?.eirpTxPower?.value || 0, - }, - }; - }); - - form.setFieldsValue({ ...formData }); - } - }, [data]); - - useEffect(() => { - if (data?.details) { - const currentRadios = Object.keys(advancedRadioMap); - const formData = { - radioMap: {}, - }; - currentRadios.forEach(radio => { - const isEnabled = - childProfiles.rf?.[0]?.details?.rfConfigMap?.[radio]?.autoChannelSelection; - formData.radioMap[radio] = { - [isEnabled ? 'channelNumber' : 'manualChannelNumber']: isEnabled - ? radioMap[radio]?.channelNumber - : radioMap[radio]?.manualChannelNumber, - [isEnabled ? 'backupChannelNumber' : 'manualBackupChannelNumber']: isEnabled - ? radioMap[radio]?.backupChannelNumber - : radioMap[radio]?.manualBackupChannelNumber, - }; - }); - - form.setFieldsValue({ ...formData }); - } - }, [selectedProfile]); - const handleOnSave = () => { form .validateFields() @@ -235,264 +161,6 @@ const General = ({ }); }; - const defaultOptions = ( - - ); - - const defaultOptionsBoolean = ( - - ); - - const renderItem = (label, obj = {}, dataIndex, renderInput, options = {}) => { - if (extraFields.some(field => field.label === label)) { - return null; - } - return ( -Radio Specific Parameters:
- {renderBandwidthLabels()} - {renderItem('Enable Radio', advancedRadioMap, ['radioAdminState'], renderOptionItem, { - dropdown: defaultOptions, - mapName: 'advancedRadioMap', - })} - {renderItem( - 'Deauth Attack Detection', - advancedRadioMap, - ['deauthAttackDetection'], - renderOptionItem, - { - mapName: 'advancedRadioMap', - dropdown: defaultOptionsBoolean, - } - )} - {renderItem('UAPSD', advancedRadioMap, ['uapsdState'], renderOptionItem, { - mapName: 'advancedRadioMap', - dropdown: defaultOptions, - })} - {renderChannelItem('Active Channel')} - {renderChannelItem('Backup Channel')} - {extraFields.map(field => - renderConditionalItem(field.label, field.obj, field.dataIndex, field.dependencies) - )} - {renderItem( - 'Management Rate (Mbps)', - advancedRadioMap, - ['managementRate', 'value'], - renderOptionItem, - { - mapName: 'advancedRadioMap', - dropdown: key => ( - - ), - } - )} - {renderItem( - 'Multicast Rate (Mbps)', - advancedRadioMap, - ['multicastRate', 'value'], - renderOptionItem, - { - mapName: 'advancedRadioMap', - dropdown: ( - - ), - } - )} - {renderItem( - 'Probe Response Threshold', - radioMap, - ['probeResponseThresholdDb', 'value'], - renderInputItem, - { - min: -100, - max: -40, - error: '-100 - -40 dBm', - addOnText: 'dBm', - mapName: 'radioMap', - } - )} - {renderItem( - 'Client Disconnect Threshold', - radioMap, - ['clientDisconnectThresholdDb', 'value'], - renderInputItem, - { - min: -100, - max: 0, - error: '-100 - 0 dBm', - addOnText: 'dBm', - mapName: 'radioMap', - } - )} - {renderItem('EIRP Tx Power', radioMap, ['eirpTxPower', 'value'], renderInputItem, { - min: 1, - max: 32, - error: '1 - 32 dBm', - addOnText: 'dBm', - mapName: 'radioMap', - })} - - {renderItem( - 'SNR', - advancedRadioMap, - ['bestApSettings', 'value', 'dropInSnrPercentage'], - renderInputItem, - { - min: 0, - max: 100, - error: '0 - 100%', - addOnText: '% Drop', - mapName: 'advancedRadioMap', - hidden: true, - } - )} - {renderItem( - 'Min Load', - advancedRadioMap, - ['bestApSettings', 'value', 'minLoadFactor'], - renderInputItem, - { - min: 0, - max: 100, - error: '0 - 100%', - addOnText: '%', - mapName: 'advancedRadioMap', - hidden: true, - } - )} +