import { useContext, useEffect, useState } from 'react' import { Flex, Typography, Button, Dropdown, Skeleton, Tag, Divider } from 'antd' import useCollapseState from '../hooks/useCollapseState' import InfoCollapse from '../common/InfoCollapse' import InfoCircleIcon from '../../Icons/InfoCircleIcon' import ReloadIcon from '../../Icons/ReloadIcon' import DownloadIcon from '../../Icons/DownloadIcon' import DeveloperIcon from '../../Icons/DeveloperIcon' import { version as appVersion } from '../../../../package.json' import { ApiServerContext } from '../context/ApiServerContext' import { AuthContext } from '../context/AuthContext' import { ElectronContext } from '../context/ElectronContext' import { AppUpdateContext } from '../context/AppUpdateContext' import { useMediaQuery } from 'react-responsive' import FarmControlAppIcon from '../../Logos/FarmControlAppIcon' const { Title, Text, Link } = Typography const About = () => { const [collapseState, updateCollapseState] = useCollapseState('About', { updater: true }) const { token } = useContext(AuthContext) const { fetchApiServerVersion, fetchWsServerVersion } = useContext(ApiServerContext) const { isElectron, getElectronVersion } = useContext(ElectronContext) const { checkForUpdates } = useContext(AppUpdateContext) const isMobile = useMediaQuery({ maxWidth: 768 }) const buildNumber = import.meta.env.VITE_BUILD_NUMBER ? 'b' + import.meta.env.VITE_BUILD_NUMBER : 'dev' const developmentMode = import.meta.env.MODE === 'development' const actions = [ { label: 'Reload Window', icon: , onClick: () => { window.location.reload() } } ] if (isElectron) { actions.unshift( { label: 'Check for Updates', icon: , onClick: checkForUpdates }, { type: 'divider' } ) } useEffect(() => { if (token) { fetchApiServerVersion().then((version) => { setApiServerVersion(version) }) fetchWsServerVersion().then((version) => { setWsServerVersion(version) }) } }, [fetchApiServerVersion, fetchWsServerVersion, token]) useEffect(() => { if (!isElectron) return getElectronVersion() .then((version) => { setElectronVersion(version || 'unknown') }) .catch(() => { setElectronVersion('unknown') }) }, [getElectronVersion, isElectron]) const [apiServerVersion, setApiServerVersion] = useState(null) const [wsServerVersion, setWsServerVersion] = useState(null) const [electronVersion, setElectronVersion] = useState(null) const apiServerVersionText = apiServerVersion ? ( {`v${apiServerVersion.version}-${apiServerVersion.buildNumber == 'dev' ? 'dev' : 'b' + apiServerVersion.buildNumber}`} ) : ( ) const wsServerVersionText = wsServerVersion ? ( {`v${wsServerVersion.version}-${wsServerVersion.buildNumber == 'dev' ? 'dev' : 'b' + wsServerVersion.buildNumber}`} ) : ( ) const electronVersionText = electronVersion ? ( {`v${electronVersion}`} ) : ( ) return (
} canCollapse={false} active={collapseState.purchaseOrderStats} onToggle={(isActive) => updateCollapseState('purchaseOrderStats', isActive) } className='no-t-padding-collapse' collapseKey='purchaseOrderStats' > Farm Control {developmentMode && !isMobile && ( } > Development )} 3D Printer ERP and Control Software. User Interface:{' '} v{appVersion}-{buildNumber} {isElectron && ( Electron: {electronVersionText} )} REST API: {apiServerVersionText} Web Socket: {wsServerVersionText} {developmentMode && isMobile && ( } > Development )} Jenkins GitHub
) } export default About