2017-06-29 12:54:02 -06:00
|
|
|
import * as React from "react";
|
2018-01-15 00:01:48 -07:00
|
|
|
import { NetworkState } from "../connectivity/interfaces";
|
2018-01-19 10:49:07 -07:00
|
|
|
import { SyncStatus } from "farmbot";
|
2019-02-10 22:10:58 -07:00
|
|
|
import { Content } from "../constants";
|
2019-04-02 13:59:37 -06:00
|
|
|
import { t } from "../i18next_wrapper";
|
2017-06-29 12:54:02 -06:00
|
|
|
|
|
|
|
/** Properties for the <MustBeOnline/> element. */
|
|
|
|
export interface MBOProps {
|
2018-01-19 10:49:07 -07:00
|
|
|
networkState: NetworkState;
|
|
|
|
syncStatus: SyncStatus | undefined;
|
2017-06-29 12:54:02 -06:00
|
|
|
lockOpen?: boolean;
|
2017-10-03 23:56:10 -06:00
|
|
|
hideBanner?: boolean;
|
2018-03-19 06:57:49 -06:00
|
|
|
children?: React.ReactNode;
|
2017-06-29 12:54:02 -06:00
|
|
|
}
|
2018-01-15 09:40:34 -07:00
|
|
|
|
2018-01-20 07:46:44 -07:00
|
|
|
export function isBotUp(status: SyncStatus | undefined) {
|
|
|
|
return status && !(["maintenance", "unknown"].includes(status));
|
|
|
|
}
|
|
|
|
|
2019-04-09 19:15:50 -06:00
|
|
|
export function isBotOnline(
|
|
|
|
syncStatus: SyncStatus | undefined,
|
|
|
|
botToMqttStatus: NetworkState): boolean {
|
|
|
|
return !!(isBotUp(syncStatus) && botToMqttStatus === "up");
|
|
|
|
}
|
|
|
|
|
2018-01-19 10:49:07 -07:00
|
|
|
export function MustBeOnline(props: MBOProps) {
|
|
|
|
const { children, hideBanner, lockOpen, networkState, syncStatus } = props;
|
2017-12-12 17:38:12 -07:00
|
|
|
const banner = hideBanner ? "" : "banner";
|
2019-04-09 19:15:50 -06:00
|
|
|
if (isBotOnline(syncStatus, networkState) || lockOpen) {
|
2020-02-28 09:34:28 -07:00
|
|
|
return <div className={"bot-is-online-wrapper"}>{children}</div>;
|
2017-06-29 12:54:02 -06:00
|
|
|
} else {
|
2019-02-10 22:10:58 -07:00
|
|
|
return <div
|
|
|
|
className={`unavailable ${banner}`}
|
|
|
|
title={t(Content.NOT_AVAILABLE_WHEN_OFFLINE)}>
|
|
|
|
{children}
|
|
|
|
</div>;
|
2017-06-29 12:54:02 -06:00
|
|
|
}
|
|
|
|
}
|