|
|
@ -1,9 +1,45 @@ |
|
|
|
|
|
const TOKEN_MAP = { |
|
|
|
|
|
EQUALS: "===", |
|
|
|
|
|
LT: "<", |
|
|
|
|
|
LTE: "<=", |
|
|
|
|
|
MT: ">", |
|
|
|
|
|
MTE: ">=", |
|
|
|
|
|
CONTAINS: "includes()", |
|
|
|
|
|
AND: "&&", |
|
|
|
|
|
OR: "||" |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function parseFilters(filters) { |
|
|
|
|
|
const expression = filters.map(filter => { |
|
|
|
|
|
if (filter.conjunction) return TOKEN_MAP[filter.conjunction]; |
|
|
|
|
|
|
|
|
|
|
|
return `doc["${filter.key}"] ${TOKEN_MAP[filter.condition]} "${filter.value}"` |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
return expression.join(" ") |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
function statsViewTemplate({ field, modelId, groupBy }) { |
|
|
function statsViewTemplate({ field, modelId, groupBy }) { |
|
|
return { |
|
|
return { |
|
|
meta: { |
|
|
meta: { |
|
|
field, |
|
|
field, |
|
|
modelId, |
|
|
modelId, |
|
|
groupBy, |
|
|
groupBy, |
|
|
|
|
|
filter: [ |
|
|
|
|
|
{ |
|
|
|
|
|
key: "Status", |
|
|
|
|
|
condition: "Equals", |
|
|
|
|
|
value: "VIP", |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
conjunction: "AND" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
key: "Status", |
|
|
|
|
|
condition: "Equals", |
|
|
|
|
|
value: "VIP", |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
schema: { |
|
|
schema: { |
|
|
sum: "number", |
|
|
sum: "number", |
|
|
min: "number", |
|
|
min: "number", |
|
|
|