/* * Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/) * * This is free software, licensed under the GNU General Public License v3. * See /LICENSE for more information. */ import React from "react"; import PropTypes from "prop-types"; import { Switch } from "../../bootstrap/Switch"; import { CheckBox } from "../../bootstrap/CheckBox"; import { PasswordInput } from "../../bootstrap/PasswordInput"; import { RadioSet } from "../../bootstrap/RadioSet"; import { Select } from "../../bootstrap/Select"; import { TextInput } from "../../bootstrap/TextInput"; import WiFiQRCode from "./WiFiQRCode"; import WifiGuestForm from "./WiFiGuestForm"; import { HELP_TEXTS, HTMODES, HWMODES } from "./constants"; WiFiForm.propTypes = { formData: PropTypes.shape({ devices: PropTypes.arrayOf(PropTypes.object) }) .isRequired, formErrors: PropTypes.oneOfType([PropTypes.object, PropTypes.array]), setFormValue: PropTypes.func.isRequired, hasGuestNetwork: PropTypes.bool, }; WiFiForm.defaultProps = { formData: { devices: [] }, setFormValue: () => {}, hasGuestNetwork: true, }; export default function WiFiForm({ formData, formErrors, setFormValue, hasGuestNetwork, disabled, }) { return formData.devices.map((device, index) => ( )); } DeviceForm.propTypes = { formData: PropTypes.shape({ id: PropTypes.number.isRequired, enabled: PropTypes.bool.isRequired, SSID: PropTypes.string.isRequired, password: PropTypes.string.isRequired, hidden: PropTypes.bool.isRequired, hwmode: PropTypes.string.isRequired, htmode: PropTypes.string.isRequired, channel: PropTypes.string.isRequired, guest_wifi: PropTypes.object.isRequired, }), formErrors: PropTypes.object.isRequired, setFormValue: PropTypes.func.isRequired, hasGuestNetwork: PropTypes.bool, deviceIndex: PropTypes.number, divider: PropTypes.bool, }; DeviceForm.defaultProps = { formErrors: {}, hasGuestNetwork: true, }; function DeviceForm({ formData, formErrors, setFormValue, hasGuestNetwork, deviceIndex, divider, ...props }) { const deviceID = formData.id; return ( <> {_(`Wi-Fi ${deviceID + 1}`)}} checked={formData.enabled} onChange={setFormValue((value) => ({ devices: { [deviceIndex]: { enabled: { $set: value } }, }, }))} switchHeading {...props} /> {formData.enabled ? ( <> ({ devices: { [deviceIndex]: { SSID: { $set: value }, }, }, }))} {...props} >
({ devices: { [deviceIndex]: { password: { $set: value } }, }, }))} {...props} /> ({ devices: { [deviceIndex]: { hidden: { $set: value } }, }, }))} {...props} /> ({ devices: { [deviceIndex]: { hwmode: { $set: value }, channel: { $set: "0" }, htmode: { $set: value === "11a" ? "VHT80" : "HT20", }, }, }, }))} {...props} /> ({ devices: { [deviceIndex]: { channel: { $set: value } }, }, }))} {...props} /> {hasGuestNetwork && ( )} ) : null} {divider ?
: null} ); } function getChannelChoices(device) { const channelChoices = { 0: _("auto"), }; device.available_bands.forEach((availableBand) => { if (availableBand.hwmode !== device.hwmode) return; availableBand.available_channels.forEach((availableChannel) => { channelChoices[availableChannel.number.toString()] = ` ${availableChannel.number} (${availableChannel.frequency} MHz ${ availableChannel.radar ? " ,DFS" : "" }) `; }); }); return channelChoices; } function getHtmodeChoices(device) { const htmodeChoices = {}; device.available_bands.forEach((availableBand) => { if (availableBand.hwmode !== device.hwmode) return; availableBand.available_htmodes.forEach((availableHtmod) => { htmodeChoices[availableHtmod] = HTMODES[availableHtmod]; }); }); return htmodeChoices; } function getHwmodeChoices(device) { return device.available_bands.map((availableBand) => ({ label: HWMODES[availableBand.hwmode], value: availableBand.hwmode, })); }