Update condition evaluation in tables

This commit is contained in:
Andrew Kingston 2024-06-27 12:38:03 +01:00
parent feffd80d11
commit c9bcda0bd5
No known key found for this signature in database
2 changed files with 41 additions and 34 deletions

View File

@ -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 = [
{ {

View File

@ -12,41 +12,46 @@ const evaluateConditions = (row, column) => {
return return
} }
for (let condition of column.conditions) { for (let condition of column.conditions) {
let value = row[column.name] try {
let referenceValue = condition.referenceValue const type = column.schema.type
let value = row[column.name]
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) {
value = new Date(value).toISOString()
}
} else if (type === "boolean") {
referenceValue = `${referenceValue}`.toLowerCase() === "true"
value = `${value}`.toLowerCase() === "true"
} }
if (value) {
value = new Date(value).toISOString()
}
} else if (condition.valueType === "boolean") {
referenceValue = `${referenceValue}`.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 result = QueryUtils.runQuery([{ value }], query)
if (result.length > 0) {
if (!row.__metadata) {
row.__metadata = {}
} }
row.__metadata[column.name] = { const query = QueryUtils.buildQuery([luceneFilter])
background: condition.color, const result = QueryUtils.runQuery([{ value }], query)
if (result.length > 0) {
if (!row.__metadata) {
row.__metadata = {}
}
row.__metadata[column.name] = {
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,