mapcomplete/UI/BigComponents/FilterView.ts

90 lines
2.8 KiB
TypeScript
Raw Normal View History

2021-07-20 15:14:51 +02:00
import { FixedUiElement } from "./../Base/FixedUiElement";
import { LayerConfigJson } from "./../../Customizations/JSON/LayerConfigJson";
import { UIEventSource } from "../../Logic/UIEventSource";
import { VariableUiElement } from "../Base/VariableUIElement";
import State from "../../State";
import Toggle from "../Input/Toggle";
import Combine from "../Base/Combine";
import Translations from "../i18n/Translations";
import LayerConfig from "../../Customizations/JSON/LayerConfig";
import BaseUIElement from "../BaseUIElement";
import { Translation } from "../i18n/Translation";
import ScrollableFullScreen from "../Base/ScrollableFullScreen";
2021-07-20 16:29:48 +02:00
import Svg from "../../Svg";
2021-07-20 15:14:51 +02:00
/**
* Shows the filter
*/
export default class FilterView extends ScrollableFullScreen {
constructor(isShown: UIEventSource<boolean>) {
super(FilterView.GenTitle, FilterView.Generatecontent, "filter", isShown);
}
private static GenTitle(): BaseUIElement {
return new FixedUiElement(`Filter`).SetClass(
"text-2xl break-words font-bold p-2"
);
}
private static Generatecontent(): BaseUIElement {
2021-07-20 16:29:48 +02:00
let filterPanel: BaseUIElement = new FixedUiElement("");
2021-07-20 15:14:51 +02:00
if (State.state.filteredLayers.data.length > 1) {
2021-07-20 16:29:48 +02:00
let activeLayers = State.state.filteredLayers;
if (activeLayers === undefined) {
throw "ActiveLayers should be defined...";
}
const checkboxes: BaseUIElement[] = [];
for (const layer of activeLayers.data) {
2021-07-22 11:29:09 +02:00
const iconStyle = "width:1.5rem;height:1.5rem;margin-left:1.25rem";
const icon = new Combine([Svg.checkbox_filled]).SetStyle(iconStyle);
2021-07-20 16:29:48 +02:00
const iconUnselected = new Combine([Svg.checkbox_empty]).SetStyle(
2021-07-22 11:29:09 +02:00
iconStyle
2021-07-20 16:29:48 +02:00
);
if (layer.layerDef.name === undefined) {
continue;
}
const style = "display:flex;align-items:center;color:#007759";
const name: Translation = Translations.WT(layer.layerDef.name)?.Clone();
2021-07-20 15:14:51 +02:00
2021-07-22 11:29:09 +02:00
const styledNameChecked = name
.Clone()
.SetStyle("font-size:large;padding-left:1.25rem");
const styledNameUnChecked = name
.Clone()
.SetStyle("font-size:large;padding-left:1.25rem");
const layerChecked = new Combine([icon, styledNameChecked]).SetStyle(
style
);
2021-07-20 16:29:48 +02:00
const layerNotChecked = new Combine([
iconUnselected,
2021-07-22 11:29:09 +02:00
styledNameUnChecked,
2021-07-20 16:29:48 +02:00
]).SetStyle(style);
checkboxes.push(
new Toggle(layerChecked, layerNotChecked, layer.isDisplayed)
.ToggleOnClick()
.SetStyle("margin:0.3em;")
);
}
let combinedCheckboxes = new Combine(checkboxes);
combinedCheckboxes.SetStyle("display:flex;flex-direction:column;");
filterPanel = new Combine([combinedCheckboxes]);
return filterPanel;
}
2021-07-20 15:14:51 +02:00
}
}