Farmbot-Web-App/frontend/devices/must_be_online.tsx

35 lines
1.0 KiB
TypeScript

import * as React from "react";
import { NetworkState } from "../connectivity/interfaces";
import { SyncStatus } from "farmbot";
import { Content } from "../constants";
import { t } from "../i18next_wrapper";
/** Properties for the <MustBeOnline/> element. */
export interface MBOProps {
networkState: NetworkState;
syncStatus: SyncStatus | undefined;
lockOpen?: boolean;
hideBanner?: boolean;
children?: React.ReactNode;
}
export function isBotUp(status: SyncStatus | undefined) {
return status && !(["maintenance", "unknown"].includes(status));
}
export function MustBeOnline(props: MBOProps) {
const { children, hideBanner, lockOpen, networkState, syncStatus } = props;
const banner = hideBanner ? "" : "banner";
const botUp = isBotUp(syncStatus);
const netUp = networkState === "up";
if ((botUp && netUp) || lockOpen) {
return <div> {children} </div>;
} else {
return <div
className={`unavailable ${banner}`}
title={t(Content.NOT_AVAILABLE_WHEN_OFFLINE)}>
{children}
</div>;
}
}