/** * Copyright 2013-2019 GenieACS Inc. * * This file is part of GenieACS. * * GenieACS is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * GenieACS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with GenieACS. If not, see . */ import { ClosureComponent, VnodeDOM } from "mithril"; import { m } from "../components"; import { QueryResponse, evaluateExpression } from "../store"; import { FlatDevice } from "../../lib/ui/db"; import { Expression } from "../../lib/types"; interface Attrs { device: FlatDevice; parameters: Record< string, { type?: Expression; label: Expression; parameter: Expression } >; deviceQuery: QueryResponse; } const component: ClosureComponent = () => { return { view: (vnode) => { const device = vnode.attrs.device; const rows = Object.values(vnode.attrs.parameters).map((parameter) => { const type = evaluateExpression(parameter.type, device); const p = m.context( { device: device, parameter: parameter.parameter, }, (type as string) || "parameter", parameter, ); return m( "tr", { oncreate: (vn) => { (vn.dom as HTMLElement).style.display = (p as VnodeDOM).dom ? "" : "none"; }, onupdate: (vn) => { (vn.dom as HTMLElement).style.display = (p as VnodeDOM).dom ? "" : "none"; }, }, m("th", evaluateExpression(parameter.label, device)), m("td", p), ); }); return m( "loading", { queries: [vnode.attrs.deviceQuery] }, m("table.parameter-list", rows), ); }, }; }; export default component;