Replace Filter class with expression structure

This is in order to be able to support UPPER() and LOWER() functions in
queries which are needed for case-insensitive search.
This commit is contained in:
Zaid Abdulla committed 2018-12-26 00:22:07 -08:00
1 parent 7194fcab44
commit c2d13e8364
25 files changed
+716 -578

No files matched your search

+9 -11
View File
@@ -2,7 +2,7 @@
import m from "mithril";
import * as filterParser from "../common/filter-parser";
import * as expression from "../common/expression";
const component = {
view: vnode => {
@@ -15,16 +15,14 @@ const component = {
if (vnode.attrs.filter !== vnode.state.filter) {
vnode.state.filterList = [];
vnode.state.filter = vnode.attrs.filter;
if (vnode.attrs.filter)
if (vnode.attrs.filter != null)
if (vnode.attrs.filter[0] === "AND")
for (let i = 1; i < vnode.attrs.filter.length; ++i)
vnode.state.filterList.push(
filterParser.stringify(vnode.attrs.filter[i])
expression.stringify(vnode.attrs.filter[i])
);
else
vnode.state.filterList.push(
filterParser.stringify(vnode.attrs.filter)
);
vnode.state.filterList.push(expression.stringify(vnode.attrs.filter));
vnode.state.filterList.push("");
}
@@ -33,18 +31,18 @@ const component = {
vnode.state.filterList = vnode.state.filterList.filter(
f => f && f.trim()
);
let filterAst = vnode.state.filterList.map((f, idx) => {
let filter = vnode.state.filterList.map((f, idx) => {
try {
return filterParser.parse(f);
return expression.parse(f);
} catch (err) {
vnode.state.filterInvalid |= 1 << idx;
}
});
if (filterAst.length) filterAst = ["AND"].concat(filterAst);
else filterAst = null;
if (filter.length) filter = ["AND"].concat(filter);
else filter = null;
vnode.state.filterList.push("");
if (!vnode.state.filterInvalid) vnode.attrs.onChange(filterAst);
if (!vnode.state.filterInvalid) vnode.attrs.onChange(filter);
}
return m(