Move UI configs to DB
This commit is contained in:
1 parent
192ed6b034
commit
1cceba3f8b
22 files changed
+337
-448
No files matched your search
@@ -4,6 +4,10 @@ import m from "mithril";
|
||||
import * as components from "../components";
|
||||
import * as taskQueue from "../task-queue";
|
||||
import longTextComponent from "../long-text-component";
|
||||
import * as expression from "../../lib/common/expression";
|
||||
import memoize from "../../lib/common/memoize";
|
||||
|
||||
const memoizedParse = memoize(expression.parse);
|
||||
|
||||
function escapeRegExp(str) {
|
||||
return str.replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&");
|
||||
@@ -47,7 +51,7 @@ const component = {
|
||||
val.push(
|
||||
m(
|
||||
components.get("parameter"),
|
||||
Object.assign({ device: device, parameter: k })
|
||||
Object.assign({ device: device, parameter: memoizedParse(k) })
|
||||
)
|
||||
);
|
||||
} else if (p.object && p.writable) {
|
||||
|
||||
@@ -3,16 +3,12 @@
|
||||
import m from "mithril";
|
||||
import * as components from "../components";
|
||||
import * as store from "../store";
|
||||
import * as expression from "../../lib/common/expression";
|
||||
import memoize from "../../lib/common/memoize";
|
||||
|
||||
const memoizedParse = memoize(expression.parse);
|
||||
|
||||
const component = {
|
||||
view: vnode => {
|
||||
if (vnode.attrs.filter) {
|
||||
const filter = memoizedParse(vnode.attrs.filter);
|
||||
if (!store.evaluateExpression(filter, vnode.attrs.device)) return null;
|
||||
if (!store.evaluateExpression(vnode.attrs.filter, vnode.attrs.device))
|
||||
return null;
|
||||
}
|
||||
|
||||
const children = Object.values(vnode.attrs.components).map(c => {
|
||||
|
||||
@@ -3,10 +3,6 @@
|
||||
import m from "mithril";
|
||||
import config from "../config";
|
||||
import * as store from "../store";
|
||||
import * as expression from "../../lib/common/expression";
|
||||
import memoize from "../../lib/common/memoize";
|
||||
|
||||
const memoizedParse = memoize(expression.parse);
|
||||
|
||||
const CHARTS = config.ui.overview.charts;
|
||||
|
||||
@@ -15,7 +11,7 @@ const component = {
|
||||
const device = vnode.attrs.device;
|
||||
const chart = CHARTS[vnode.attrs.chart];
|
||||
for (const slice of Object.values(chart.slices)) {
|
||||
const filter = memoizedParse(slice.filter);
|
||||
const filter = slice.filter;
|
||||
if (store.evaluateExpression(filter, device)) {
|
||||
const dot = m(
|
||||
"svg",
|
||||
|
||||
@@ -4,25 +4,15 @@ import m from "mithril";
|
||||
import * as components from "../components";
|
||||
import * as taskQueue from "../task-queue";
|
||||
import * as store from "../store";
|
||||
import * as expression from "../../lib/common/expression";
|
||||
import * as expressionParser from "../../lib/common/expression-parser";
|
||||
import memoize from "../../lib/common/memoize";
|
||||
|
||||
const memoizeParse = memoize(expression.parse);
|
||||
|
||||
const component = {
|
||||
oninit: vnode => {
|
||||
const obj = expression.parse(vnode.attrs.parameter);
|
||||
const obj = vnode.attrs.parameter;
|
||||
if (!Array.isArray(obj) || !obj[0] === "PARAM")
|
||||
throw new Error("Object must be a parameter path");
|
||||
vnode.state.object = obj[1];
|
||||
vnode.state.parameters = Object.values(vnode.attrs.childParameters).map(
|
||||
parameter => {
|
||||
return Object.assign({}, parameter, {
|
||||
parameter: expression.parse(parameter.parameter)
|
||||
});
|
||||
}
|
||||
);
|
||||
vnode.state.parameters = Object.values(vnode.attrs.childParameters);
|
||||
},
|
||||
view: vnode => {
|
||||
const device = vnode.attrs.device;
|
||||
@@ -47,8 +37,7 @@ const component = {
|
||||
|
||||
const rows = [];
|
||||
for (const i of instances) {
|
||||
let filter =
|
||||
vnode.attrs.filter != null ? memoizeParse(vnode.attrs.filter) : true;
|
||||
let filter = vnode.attrs.filter != null ? vnode.attrs.filter : true;
|
||||
|
||||
filter = expressionParser.map(filter, e => {
|
||||
if (Array.isArray(e) && e[0] === "PARAM")
|
||||
@@ -70,7 +59,7 @@ const component = {
|
||||
components.get(p.type || "parameter"),
|
||||
Object.assign({}, p, {
|
||||
device: device,
|
||||
parameter: expressionParser.stringify(param),
|
||||
parameter: param,
|
||||
label: ""
|
||||
})
|
||||
)
|
||||
|
||||
@@ -8,12 +8,10 @@ import memoize from "../../lib/common/memoize";
|
||||
import timeAgo from "../timeago";
|
||||
import longTextComponent from "../long-text-component";
|
||||
|
||||
const memoizedParse = memoize(expression.parse);
|
||||
|
||||
const evaluateParam = memoize((exp, obj, now) => {
|
||||
let timestamp = now;
|
||||
const params = new Set();
|
||||
const value = expression.evaluate(memoizedParse(exp), obj, now, e => {
|
||||
const value = expression.evaluate(exp, obj, now, e => {
|
||||
if (Array.isArray(e)) {
|
||||
if (e[0] === "PARAM") {
|
||||
params.add(e[1]);
|
||||
|
||||
@@ -4,10 +4,6 @@ import m from "mithril";
|
||||
import * as taskQueue from "../task-queue";
|
||||
import * as store from "../store";
|
||||
import * as notifications from "../notifications";
|
||||
import * as expression from "../../lib/common/expression";
|
||||
import memoize from "../../lib/common/memoize";
|
||||
|
||||
const memoizedParse = memoize(expression.parse);
|
||||
|
||||
const component = {
|
||||
view: vnode => {
|
||||
@@ -20,8 +16,7 @@ const component = {
|
||||
onclick: e => {
|
||||
e.target.disabled = true;
|
||||
const params = Object.values(vnode.attrs.parameters)
|
||||
.map(p => {
|
||||
const exp = memoizedParse(p);
|
||||
.map(exp => {
|
||||
if (!Array.isArray(exp) || !exp[0] === "PARAM") return null;
|
||||
return store.evaluateExpression(exp[1], device);
|
||||
})
|
||||
|
||||
+4
-3
@@ -17,8 +17,8 @@ const PAGE_SIZE = config.ui.pageSize || 10;
|
||||
|
||||
const memoizedParse = memoize(expression.parse);
|
||||
const memoizedJsonParse = memoize(JSON.parse);
|
||||
const memoizedGetSortable = memoize(str => {
|
||||
const expressionParams = expression.extractParams(expression.parse(str));
|
||||
const memoizedGetSortable = memoize(p => {
|
||||
const expressionParams = expression.extractParams(p);
|
||||
if (expressionParams.length === 1) {
|
||||
const param = expression.evaluate(expressionParams[0]);
|
||||
if (typeof param === "string") return param;
|
||||
@@ -28,7 +28,8 @@ const memoizedGetSortable = memoize(str => {
|
||||
|
||||
const getDownloadUrl = memoize((filter, indexParameters) => {
|
||||
const columns = {};
|
||||
for (const p of indexParameters) columns[p.label] = p.parameter;
|
||||
for (const p of indexParameters)
|
||||
columns[p.label] = expression.stringify(p.parameter);
|
||||
return `/api/devices.csv?${m.buildQueryString({
|
||||
filter: filter,
|
||||
columns: JSON.stringify(columns)
|
||||
|
||||
+1
-5
@@ -4,10 +4,6 @@ import m from "mithril";
|
||||
import config from "./config";
|
||||
import * as store from "./store";
|
||||
import pieChartComponent from "./pie-chart-component";
|
||||
import * as expression from "../lib/common/expression";
|
||||
import memoize from "../lib/common/memoize";
|
||||
|
||||
const memoizedParse = memoize(expression.parse);
|
||||
|
||||
const GROUPS = config.ui.overview.groups;
|
||||
const CHARTS = {};
|
||||
@@ -22,7 +18,7 @@ function queryCharts(charts) {
|
||||
charts[chartName] = chart = Object.assign({}, chart);
|
||||
chart.slices = Object.assign({}, chart.slices);
|
||||
for (let [sliceName, slice] of Object.entries(chart.slices)) {
|
||||
const filter = memoizedParse(slice.filter);
|
||||
const filter = slice.filter;
|
||||
chart.slices[sliceName] = slice = Object.assign({}, slice);
|
||||
slice.count = store.count("devices", filter);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
import m from "mithril";
|
||||
import * as expression from "../lib/common/expression";
|
||||
import memoize from "../lib/common/memoize";
|
||||
|
||||
const memoizedStringify = memoize(expression.stringify);
|
||||
|
||||
const drawChart = function(chartData) {
|
||||
const slices = chartData.slices;
|
||||
@@ -28,7 +32,7 @@ const drawChart = function(chartData) {
|
||||
"a",
|
||||
{
|
||||
href: `/#!/devices/?${m.buildQueryString({
|
||||
filter: slice.filter
|
||||
filter: memoizedStringify(slice.filter)
|
||||
})}`
|
||||
},
|
||||
slice.count.value || 0
|
||||
@@ -68,7 +72,7 @@ const drawChart = function(chartData) {
|
||||
"a",
|
||||
{
|
||||
"xlink:href": `/#!/devices/?${m.buildQueryString({
|
||||
filter: slice.filter
|
||||
filter: memoizedStringify(slice.filter)
|
||||
})}`
|
||||
},
|
||||
[
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
"use strict";
|
||||
|
||||
import config from "./config";
|
||||
import * as expression from "../lib/common/expression";
|
||||
|
||||
const resources = {
|
||||
devices: {},
|
||||
@@ -37,7 +36,7 @@ const resources = {
|
||||
|
||||
for (const v of Object.values(config.ui.filters)) {
|
||||
resources.devices[v.label] = {
|
||||
parameter: expression.parse(v.parameter),
|
||||
parameter: v.parameter,
|
||||
type: (v.type || "").split(",").map(s => s.trim())
|
||||
};
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user