Improve 'parameter' comp. for complex expressions

This commit is contained in:
Zaid Abdulla committed 2020-08-19 21:51:12 -07:00
1 parent 19c5bb03ea
commit 49daf5adf2
1 file changed
+31 -13
+31 -13
View File
@@ -28,25 +28,43 @@ import { getIcon } from "../icons";
const evaluateParam = memoize((exp, obj, now: number) => { const evaluateParam = memoize((exp, obj, now: number) => {
let timestamp = now; let timestamp = now;
const params = new Set(); exp = expression.evaluate(exp, null, now, (e) => {
const value = expression.evaluate(exp, obj, now, (e) => { if (!Array.isArray(e)) return e;
if (Array.isArray(e)) { for (let i = 1; i < e.length; ++i) {
if (e[0] === "PARAM") { if (
params.add(e[1]); Array.isArray(e[i]) &&
if (!Array.isArray(e[1])) { e[i][0] === "PARAM" &&
const p = obj[e[1]]; !Array.isArray(e[i][1])
if (p && p.valueTimestamp) ) {
timestamp = Math.min(timestamp, p.valueTimestamp); let v = null;
const p = obj[e[i][1]];
if (p && p.value) {
v = p.value[0];
timestamp = Math.min(timestamp, p.valueTimestamp);
} }
e = e.slice();
e[i] = v;
} }
if (e[0] === "FUNC" && e[1] === "DATE_STRING" && !Array.isArray(e[2]))
return new Date(e[2]).toLocaleString();
} }
if (e[0] === "FUNC" && e[1] === "DATE_STRING" && !Array.isArray(e[2]))
return new Date(e[2]).toLocaleString();
return e; return e;
}); });
let parameter = params.size === 1 ? params.values().next().value : null; let parameter = null;
if (Array.isArray(parameter)) parameter = null; let value = null;
if (!Array.isArray(exp)) {
value = exp;
} else if (exp[0] === "PARAM") {
const p = obj[exp[1]];
if (p && p.value) {
timestamp = p.valueTimestamp;
value = p.value[0];
parameter = exp[1];
}
}
return { value, timestamp, parameter }; return { value, timestamp, parameter };
}); });