Update condition evaluation in tables
This commit is contained in:
parent
feffd80d11
commit
c9bcda0bd5
|
@ -29,10 +29,8 @@
|
||||||
let drawer
|
let drawer
|
||||||
let dragDisabled = true
|
let dragDisabled = true
|
||||||
|
|
||||||
$: conditionCount = value?.length
|
$: count = value?.length
|
||||||
$: conditionText = `${conditionCount || "No"} condition${
|
$: conditionText = `${count || "No"} condition${count !== 1 ? "s" : ""} set`
|
||||||
conditionCount !== 1 ? "s" : ""
|
|
||||||
} set`
|
|
||||||
$: type = componentInstance.columnType
|
$: type = componentInstance.columnType
|
||||||
$: valueTypeOptions = [
|
$: valueTypeOptions = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,33 +12,35 @@ const evaluateConditions = (row, column) => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for (let condition of column.conditions) {
|
for (let condition of column.conditions) {
|
||||||
|
try {
|
||||||
|
const type = column.schema.type
|
||||||
let value = row[column.name]
|
let value = row[column.name]
|
||||||
let referenceValue = condition.referenceValue
|
let referenceValue = condition.referenceValue
|
||||||
|
|
||||||
// Parse values into correct types
|
// Coerce values into correct types for primitives
|
||||||
if (condition.valueType === "number") {
|
if (type === "number") {
|
||||||
referenceValue = parseFloat(referenceValue)
|
referenceValue = parseFloat(referenceValue)
|
||||||
value = parseFloat(value)
|
value = parseFloat(value)
|
||||||
} else if (condition.valueType === "datetime") {
|
} else if (type === "datetime") {
|
||||||
if (referenceValue) {
|
if (referenceValue) {
|
||||||
referenceValue = new Date(referenceValue).toISOString()
|
referenceValue = new Date(referenceValue).toISOString()
|
||||||
}
|
}
|
||||||
if (value) {
|
if (value) {
|
||||||
value = new Date(value).toISOString()
|
value = new Date(value).toISOString()
|
||||||
}
|
}
|
||||||
} else if (condition.valueType === "boolean") {
|
} else if (type === "boolean") {
|
||||||
referenceValue = `${referenceValue}`.toLowerCase() === "true"
|
referenceValue = `${referenceValue}`.toLowerCase() === "true"
|
||||||
value = `${value}`.toLowerCase() === "true"
|
value = `${value}`.toLowerCase() === "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build lucene compatible condition expression
|
// Build lucene compatible condition expression
|
||||||
const luceneCondition = {
|
const luceneFilter = {
|
||||||
operator: condition.operator,
|
operator: condition.operator,
|
||||||
type: condition.valueType,
|
type,
|
||||||
field: "value",
|
field: "value",
|
||||||
value: referenceValue,
|
value: referenceValue,
|
||||||
}
|
}
|
||||||
const query = QueryUtils.buildQuery([luceneCondition])
|
const query = QueryUtils.buildQuery([luceneFilter])
|
||||||
const result = QueryUtils.runQuery([{ value }], query)
|
const result = QueryUtils.runQuery([{ value }], query)
|
||||||
if (result.length > 0) {
|
if (result.length > 0) {
|
||||||
if (!row.__metadata) {
|
if (!row.__metadata) {
|
||||||
|
@ -48,6 +50,9 @@ const evaluateConditions = (row, column) => {
|
||||||
background: condition.color,
|
background: condition.color,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch {
|
||||||
|
// Swallow
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +97,10 @@ export const deriveStores = context => {
|
||||||
const enrichedRows = derived(
|
const enrichedRows = derived(
|
||||||
[rows, rowChangeCache, columns],
|
[rows, rowChangeCache, columns],
|
||||||
([$rows, $rowChangeCache, $columns]) => {
|
([$rows, $rowChangeCache, $columns]) => {
|
||||||
|
if (!$rows?.length || !$columns?.length) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
console.log("ENRICH ROWS", $rows, $rowChangeCache, $columns)
|
||||||
return $rows.map((row, idx) => {
|
return $rows.map((row, idx) => {
|
||||||
let enriched = {
|
let enriched = {
|
||||||
...row,
|
...row,
|
||||||
|
|
Loading…
Reference in New Issue