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 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' import SoftwareUpdateIcon from '../../Icons/SoftwareUpdateIcon' import ExternalLink from '../common/ExternalLink' import { useNavigationTabPage } from '../context/NavigationTabsContext' const { Title, Text } = Typography const About = () => { useNavigationTabPage({ title: 'About' }) const [collapseState, updateCollapseState] = useCollapseState('About', { updater: true }) const { token } = useContext(AuthContext) const { fetchApiServerVersion, fetchWsServerVersion, connected } = useContext(ApiServerContext) const { isElectron, getAppEngine } = 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 && connected) { fetchApiServerVersion().then((version) => { setApiServerVersion(version) }) fetchWsServerVersion().then((version) => { setWsServerVersion(version) }) } }, [fetchApiServerVersion, fetchWsServerVersion, token, connected]) useEffect(() => { if (!isElectron) return getAppEngine() .then((engine) => { setAppEngine(engine === 'chromium' ? 'Chromium' : 'Native') }) .catch(() => { setAppEngine('Unknown') }) }, [getAppEngine, isElectron]) const [apiServerVersion, setApiServerVersion] = useState(null) const [wsServerVersion, setWsServerVersion] = useState(null) const [appEngine, setAppEngine] = 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 appEngineText = appEngine ? ( {appEngine} ) : ( ) 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 && ( Engine: {appEngineText} )} REST API: {apiServerVersionText} Web Socket: {wsServerVersionText} {developmentMode && isMobile && ( } > Development )} Jenkins Git
) } export default About