112 lines
3.2 KiB
TypeScript
112 lines
3.2 KiB
TypeScript
import {
|
|
CheckCircle as OKIcon,
|
|
Error as AlarmingIcon,
|
|
Help as UnknownIcon,
|
|
Warning as WarningIcon
|
|
} from "@mui/icons-material";
|
|
import { pond } from "protobuf-ts/pond";
|
|
import { getTextSecondary } from "theme/text";
|
|
|
|
export interface DeviceStateHelper {
|
|
description: string;
|
|
icon: any;
|
|
colour: string;
|
|
}
|
|
|
|
const Unknown: DeviceStateHelper = {
|
|
description: "Unknown",
|
|
icon: <UnknownIcon style={{ color: "var(--status-unknown)" }} />,
|
|
colour: "var(--status-unknown)"
|
|
};
|
|
|
|
const OK: DeviceStateHelper = {
|
|
description: "OK",
|
|
icon: <OKIcon style={{ color: "var(--status-ok)" }} />,
|
|
colour: "var(--status-ok)"
|
|
};
|
|
|
|
const LowPower: DeviceStateHelper = {
|
|
description: "Low Power",
|
|
icon: <WarningIcon style={{ color: "var(--status-warning)" }} />,
|
|
colour: "var(--status-warning)"
|
|
};
|
|
|
|
const Missing: DeviceStateHelper = {
|
|
description: "Missing",
|
|
icon: <AlarmingIcon style={{ color: getTextSecondary() }} />,
|
|
colour: getTextSecondary()
|
|
};
|
|
|
|
const DEVICE_STATE_MAP = new Map<pond.DeviceState, DeviceStateHelper>([
|
|
[pond.DeviceState.DEVICE_STATE_UNKNOWN, Unknown],
|
|
[pond.DeviceState.DEVICE_STATE_OK, OK],
|
|
[pond.DeviceState.DEVICE_STATE_LOW_POWER, LowPower],
|
|
[pond.DeviceState.DEVICE_STATE_MISSING, Missing]
|
|
]);
|
|
|
|
export function compareEnum<T extends object>(value: T[keyof T], e: T, enumMember: T[keyof T]): boolean {
|
|
// let has = false
|
|
// if (typeof value === 'string') {
|
|
// Object.values(e).forEach((val: keyof T) => {
|
|
if (e[value as keyof T] === enumMember) {
|
|
// has = true
|
|
return true
|
|
}
|
|
return false
|
|
// })
|
|
// } else if (typeof value === 'number') {
|
|
// Object.keys(e as any).forEach(val => {
|
|
// if (val === enumMember) {
|
|
// has = true
|
|
// return
|
|
// }
|
|
// })
|
|
// }
|
|
// return has
|
|
}
|
|
|
|
export function getDeviceStateHelper(state: pond.DeviceState): DeviceStateHelper {
|
|
if (compareEnum(state, pond.DeviceState, pond.DeviceState.DEVICE_STATE_OK)) {
|
|
return OK;
|
|
}
|
|
const deviceStates = Array.from(DEVICE_STATE_MAP.keys());
|
|
for (var i = 0; i < deviceStates.length; i++) {
|
|
let key = deviceStates[i];
|
|
if (state === key) {
|
|
return DEVICE_STATE_MAP.get(key) as DeviceStateHelper;
|
|
}
|
|
}
|
|
return Unknown;
|
|
}
|
|
|
|
export function getDeviceStateDescription(state: pond.DeviceState): string {
|
|
return getDeviceStateHelper(state).description;
|
|
}
|
|
|
|
export function getDeviceStateIcon(state: pond.DeviceState): any {
|
|
return getDeviceStateHelper(state).icon;
|
|
}
|
|
|
|
export function getDeviceStateColour(state: pond.DeviceState): any {
|
|
return getDeviceStateHelper(state).colour;
|
|
}
|
|
|
|
export function filterByDeviceState(searchValue: string, state: pond.DeviceState) {
|
|
let matches: string[] = [];
|
|
switch (state) {
|
|
case pond.DeviceState.DEVICE_STATE_OK:
|
|
matches = ["okay", "good", "safe", "stable"];
|
|
break;
|
|
case pond.DeviceState.DEVICE_STATE_MISSING:
|
|
matches = ["alarming", "alarmed", "bad", "error", "alert"];
|
|
break;
|
|
case pond.DeviceState.DEVICE_STATE_LOW_POWER:
|
|
matches = ["warning", "caution", "low power"];
|
|
break;
|
|
default:
|
|
matches = ["unknown", "?"];
|
|
break;
|
|
}
|
|
|
|
return matches.some(match => match.indexOf(searchValue.replace("state:", "").trim()) > -1);
|
|
}
|