import type React from 'react'; import { useState } from 'react'; import { FiBluetooth, FiCpu, FiGitBranch, FiMenu, FiMoon, FiSun, FiWifi, FiX, } from 'react-icons/fi'; import { MdUpgrade } from 'react-icons/md'; import { RiArrowDownLine, RiArrowUpDownLine, RiArrowUpLine, } from 'react-icons/ri'; import { connType, openConnectionModal, setDarkModeEnabled, toggleMobileNav, } from '@core/slices/appSlice'; import { useAppDispatch } from '@hooks/useAppDispatch'; import { useAppSelector } from '@hooks/useAppSelector'; import { Protobuf, Types } from '@meshtastic/meshtasticjs'; import { VersionInfo } from '../modals/VersionInfo'; import { BottomNavItem } from './BottomNavItem'; export const BottomNav = (): JSX.Element => { const [showVersionInfo, setShowVersionInfo] = useState(false); const dispatch = useAppDispatch(); const meshtasticState = useAppSelector((state) => state.meshtastic); const appState = useAppSelector((state) => state.app); const primaryChannelSettings = useAppSelector( (state) => state.meshtastic.radio.channels, ).find((channel) => channel.role === Protobuf.Channel_Role.PRIMARY)?.settings; return (
{ dispatch(openConnectionModal()); }} className={ [ Types.DeviceStatusEnum.DEVICE_CONNECTED, Types.DeviceStatusEnum.DEVICE_CONFIGURED, ].includes(meshtasticState.deviceStatus) ? 'bg-primary dark:bg-primary' : [ Types.DeviceStatusEnum.DEVICE_CONNECTING, Types.DeviceStatusEnum.DEVICE_RECONNECTING, Types.DeviceStatusEnum.DEVICE_CONFIGURING, ].includes(meshtasticState.deviceStatus) ? 'bg-yellow-400 dark:bg-yellow-400' : '' } > {appState.connType === connType.BLE ? ( ) : appState.connType === connType.SERIAL ? ( ) : ( )}
{meshtasticState.nodes.find( (node) => node.number === meshtasticState.radio.hardware.myNodeNum, )?.user?.longName ?? 'Disconnected'}
{primaryChannelSettings?.uplinkEnabled && primaryChannelSettings?.downlinkEnabled && !meshtasticState.radio.preferences.mqttDisabled ? ( ) : primaryChannelSettings?.uplinkEnabled && !meshtasticState.radio.preferences.mqttDisabled ? ( ) : primaryChannelSettings?.downlinkEnabled && !meshtasticState.radio.preferences.mqttDisabled ? ( ) : ( )}
{ dispatch(toggleMobileNav()); }} className="md:hidden" > {appState.mobileNavOpen ? ( ) : ( )}
{ setShowVersionInfo(true); }} className={appState.updateAvaliable ? 'animate-pulse' : ''} > {appState.updateAvaliable ? ( ) : ( )}

{process.env.COMMIT_HASH}

{ dispatch(setDarkModeEnabled(!appState.darkMode)); }} > {appState.darkMode ? ( ) : ( )} { setShowVersionInfo(false); }} />
); };