diff --git a/webserver/web-interface/src/components/profile/PhaseEditor.tsx b/webserver/web-interface/src/components/profile/PhaseEditor.tsx index 36eafa80..9f3b78d8 100644 --- a/webserver/web-interface/src/components/profile/PhaseEditor.tsx +++ b/webserver/web-interface/src/components/profile/PhaseEditor.tsx @@ -40,7 +40,7 @@ export function PhaseEditor({ phase, onChange }: PhaseEditorProps) { handleRestrictionChange(constrain(v, 0, 10))} diff --git a/webserver/web-interface/src/components/wifi/NetworkPropTypes.js b/webserver/web-interface/src/components/wifi/NetworkPropTypes.js deleted file mode 100644 index 452ce89c..00000000 --- a/webserver/web-interface/src/components/wifi/NetworkPropTypes.js +++ /dev/null @@ -1,15 +0,0 @@ -import PropTypes from 'prop-types'; - -export const WifiStatusPropType = PropTypes.shape({ - status: PropTypes.oneOf(['connected', 'disconnected']).isRequired, - ssid: PropTypes.string.isRequired, - ip: PropTypes.string.isRequired, -}); - -export const Network = PropTypes.shape({ - ssid: PropTypes.string.isRequired, - rssi: PropTypes.number.isRequired, - secured: PropTypes.bool.isRequired, -}); - -export const NetworksList = PropTypes.arrayOf(Network); diff --git a/webserver/web-interface/src/components/wifi/NetworkTypes.ts b/webserver/web-interface/src/components/wifi/NetworkTypes.ts new file mode 100644 index 00000000..b960cb15 --- /dev/null +++ b/webserver/web-interface/src/components/wifi/NetworkTypes.ts @@ -0,0 +1,11 @@ +export type WifiStatus = { + status: 'connected' | 'disconnected'; + ssid: string, + ip: string, +} + +export type Network = { + ssid: string; + rssi: number; + secured: boolean; +} diff --git a/webserver/web-interface/src/components/wifi/WifiSettingsCard.jsx b/webserver/web-interface/src/components/wifi/WifiSettingsCard.tsx similarity index 87% rename from webserver/web-interface/src/components/wifi/WifiSettingsCard.jsx rename to webserver/web-interface/src/components/wifi/WifiSettingsCard.tsx index adc73efd..efb7238e 100644 --- a/webserver/web-interface/src/components/wifi/WifiSettingsCard.jsx +++ b/webserver/web-interface/src/components/wifi/WifiSettingsCard.tsx @@ -5,11 +5,12 @@ import { import React, { useEffect, useState } from 'react'; import { disconnectFromWifi, getWifiStatus } from '../client/WifiClient'; import Loader from '../loader/Loader'; -import WifiStatus from './WifiStatus'; +import WifiStatusDisplay from './WifiStatus'; import AvailableNetworksDrawer from './available-networks/AvailableNetworksDrawer'; +import { WifiStatus } from './NetworkTypes'; export default function WifiSettingsCard() { - const [wifiStatus, setWifiStatus] = useState({}); + const [wifiStatus, setWifiStatus] = useState(undefined); const [wifiStatusLoading, setWifiStatusLoading] = useState(true); const [wifiDrawerOpen, setWiFiDrawerOpen] = useState(false); const theme = useTheme(); @@ -24,7 +25,7 @@ export default function WifiSettingsCard() { const status = await getWifiStatus(); setWifiStatus(status); } catch (e) { - setWifiStatus(null); + setWifiStatus(undefined); } finally { setWifiStatusLoading(false); } @@ -46,7 +47,7 @@ export default function WifiSettingsCard() { WiFi Status - {wifiStatusLoading ? : } + {wifiStatusLoading ? : } {isConnected() && } diff --git a/webserver/web-interface/src/components/wifi/WifiStatus.jsx b/webserver/web-interface/src/components/wifi/WifiStatus.tsx similarity index 71% rename from webserver/web-interface/src/components/wifi/WifiStatus.jsx rename to webserver/web-interface/src/components/wifi/WifiStatus.tsx index 6d198d29..20e964ac 100644 --- a/webserver/web-interface/src/components/wifi/WifiStatus.jsx +++ b/webserver/web-interface/src/components/wifi/WifiStatus.tsx @@ -2,9 +2,13 @@ import React from 'react'; import SignalWifi3BarIcon from '@mui/icons-material/SignalWifi3Bar'; import SignalWifiOffIcon from '@mui/icons-material/SignalWifiOff'; import { Stack, Typography } from '@mui/material'; -import { WifiStatusPropType } from './NetworkPropTypes'; +import { WifiStatus } from './NetworkTypes'; -export default function WifiStatus({ status = undefined }) { +type WifiStatusProps = { + status?: WifiStatus +} + +export default function WifiStatusDisplay({ status = undefined }: WifiStatusProps) { function isConnected() { return status && status.status === 'connected'; } @@ -13,7 +17,7 @@ export default function WifiStatus({ status = undefined }) { ? ( - {`${status.ssid} (${status.ip})`} + {`${status?.ssid} (${status?.ip})`} ) : ( @@ -23,7 +27,3 @@ export default function WifiStatus({ status = undefined }) { ); } - -WifiStatus.propTypes = { - status: WifiStatusPropType, -}; diff --git a/webserver/web-interface/src/components/wifi/available-networks/AvailableNetwork.jsx b/webserver/web-interface/src/components/wifi/available-networks/AvailableNetwork.tsx similarity index 87% rename from webserver/web-interface/src/components/wifi/available-networks/AvailableNetwork.jsx rename to webserver/web-interface/src/components/wifi/available-networks/AvailableNetwork.tsx index c465151d..78324f15 100644 --- a/webserver/web-interface/src/components/wifi/available-networks/AvailableNetwork.jsx +++ b/webserver/web-interface/src/components/wifi/available-networks/AvailableNetwork.tsx @@ -3,17 +3,23 @@ import SignalWifi3BarIcon from '@mui/icons-material/SignalWifi3Bar'; import { Accordion, AccordionSummary, Alert, Button, TextField, Typography, AccordionDetails, Stack, } from '@mui/material'; -import PropTypes from 'prop-types'; -import { Network } from '../NetworkPropTypes'; +import { Network } from '../NetworkTypes'; import { connectToWifi } from '../../client/WifiClient'; import Loader from '../../loader/Loader'; +type AvailableNetworkProps = { + network: Network; + onClick: () => void; + onConnected: (network: Network) => void; + expanded: boolean; +} + export default function AvailableNetwork({ network, - onClick = () => false, + onClick, expanded = false, - onConnected = () => false, -}) { + onConnected, +}: AvailableNetworkProps) { const [password, setPassword] = useState(''); const [connecting, setConnecting] = useState(false); const [connectionError, setConnectionError] = useState(false); @@ -70,10 +76,3 @@ export default function AvailableNetwork({ ); } - -AvailableNetwork.propTypes = { - network: Network.isRequired, - onClick: PropTypes.func, - onConnected: PropTypes.func, - expanded: PropTypes.bool, -}; diff --git a/webserver/web-interface/src/components/wifi/available-networks/AvailableNetworks.jsx b/webserver/web-interface/src/components/wifi/available-networks/AvailableNetworks.tsx similarity index 76% rename from webserver/web-interface/src/components/wifi/available-networks/AvailableNetworks.jsx rename to webserver/web-interface/src/components/wifi/available-networks/AvailableNetworks.tsx index 016c8fc0..ed980bce 100644 --- a/webserver/web-interface/src/components/wifi/available-networks/AvailableNetworks.jsx +++ b/webserver/web-interface/src/components/wifi/available-networks/AvailableNetworks.tsx @@ -1,15 +1,19 @@ import React, { useEffect, useState } from 'react'; -import PropTypes from 'prop-types'; import { Alert, Box } from '@mui/material'; import { getAvailableNetworks } from '../../client/WifiClient'; import Loader from '../../loader/Loader'; import AvailableNetwork from './AvailableNetwork'; +import { Network } from '../NetworkTypes'; -export default function AvailableNetworks({ onConnected = () => false }) { - const [networks, setNetworks] = useState([]); +type AvailableNetworksProps = { + onConnected: () => void; +} + +export default function AvailableNetworks({ onConnected }: AvailableNetworksProps) { + const [networks, setNetworks] = useState([]); const [loading, setLoading] = useState(false); const [networksError, setNetworksError] = useState(false); - const [expandedNetworkId, setExpandedNetworkId] = useState(null); + const [expandedNetworkId, setExpandedNetworkId] = useState(null); useEffect(() => { const loadNetworks = async () => { @@ -26,7 +30,9 @@ export default function AvailableNetworks({ onConnected = () => false }) { } }; loadNetworks(); - }, [loading]); + // only load networks once per render of this component + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); if (networksError) { return Failed to load available networks; @@ -53,7 +59,3 @@ export default function AvailableNetworks({ onConnected = () => false }) { ); } - -AvailableNetworks.propTypes = { - onConnected: PropTypes.func, -}; diff --git a/webserver/web-interface/src/components/wifi/available-networks/AvailableNetworksDrawer.jsx b/webserver/web-interface/src/components/wifi/available-networks/AvailableNetworksDrawer.tsx similarity index 77% rename from webserver/web-interface/src/components/wifi/available-networks/AvailableNetworksDrawer.jsx rename to webserver/web-interface/src/components/wifi/available-networks/AvailableNetworksDrawer.tsx index 8b794a1b..ab1322dd 100644 --- a/webserver/web-interface/src/components/wifi/available-networks/AvailableNetworksDrawer.jsx +++ b/webserver/web-interface/src/components/wifi/available-networks/AvailableNetworksDrawer.tsx @@ -4,12 +4,17 @@ import { Box, Button, Drawer, Stack, Typography, useTheme, } from '@mui/material'; -import PropTypes from 'prop-types'; import { refrehNetworks } from '../../client/WifiClient'; import Loader from '../../loader/Loader'; import AvailableNetworks from './AvailableNetworks'; -export default function AvailableNetworksDrawer({ open, onOpenChanged, onConnected = () => false }) { +type AvailableNetworksDrawerProps = { + open: boolean; + onOpenChanged: (isOpen: boolean) => void; + onConnected: () => void; +} + +export default function AvailableNetworksDrawer({ open, onOpenChanged, onConnected }: AvailableNetworksDrawerProps) { const theme = useTheme(); const [networksRefreshing, setNetworksRefreshing] = useState(false); const [wifiDrawerRefreshKey, setWifiDrawerRefreshKey] = useState(0); @@ -24,8 +29,8 @@ export default function AvailableNetworksDrawer({ open, onOpenChanged, onConnect } } - const toggleDrawer = (isOpen) => (event) => { - if (event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) { + const toggleDrawer = (isOpen: boolean) => (event: { type?: string; key?: string; }) => { + if (event?.type === 'keydown' && (event?.key === 'Tab' || event.key === 'Shift')) { return; } onOpenChanged(isOpen); @@ -42,7 +47,7 @@ export default function AvailableNetworksDrawer({ open, onOpenChanged, onConnect Available networks - + {networksRefreshing && } @@ -50,9 +55,3 @@ export default function AvailableNetworksDrawer({ open, onOpenChanged, onConnect ) : ; } - -AvailableNetworksDrawer.propTypes = { - open: PropTypes.bool.isRequired, - onOpenChanged: PropTypes.func.isRequired, - onConnected: PropTypes.func, -}; diff --git a/webserver/web-interface/src/pages/home/Home.tsx b/webserver/web-interface/src/pages/home/Home.tsx index 72023144..9f7e99c1 100644 --- a/webserver/web-interface/src/pages/home/Home.tsx +++ b/webserver/web-interface/src/pages/home/Home.tsx @@ -124,7 +124,7 @@ function Home() { {/* Target temp input line */} - TARGET TEMP + TARGET TEMP - SCALE + SCALE