Move UI configs to DB

This commit is contained in:
Shweelan Samson authored and Zaid Abdulla committed 2019-01-16 05:22:14 -08:00
1 parent 192ed6b034
commit 1cceba3f8b
22 files changed
+337 -448

No files matched your search

+5 -1
View File
@@ -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) {
+2 -6
View File
@@ -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 => {
+1 -5
View File
@@ -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 -15
View File
@@ -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: ""
})
)
+1 -3
View File
@@ -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]);
+1 -6
View File
@@ -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
View File
@@ -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
View File
@@ -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);
}
+6 -2
View File
@@ -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
View File
@@ -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())
};
}