import { FC, useContext, useEffect, useState } from 'react'; import { Avatar, Button, Checkbox, IconButton, List, ListItem, ListItemAvatar, ListItemSecondaryAction, ListItemText, Typography } from '@mui/material'; import LockOpenIcon from '@mui/icons-material/LockOpen'; import DeleteIcon from '@mui/icons-material/Delete'; import SaveIcon from '@mui/icons-material/Save'; import LockIcon from '@mui/icons-material/Lock'; import { BlockFormControlLabel, ButtonRow, FormLoader, SectionContent, ValidatedPasswordField, ValidatedTextField } from '../../components'; import { NetworkSettings } from '../../types'; import * as NetworkApi from '../../api/network'; import { numberValue, updateValue, useRest } from '../../utils'; import { WiFiConnectionContext } from './WiFiConnectionContext'; import { isNetworkOpen, networkSecurityMode } from './WiFiNetworkSelector'; import { ValidateFieldsError } from 'async-validator'; import { validate } from '../../validators'; import { createNetworkSettingsValidator } from '../../validators/network'; const WiFiSettingsForm: FC = () => { const { selectedNetwork, deselectNetwork } = useContext(WiFiConnectionContext); const [initialized, setInitialized] = useState(false); const { loadData, saving, data, setData, saveData, errorMessage } = useRest({ read: NetworkApi.readNetworkSettings, update: NetworkApi.updateNetworkSettings }); useEffect(() => { if (!initialized && data) { if (selectedNetwork) { setData({ ssid: selectedNetwork.ssid, password: '', hostname: data?.hostname, static_ip_config: false, enableIPv6: false, bandwidth20: false, tx_power: 20, nosleep: false, enableMDNS: true }); } setInitialized(true); } }, [initialized, setInitialized, data, setData, selectedNetwork]); const updateFormValue = updateValue(setData); const [fieldErrors, setFieldErrors] = useState(); useEffect(() => deselectNetwork, [deselectNetwork]); const content = () => { if (!data) { return ; } const validateAndSubmit = async () => { try { setFieldErrors(undefined); await validate(createNetworkSettingsValidator(data), data); saveData(); } catch (errors: any) { setFieldErrors(errors); } }; return ( <> WiFi {selectedNetwork ? ( {isNetworkOpen(selectedNetwork) ? : } ) : ( )} {(!selectedNetwork || !isNetworkOpen(selectedNetwork)) && ( )} } label="Disable WiFi Sleep Mode" /> } label="Use Lower WiFi Bandwidth" /> } label="Enable mDNS Service" /> General } label="Enable IPv6 support" /> } label="Use Fixed IP address" /> {data.static_ip_config && ( <> )} ); }; return ( {content()} ); }; export default WiFiSettingsForm;