Farmbot-Web-App/frontend/logs/components/filter_menu.tsx

73 lines
2.3 KiB
TypeScript
Raw Normal View History

2017-12-01 22:02:18 -07:00
import * as React from "react";
2019-08-26 17:19:16 -06:00
import { LogsFilterMenuProps, LogsState } from "../interfaces";
2017-12-11 04:50:41 -07:00
import { Slider } from "@blueprintjs/core";
import { Filters } from "../interfaces";
2019-02-04 07:32:26 -07:00
import { startCase } from "lodash";
2019-08-23 15:19:22 -06:00
import { MESSAGE_TYPES, MessageType } from "../../sequences/interfaces";
2019-04-02 13:59:37 -06:00
import { t } from "../../i18next_wrapper";
2019-08-23 15:19:22 -06:00
const MENU_ORDER: string[] = [
MessageType.success,
MessageType.busy,
MessageType.warn,
MessageType.error,
MessageType.info,
MessageType.fun,
MessageType.debug,
MessageType.assertion,
];
const REVERSE_MENU_ORDER = MENU_ORDER.slice().reverse();
/** Order the log filter sort menu, adding unknown types last. */
const menuSort = (a: string, b: string) =>
REVERSE_MENU_ORDER.indexOf(b) - REVERSE_MENU_ORDER.indexOf(a);
2017-12-01 22:02:18 -07:00
2019-08-26 17:19:16 -06:00
/** Get log filter keys from LogsState. */
export const filterStateKeys =
2020-04-23 13:11:25 -06:00
(state: LogsState) =>
2019-08-26 17:19:16 -06:00
Object.keys(state)
2020-04-23 13:11:25 -06:00
.filter(key => !["autoscroll", "markdown", "searchTerm"].includes(key));
2019-08-26 17:19:16 -06:00
2017-12-01 22:02:18 -07:00
export const LogsFilterMenu = (props: LogsFilterMenuProps) => {
2018-05-17 14:12:33 -06:00
/** Filter level 0: logs hidden. */
const btnColor = (x: keyof Filters) => props.state[x] != 0
2017-12-11 04:50:41 -07:00
? "green" : "red";
2018-05-17 14:12:33 -06:00
/** Set the filter level to the same value for all log message types. */
const setAll = (level: number) => () => {
2019-02-26 20:12:02 -07:00
MESSAGE_TYPES.map((x: keyof Filters) => props.setFilterLevel(x)(level));
};
2017-12-01 22:02:18 -07:00
return <div className={"logs-settings-menu"}>
<fieldset>
<label>
{t("Presets:")}
</label>
2020-02-28 09:34:28 -07:00
<button className={`fb-button gray`}
title={t("show all")}
onClick={setAll(3)}>
{t("max")}
</button>
2020-02-28 09:34:28 -07:00
<button className={`fb-button gray`}
title={t("default")}
onClick={setAll(1)}>
{t("normal")}
</button>
</fieldset>
2020-04-23 13:11:25 -06:00
{filterStateKeys(props.state).sort(menuSort)
2019-08-26 17:19:16 -06:00
.map((logType: keyof Filters) =>
<fieldset key={logType}>
2017-12-01 22:02:18 -07:00
<label>
<div className={`saucer ${logType}`} />
2019-02-04 07:32:26 -07:00
{t(startCase(logType))}
2017-12-01 22:02:18 -07:00
</label>
<button
className={"fb-button fb-toggle-button " + btnColor(logType)}
2020-02-28 09:34:28 -07:00
title={t("toggle logs")}
2017-12-01 22:02:18 -07:00
onClick={props.toggle(logType)} />
2017-12-11 04:50:41 -07:00
<Slider min={0} max={3} stepSize={1}
onChange={props.setFilterLevel(logType)}
value={props.state[logType] as number} />
2019-08-26 17:19:16 -06:00
</fieldset>)}
2017-12-01 22:02:18 -07:00
</div>;
};