@deephaven/iris-grid 1.26.1 → 1.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/IrisGridUtils.d.ts +7 -0
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +31 -5
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -0
- package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +177 -167
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -2
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +23 -18
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +27 -7
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +172 -122
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.d.ts +18 -0
- package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.d.ts.map +1 -0
- package/dist/sidebar/conditional-formatting/{ColumnFormatEditor.js → MultiColumnFormatEditor.js} +110 -22
- package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.js.map +1 -0
- package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +8 -5
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/package.json +5 -5
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +0 -11
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +0 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +0 -1
|
@@ -52,6 +52,8 @@ export var DateCondition = /*#__PURE__*/function (DateCondition) {
|
|
|
52
52
|
export var BooleanCondition = /*#__PURE__*/function (BooleanCondition) {
|
|
53
53
|
BooleanCondition["IS_TRUE"] = "is-true";
|
|
54
54
|
BooleanCondition["IS_FALSE"] = "is-false";
|
|
55
|
+
BooleanCondition["IS_EQUAL"] = "is-equal";
|
|
56
|
+
BooleanCondition["IS_NOT_EQUAL"] = "is-not-equal";
|
|
55
57
|
BooleanCondition["IS_NULL"] = "is-null";
|
|
56
58
|
BooleanCondition["IS_NOT_NULL"] = "is-not-null";
|
|
57
59
|
return BooleanCondition;
|
|
@@ -150,47 +152,126 @@ export function getStyleDBString(config) {
|
|
|
150
152
|
}
|
|
151
153
|
return "bgfg(`".concat(bg, "`, `").concat(color, "`)");
|
|
152
154
|
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Formats a rightHandValue for use in a condition expression.
|
|
158
|
+
* - If a ModelColumn: returns the column name as a bare identifier (no quoting)
|
|
159
|
+
* - If a string: wraps it in the given quote character
|
|
160
|
+
* - If undefined: returns undefined
|
|
161
|
+
*/
|
|
162
|
+
export function formatRHV(value, quote) {
|
|
163
|
+
if (value === undefined) return undefined;
|
|
164
|
+
if (typeof value === 'object') return value.name;
|
|
165
|
+
return "".concat(quote).concat(value).concat(quote);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Formats a date rightHandValue for use in a condition expression.
|
|
170
|
+
* - If a ModelColumn: returns the column name (no quoting or timezone processing)
|
|
171
|
+
* - If a string: reformats the timezone and wraps in single quotes
|
|
172
|
+
*/
|
|
173
|
+
function formatDateRHV(dh, value) {
|
|
174
|
+
if (value === undefined) return undefined;
|
|
175
|
+
if (typeof value === 'object') return value.name;
|
|
176
|
+
var _value$split = value.split(' '),
|
|
177
|
+
_value$split2 = _toArray(_value$split),
|
|
178
|
+
dateTimeString = _value$split2[0],
|
|
179
|
+
rest = _value$split2.slice(1);
|
|
180
|
+
var tzCode = rest.join(' ');
|
|
181
|
+
var tz = dh.i18n.TimeZone.getTimeZone(tzCode);
|
|
182
|
+
return "'".concat(dateTimeString, " ").concat(tz.id, "'");
|
|
183
|
+
}
|
|
153
184
|
function getNumberConditionText(config) {
|
|
154
|
-
var
|
|
155
|
-
|
|
185
|
+
var leftHandValue = config.leftHandValue,
|
|
186
|
+
rightHandValue = config.rightHandValue,
|
|
156
187
|
start = config.start,
|
|
157
188
|
end = config.end;
|
|
158
|
-
return getTextForNumberCondition(
|
|
189
|
+
return getTextForNumberCondition(leftHandValue.name, config.condition, formatRHV(rightHandValue, ''), start, end);
|
|
159
190
|
}
|
|
160
191
|
function getStringConditionText(config) {
|
|
161
|
-
var
|
|
162
|
-
|
|
163
|
-
|
|
192
|
+
var leftHandValue = config.leftHandValue,
|
|
193
|
+
rightHandValue = config.rightHandValue;
|
|
194
|
+
var columnName = leftHandValue.name;
|
|
195
|
+
var rhv = formatRHV(rightHandValue, '"');
|
|
196
|
+
switch (config.condition) {
|
|
197
|
+
case StringCondition.IS_EXACTLY:
|
|
198
|
+
return "".concat(columnName, " == ").concat(rhv);
|
|
199
|
+
case StringCondition.IS_NOT_EXACTLY:
|
|
200
|
+
return "".concat(columnName, " != ").concat(rhv);
|
|
201
|
+
case StringCondition.CONTAINS:
|
|
202
|
+
return "".concat(columnName, " != null && ").concat(columnName, ".contains(").concat(rhv, ")");
|
|
203
|
+
case StringCondition.DOES_NOT_CONTAIN:
|
|
204
|
+
return "".concat(columnName, " != null && !").concat(columnName, ".contains(").concat(rhv, ")");
|
|
205
|
+
case StringCondition.STARTS_WITH:
|
|
206
|
+
return "".concat(columnName, " != null && ").concat(columnName, ".startsWith(").concat(rhv, ")");
|
|
207
|
+
case StringCondition.ENDS_WITH:
|
|
208
|
+
return "".concat(columnName, " != null && ").concat(columnName, ".endsWith(").concat(rhv, ")");
|
|
209
|
+
case StringCondition.IS_NULL:
|
|
210
|
+
return "".concat(columnName, " == null");
|
|
211
|
+
case StringCondition.IS_NOT_NULL:
|
|
212
|
+
return "".concat(columnName, " != null");
|
|
213
|
+
}
|
|
164
214
|
}
|
|
165
215
|
function getDateConditionText(dh, config) {
|
|
166
|
-
var
|
|
167
|
-
|
|
168
|
-
|
|
216
|
+
var leftHandValue = config.leftHandValue,
|
|
217
|
+
rightHandValue = config.rightHandValue;
|
|
218
|
+
var columnName = leftHandValue.name;
|
|
219
|
+
var rhv = formatDateRHV(dh, rightHandValue);
|
|
220
|
+
switch (config.condition) {
|
|
221
|
+
case DateCondition.IS_EXACTLY:
|
|
222
|
+
return "".concat(columnName, " == ").concat(rhv);
|
|
223
|
+
case DateCondition.IS_NOT_EXACTLY:
|
|
224
|
+
return "".concat(columnName, " != ").concat(rhv);
|
|
225
|
+
case DateCondition.IS_BEFORE:
|
|
226
|
+
return "".concat(columnName, " < ").concat(rhv);
|
|
227
|
+
case DateCondition.IS_BEFORE_OR_EQUAL:
|
|
228
|
+
return "".concat(columnName, " <= ").concat(rhv);
|
|
229
|
+
case DateCondition.IS_AFTER:
|
|
230
|
+
return "".concat(columnName, " > ").concat(rhv);
|
|
231
|
+
case DateCondition.IS_AFTER_OR_EQUAL:
|
|
232
|
+
return "".concat(columnName, " >= ").concat(rhv);
|
|
233
|
+
case DateCondition.IS_NULL:
|
|
234
|
+
return "".concat(columnName, " == null");
|
|
235
|
+
case DateCondition.IS_NOT_NULL:
|
|
236
|
+
return "".concat(columnName, " != null");
|
|
237
|
+
}
|
|
169
238
|
}
|
|
170
239
|
function getBooleanConditionText(config) {
|
|
171
|
-
var
|
|
172
|
-
|
|
240
|
+
var leftHandValue = config.leftHandValue,
|
|
241
|
+
rightHandValue = config.rightHandValue;
|
|
242
|
+
return getTextForBooleanCondition(leftHandValue.name, config.condition, rightHandValue);
|
|
173
243
|
}
|
|
174
244
|
function getCharConditionText(config) {
|
|
175
|
-
var
|
|
176
|
-
|
|
177
|
-
|
|
245
|
+
var leftHandValue = config.leftHandValue,
|
|
246
|
+
rightHandValue = config.rightHandValue;
|
|
247
|
+
var columnName = leftHandValue.name;
|
|
248
|
+
var rhv = formatRHV(rightHandValue, "'");
|
|
249
|
+
switch (config.condition) {
|
|
250
|
+
case CharCondition.IS_EQUAL:
|
|
251
|
+
return "".concat(columnName, " == ").concat(rhv);
|
|
252
|
+
case CharCondition.IS_NOT_EQUAL:
|
|
253
|
+
return "".concat(columnName, " != ").concat(rhv);
|
|
254
|
+
case CharCondition.IS_NULL:
|
|
255
|
+
return "isNull(".concat(columnName, ")");
|
|
256
|
+
case CharCondition.IS_NOT_NULL:
|
|
257
|
+
return "!isNull(".concat(columnName, ")");
|
|
258
|
+
}
|
|
178
259
|
}
|
|
179
260
|
export function getConditionDBString(dh, config) {
|
|
180
|
-
var
|
|
181
|
-
if (TableUtils.isNumberType(
|
|
261
|
+
var leftHandValue = config.leftHandValue;
|
|
262
|
+
if (TableUtils.isNumberType(leftHandValue.type)) {
|
|
182
263
|
return getNumberConditionText(config);
|
|
183
264
|
}
|
|
184
|
-
if (TableUtils.isCharType(
|
|
265
|
+
if (TableUtils.isCharType(leftHandValue.type)) {
|
|
185
266
|
return getCharConditionText(config);
|
|
186
267
|
}
|
|
187
|
-
if (TableUtils.isStringType(
|
|
268
|
+
if (TableUtils.isStringType(leftHandValue.type)) {
|
|
188
269
|
return getStringConditionText(config);
|
|
189
270
|
}
|
|
190
|
-
if (TableUtils.isDateType(
|
|
271
|
+
if (TableUtils.isDateType(leftHandValue.type)) {
|
|
191
272
|
return getDateConditionText(dh, config);
|
|
192
273
|
}
|
|
193
|
-
if (TableUtils.isBooleanType(
|
|
274
|
+
if (TableUtils.isBooleanType(leftHandValue.type)) {
|
|
194
275
|
return getBooleanConditionText(config);
|
|
195
276
|
}
|
|
196
277
|
throw new Error('Invalid column type');
|
|
@@ -263,6 +344,10 @@ export function getLabelForBooleanCondition(condition) {
|
|
|
263
344
|
return 'is true';
|
|
264
345
|
case BooleanCondition.IS_FALSE:
|
|
265
346
|
return 'is false';
|
|
347
|
+
case BooleanCondition.IS_EQUAL:
|
|
348
|
+
return 'is equal to';
|
|
349
|
+
case BooleanCondition.IS_NOT_EQUAL:
|
|
350
|
+
return 'is not equal to';
|
|
266
351
|
case BooleanCondition.IS_NULL:
|
|
267
352
|
return 'is null';
|
|
268
353
|
case BooleanCondition.IS_NOT_NULL:
|
|
@@ -300,9 +385,6 @@ export function getDefaultConditionForType(columnType) {
|
|
|
300
385
|
throw new Error('Invalid column type');
|
|
301
386
|
}
|
|
302
387
|
export function getDefaultValueForType(columnType) {
|
|
303
|
-
if (TableUtils.isCharType(columnType)) {
|
|
304
|
-
return '';
|
|
305
|
-
}
|
|
306
388
|
if (TableUtils.isStringType(columnType)) {
|
|
307
389
|
return '';
|
|
308
390
|
}
|
|
@@ -310,12 +392,12 @@ export function getDefaultValueForType(columnType) {
|
|
|
310
392
|
}
|
|
311
393
|
export function getConditionConfig(config) {
|
|
312
394
|
var condition = config.condition,
|
|
313
|
-
|
|
395
|
+
rightHandValue = config.rightHandValue,
|
|
314
396
|
start = config.start,
|
|
315
397
|
end = config.end;
|
|
316
398
|
return {
|
|
317
399
|
condition,
|
|
318
|
-
|
|
400
|
+
rightHandValue,
|
|
319
401
|
start,
|
|
320
402
|
end
|
|
321
403
|
};
|
|
@@ -323,7 +405,7 @@ export function getConditionConfig(config) {
|
|
|
323
405
|
export function getDefaultConditionConfigForType(type) {
|
|
324
406
|
return {
|
|
325
407
|
condition: getDefaultConditionForType(type),
|
|
326
|
-
|
|
408
|
+
rightHandValue: getDefaultValueForType(type),
|
|
327
409
|
start: undefined,
|
|
328
410
|
end: undefined
|
|
329
411
|
};
|
|
@@ -379,6 +461,10 @@ function getShortLabelForBooleanCondition(condition) {
|
|
|
379
461
|
return 'is true';
|
|
380
462
|
case BooleanCondition.IS_FALSE:
|
|
381
463
|
return 'is false';
|
|
464
|
+
case BooleanCondition.IS_EQUAL:
|
|
465
|
+
return '==';
|
|
466
|
+
case BooleanCondition.IS_NOT_EQUAL:
|
|
467
|
+
return '!=';
|
|
382
468
|
case BooleanCondition.IS_NULL:
|
|
383
469
|
return 'is null';
|
|
384
470
|
case BooleanCondition.IS_NOT_NULL:
|
|
@@ -441,83 +527,23 @@ export function getTextForNumberCondition(columnName, condition, value, start, e
|
|
|
441
527
|
return "".concat(columnName, " != null");
|
|
442
528
|
}
|
|
443
529
|
}
|
|
444
|
-
export function
|
|
445
|
-
|
|
446
|
-
case StringCondition.IS_EXACTLY:
|
|
447
|
-
return "".concat(columnName, " == \"").concat(value, "\"");
|
|
448
|
-
case StringCondition.IS_NOT_EXACTLY:
|
|
449
|
-
return "".concat(columnName, " != \"").concat(value, "\"");
|
|
450
|
-
case StringCondition.CONTAINS:
|
|
451
|
-
return "".concat(columnName, " != null && ").concat(columnName, ".contains(\"").concat(value, "\")");
|
|
452
|
-
case StringCondition.DOES_NOT_CONTAIN:
|
|
453
|
-
return "".concat(columnName, " != null && !").concat(columnName, ".contains(\"").concat(value, "\")");
|
|
454
|
-
case StringCondition.STARTS_WITH:
|
|
455
|
-
return "".concat(columnName, " != null && ").concat(columnName, ".startsWith(\"").concat(value, "\")");
|
|
456
|
-
case StringCondition.ENDS_WITH:
|
|
457
|
-
return "".concat(columnName, " != null && ").concat(columnName, ".endsWith(\"").concat(value, "\")");
|
|
458
|
-
case StringCondition.IS_NULL:
|
|
459
|
-
return "".concat(columnName, " == null");
|
|
460
|
-
case StringCondition.IS_NOT_NULL:
|
|
461
|
-
return "".concat(columnName, " != null");
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
export function getTextForDateCondition(dh, columnName, condition, value) {
|
|
465
|
-
var formattedValue = value;
|
|
466
|
-
if (typeof value === 'string') {
|
|
467
|
-
// The date time formatting may return a timezone that is not supported by the backend (e.g. 'EDT' instead of 'ET')
|
|
468
|
-
// so we need to parse the date time string and reformat it with a supported timezone ID.
|
|
469
|
-
// Note that we know this will be valid because the input value has already been validated with isDateConditionValid.
|
|
470
|
-
var _value$split = value.split(' '),
|
|
471
|
-
_value$split2 = _toArray(_value$split),
|
|
472
|
-
dateTimeString = _value$split2[0],
|
|
473
|
-
rest = _value$split2.slice(1);
|
|
474
|
-
var tzCode = rest.join(' ');
|
|
475
|
-
var tz = dh.i18n.TimeZone.getTimeZone(tzCode);
|
|
476
|
-
formattedValue = "".concat(dateTimeString, " ").concat(tz.id);
|
|
477
|
-
}
|
|
478
|
-
switch (condition) {
|
|
479
|
-
case DateCondition.IS_EXACTLY:
|
|
480
|
-
return "".concat(columnName, " == '").concat(formattedValue, "'");
|
|
481
|
-
case DateCondition.IS_NOT_EXACTLY:
|
|
482
|
-
return "".concat(columnName, " != '").concat(formattedValue, "'");
|
|
483
|
-
case DateCondition.IS_BEFORE:
|
|
484
|
-
return "".concat(columnName, " < '").concat(formattedValue, "'");
|
|
485
|
-
case DateCondition.IS_BEFORE_OR_EQUAL:
|
|
486
|
-
return "".concat(columnName, " <= '").concat(formattedValue, "'");
|
|
487
|
-
case DateCondition.IS_AFTER:
|
|
488
|
-
return "".concat(columnName, " > '").concat(formattedValue, "'");
|
|
489
|
-
case DateCondition.IS_AFTER_OR_EQUAL:
|
|
490
|
-
return "".concat(columnName, " >= '").concat(formattedValue, "'");
|
|
491
|
-
case DateCondition.IS_NULL:
|
|
492
|
-
return "".concat(columnName, " == null");
|
|
493
|
-
case DateCondition.IS_NOT_NULL:
|
|
494
|
-
return "".concat(columnName, " != null");
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
export function getTextForBooleanCondition(columnName, condition) {
|
|
530
|
+
export function getTextForBooleanCondition(columnName, condition, rightHandValue) {
|
|
531
|
+
var _formatRHV, _formatRHV2;
|
|
498
532
|
switch (condition) {
|
|
499
533
|
case BooleanCondition.IS_TRUE:
|
|
500
534
|
return "".concat(columnName, " == true");
|
|
501
535
|
case BooleanCondition.IS_FALSE:
|
|
502
536
|
return "".concat(columnName, " == false");
|
|
537
|
+
case BooleanCondition.IS_EQUAL:
|
|
538
|
+
return "".concat(columnName, " == ").concat((_formatRHV = formatRHV(rightHandValue, '')) !== null && _formatRHV !== void 0 ? _formatRHV : 'null');
|
|
539
|
+
case BooleanCondition.IS_NOT_EQUAL:
|
|
540
|
+
return "".concat(columnName, " != ").concat((_formatRHV2 = formatRHV(rightHandValue, '')) !== null && _formatRHV2 !== void 0 ? _formatRHV2 : 'null');
|
|
503
541
|
case BooleanCondition.IS_NULL:
|
|
504
542
|
return "".concat(columnName, " == null");
|
|
505
543
|
case BooleanCondition.IS_NOT_NULL:
|
|
506
544
|
return "".concat(columnName, " != null");
|
|
507
545
|
}
|
|
508
546
|
}
|
|
509
|
-
export function getTextForCharCondition(columnName, condition, value) {
|
|
510
|
-
switch (condition) {
|
|
511
|
-
case CharCondition.IS_EQUAL:
|
|
512
|
-
return "".concat(columnName, " == '").concat(value, "'");
|
|
513
|
-
case CharCondition.IS_NOT_EQUAL:
|
|
514
|
-
return "".concat(columnName, " != '").concat(value, "'");
|
|
515
|
-
case CharCondition.IS_NULL:
|
|
516
|
-
return "isNull(".concat(columnName, ")");
|
|
517
|
-
case CharCondition.IS_NOT_NULL:
|
|
518
|
-
return "!isNull(".concat(columnName, ")");
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
547
|
export function getShortLabelForConditionType(columnType, condition) {
|
|
522
548
|
if (TableUtils.isNumberType(columnType)) {
|
|
523
549
|
return getShortLabelForNumberCondition(condition);
|
|
@@ -554,42 +580,66 @@ export function getFormatColumns(dh, columns, rules) {
|
|
|
554
580
|
var rowFormatConfig;
|
|
555
581
|
var columnFormatConfigMap = new Map();
|
|
556
582
|
rules.forEach(_ref => {
|
|
557
|
-
var _ref5;
|
|
558
583
|
var config = _ref.config,
|
|
559
584
|
formatterType = _ref.type;
|
|
560
|
-
var
|
|
585
|
+
var leftHandValue = config.leftHandValue,
|
|
586
|
+
formattedColumns = config.formattedColumns;
|
|
587
|
+
var isColumnType = formatterType === FormatterType.CONDITIONAL;
|
|
588
|
+
|
|
561
589
|
// Check both name and type because the type can change
|
|
562
|
-
var
|
|
590
|
+
var conditionCol = columns.find(_ref2 => {
|
|
563
591
|
var name = _ref2.name,
|
|
564
592
|
type = _ref2.type;
|
|
565
|
-
return name ===
|
|
593
|
+
return name === leftHandValue.name && type === leftHandValue.type;
|
|
566
594
|
});
|
|
567
|
-
if (
|
|
568
|
-
log.debug("Column ".concat(
|
|
595
|
+
if (conditionCol === undefined) {
|
|
596
|
+
log.debug("Column ".concat(leftHandValue.name, ":").concat(leftHandValue.type, " not found. Ignoring format rule."), config);
|
|
569
597
|
return;
|
|
570
598
|
}
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
599
|
+
|
|
600
|
+
// For COLUMNS rules, format each column in formattedColumns.
|
|
601
|
+
// When formattedColumns is absent or empty, fall back to the condition column
|
|
602
|
+
// by using [null] to indicate that the condition column should be used as the format target.
|
|
603
|
+
var targetColConfigs = isColumnType && formattedColumns.length > 0 ? formattedColumns : [null];
|
|
604
|
+
targetColConfigs.forEach(targetColConfig => {
|
|
605
|
+
var _ref6;
|
|
606
|
+
var formatTargetCol = conditionCol;
|
|
607
|
+
if (isColumnType && targetColConfig !== null) {
|
|
608
|
+
var found = columns.find(_ref3 => {
|
|
609
|
+
var name = _ref3.name,
|
|
610
|
+
type = _ref3.type;
|
|
611
|
+
return name === targetColConfig.name && type === targetColConfig.type;
|
|
612
|
+
});
|
|
613
|
+
if (found === undefined) {
|
|
614
|
+
log.debug("Formatted column ".concat(targetColConfig.name, ":").concat(targetColConfig.type, " not found. Ignoring format rule."), config);
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
formatTargetCol = found;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
// Stack ternary format conditions by formatted column
|
|
621
|
+
var _ref4 = (_ref6 = isColumnType ? columnFormatConfigMap.get(formatTargetCol.name) : rowFormatConfig) !== null && _ref6 !== void 0 ? _ref6 : ['null', undefined],
|
|
622
|
+
_ref5 = _slicedToArray(_ref4, 2),
|
|
623
|
+
prevRule = _ref5[0],
|
|
624
|
+
prevFormatColumn = _ref5[1];
|
|
625
|
+
var rule = makeTernaryFormatRule(dh, config, prevRule);
|
|
626
|
+
if (rule === undefined) {
|
|
627
|
+
log.debug("Ignoring format rule.", config);
|
|
628
|
+
return;
|
|
629
|
+
}
|
|
630
|
+
// Replace existing formatColumn with the new stacked format
|
|
631
|
+
var index = prevFormatColumn === undefined ? -1 : result.indexOf(prevFormatColumn);
|
|
632
|
+
if (index > -1) {
|
|
633
|
+
result.splice(index, 1);
|
|
634
|
+
}
|
|
635
|
+
var formatColumn = isColumnType ? makeColumnFormatColumn(formatTargetCol, rule) : makeRowFormatColumn(dh, rule);
|
|
636
|
+
result.push(formatColumn);
|
|
637
|
+
if (isColumnType) {
|
|
638
|
+
columnFormatConfigMap.set(formatTargetCol.name, [rule, formatColumn]);
|
|
639
|
+
} else {
|
|
640
|
+
rowFormatConfig = [rule, formatColumn];
|
|
641
|
+
}
|
|
642
|
+
});
|
|
593
643
|
});
|
|
594
644
|
return result;
|
|
595
645
|
}
|
|
@@ -629,8 +679,8 @@ export function isDateConditionValid(dh, condition, value) {
|
|
|
629
679
|
}
|
|
630
680
|
}
|
|
631
681
|
}
|
|
632
|
-
export function isSupportedColumn(
|
|
633
|
-
var type =
|
|
682
|
+
export function isSupportedColumn(_ref7) {
|
|
683
|
+
var type = _ref7.type;
|
|
634
684
|
return TableUtils.isNumberType(type) || TableUtils.isCharType(type) || TableUtils.isStringType(type) || TableUtils.isDateType(type) || TableUtils.isBooleanType(type);
|
|
635
685
|
}
|
|
636
686
|
//# sourceMappingURL=ConditionalFormattingUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionalFormattingUtils.js","names":["Log","DateUtils","TableUtils","makeColumnFormatColumn","makeRowFormatColumn","makeTernaryFormatRule","log","module","FormatterType","NumberCondition","StringCondition","DateCondition","BooleanCondition","CharCondition","FormatStyleType","getLabelForStyleType","option","NO_FORMATTING","POSITIVE","NEGATIVE","WARN","NEUTRAL","ACCENT_1","ACCENT_2","CUSTOM","getBackgroundForStyleConfig","config","type","customConfig","undefined","background","getColorForStyleConfig","color","getStyleDBString","style","bg","concat","getNumberConditionText","column","value","start","end","getTextForNumberCondition","name","condition","getStringConditionText","getTextForStringCondition","getDateConditionText","dh","getTextForDateCondition","getBooleanConditionText","getTextForBooleanCondition","getCharConditionText","getTextForCharCondition","getConditionDBString","isNumberType","isCharType","isStringType","isDateType","isBooleanType","Error","getLabelForNumberCondition","IS_EQUAL","IS_NOT_EQUAL","IS_BETWEEN","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","IS_NULL","IS_NOT_NULL","getLabelForStringCondition","IS_EXACTLY","IS_NOT_EXACTLY","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","getLabelForDateCondition","IS_BEFORE","IS_BEFORE_OR_EQUAL","IS_AFTER","IS_AFTER_OR_EQUAL","getLabelForBooleanCondition","IS_TRUE","IS_FALSE","getLabelForCharCondition","getDefaultConditionForType","columnType","getDefaultValueForType","getConditionConfig","getDefaultConditionConfigForType","getDefaultStyleConfig","getShortLabelForStringCondition","getShortLabelForDateCondition","getShortLabelForBooleanCondition","getShortLabelForCharCondition","getShortLabelForNumberCondition","columnName","formattedValue","_value$split","split","_value$split2","_toArray","dateTimeString","rest","slice","tzCode","join","tz","i18n","TimeZone","getTimeZone","id","getShortLabelForConditionType","getFormatColumns","columns","rules","debug","result","rowFormatConfig","columnFormatConfigMap","Map","forEach","_ref","_ref5","formatterType","col","find","_ref2","_ref3","CONDITIONAL","get","_ref4","_slicedToArray","prevRule","prevFormatColumn","rule","index","indexOf","splice","formatColumn","push","set","isDateConditionValid","_split","_split2","parseDateTimeString","e","isSupportedColumn","_ref6"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n makeColumnFormatColumn,\n makeRowFormatColumn,\n makeTernaryFormatRule,\n} from './ConditionalFormattingAPIUtils';\nimport { type ColumnName } from '../../CommonTypes';\n\nconst log = Log.module('ConditionalFormattingUtils');\n\nexport type ModelColumn = {\n name: string;\n type: string;\n};\n\nexport type Condition =\n | NumberCondition\n | StringCondition\n | DateCondition\n | BooleanCondition\n | CharCondition;\n\nexport interface BaseFormatConfig {\n column: ModelColumn;\n condition: Condition;\n value?: string;\n start?: string;\n end?: string;\n style: FormatStyleConfig;\n}\n\nexport interface ConditionConfig {\n condition: Condition;\n value?: string;\n start?: string;\n end?: string;\n}\n\nexport type ChangeCallback = (\n ruleConfig: BaseFormatConfig,\n isValid: boolean\n) => void;\n\nexport enum FormatterType {\n CONDITIONAL = 'conditional',\n ROWS = 'rows',\n}\n\nexport interface FormattingRule {\n type: FormatterType;\n config: BaseFormatConfig;\n}\n\nexport enum NumberCondition {\n IS_EQUAL = 'is-equal',\n IS_NOT_EQUAL = 'is-not-equal',\n IS_BETWEEN = 'is-between',\n GREATER_THAN = 'greater-than',\n GREATER_THAN_OR_EQUAL = 'greater-than-or-equal',\n LESS_THAN = 'less-than',\n LESS_THAN_OR_EQUAL = 'less-than-or-equal',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum StringCondition {\n IS_EXACTLY = 'is-exactly',\n IS_NOT_EXACTLY = 'is-not-exactly',\n CONTAINS = 'contains',\n DOES_NOT_CONTAIN = 'does-not-contain',\n STARTS_WITH = 'starts-with',\n ENDS_WITH = 'ends-with',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum DateCondition {\n IS_EXACTLY = 'is-exactly',\n IS_NOT_EXACTLY = 'is-not-exactly',\n IS_BEFORE = 'is-before',\n IS_BEFORE_OR_EQUAL = 'is-before-or-equal',\n IS_AFTER = 'is-after',\n IS_AFTER_OR_EQUAL = 'is-after-or-equal',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum BooleanCondition {\n IS_TRUE = 'is-true',\n IS_FALSE = 'is-false',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum CharCondition {\n IS_EQUAL = 'is-equal',\n IS_NOT_EQUAL = 'is-not-equal',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum FormatStyleType {\n NO_FORMATTING = 'no-formatting',\n POSITIVE = 'positive',\n NEGATIVE = 'negative',\n WARN = 'warn',\n NEUTRAL = 'neutral',\n ACCENT_1 = 'accent-1',\n ACCENT_2 = 'accent-2',\n CUSTOM = 'custom',\n}\n\nexport interface FormatStyleConfig {\n type: FormatStyleType;\n customConfig?: {\n color: string;\n background: string;\n };\n}\n\nexport function getLabelForStyleType(option: FormatStyleType): string {\n switch (option) {\n case FormatStyleType.NO_FORMATTING:\n return 'No formatting';\n case FormatStyleType.POSITIVE:\n return 'Positive';\n case FormatStyleType.NEGATIVE:\n return 'Negative';\n case FormatStyleType.WARN:\n return 'Warn';\n case FormatStyleType.NEUTRAL:\n return 'Neutral';\n case FormatStyleType.ACCENT_1:\n return 'Accent 1';\n case FormatStyleType.ACCENT_2:\n return 'Accent 2';\n case FormatStyleType.CUSTOM:\n return 'Custom...';\n }\n}\n\nexport function getBackgroundForStyleConfig(\n config: FormatStyleConfig\n): string | undefined {\n const { type, customConfig } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#9fde6f';\n case FormatStyleType.NEGATIVE:\n return '#ff6087';\n case FormatStyleType.WARN:\n return '#f67f40';\n case FormatStyleType.NEUTRAL:\n return '#ffd95c';\n case FormatStyleType.ACCENT_1:\n return '#78dce8';\n case FormatStyleType.ACCENT_2:\n return '#ab9bf5';\n case FormatStyleType.CUSTOM:\n return customConfig?.background;\n default:\n return undefined;\n }\n}\n\nexport function getColorForStyleConfig(\n config: FormatStyleConfig\n): string | undefined {\n const { type, customConfig } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#526a3f';\n case FormatStyleType.NEGATIVE:\n return '#802f44';\n case FormatStyleType.WARN:\n return '#663318';\n case FormatStyleType.NEUTRAL:\n return '#63562b';\n case FormatStyleType.ACCENT_1:\n return '#3f6469';\n case FormatStyleType.ACCENT_2:\n return '#554d72';\n case FormatStyleType.CUSTOM:\n return customConfig?.color;\n default:\n return undefined;\n }\n}\n\nexport function getStyleDBString(config: BaseFormatConfig): string | undefined {\n const color = getColorForStyleConfig(config.style);\n const bg = getBackgroundForStyleConfig(config.style);\n if (color === undefined || bg === undefined) {\n return undefined;\n }\n return `bgfg(\\`${bg}\\`, \\`${color}\\`)`;\n}\n\nfunction getNumberConditionText(config: BaseFormatConfig): string {\n const { column, value, start, end } = config;\n return getTextForNumberCondition(\n column.name,\n config.condition as NumberCondition,\n value,\n start,\n end\n );\n}\n\nfunction getStringConditionText(config: BaseFormatConfig): string {\n const { column, value } = config;\n return getTextForStringCondition(\n column.name,\n config.condition as StringCondition,\n value\n );\n}\n\nfunction getDateConditionText(\n dh: typeof DhType,\n config: BaseFormatConfig\n): string {\n const { column, value } = config;\n return getTextForDateCondition(\n dh,\n column.name,\n config.condition as DateCondition,\n value\n );\n}\n\nfunction getBooleanConditionText(config: BaseFormatConfig): string {\n const { column } = config;\n return getTextForBooleanCondition(\n column.name,\n config.condition as BooleanCondition\n );\n}\n\nfunction getCharConditionText(config: BaseFormatConfig): string {\n const { column, value } = config;\n return getTextForCharCondition(\n column.name,\n config.condition as CharCondition,\n value\n );\n}\n\nexport function getConditionDBString(\n dh: typeof DhType,\n config: BaseFormatConfig\n): string {\n const { column } = config;\n\n if (TableUtils.isNumberType(column.type)) {\n return getNumberConditionText(config);\n }\n if (TableUtils.isCharType(column.type)) {\n return getCharConditionText(config);\n }\n if (TableUtils.isStringType(column.type)) {\n return getStringConditionText(config);\n }\n if (TableUtils.isDateType(column.type)) {\n return getDateConditionText(dh, config);\n }\n if (TableUtils.isBooleanType(column.type)) {\n return getBooleanConditionText(config);\n }\n\n throw new Error('Invalid column type');\n}\n\nexport function getLabelForNumberCondition(condition: NumberCondition): string {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return 'is equal to';\n case NumberCondition.IS_NOT_EQUAL:\n return 'is not equal to';\n case NumberCondition.IS_BETWEEN:\n return 'is between';\n case NumberCondition.GREATER_THAN:\n return 'greater than';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return 'greater than or equal to';\n case NumberCondition.LESS_THAN:\n return 'less than';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return 'less than or equal to';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getLabelForStringCondition(condition: StringCondition): string {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return 'is exactly';\n case StringCondition.IS_NOT_EXACTLY:\n return 'is not exactly';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getLabelForDateCondition(condition: DateCondition): string {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return 'is';\n case DateCondition.IS_NOT_EXACTLY:\n return 'is not';\n case DateCondition.IS_BEFORE:\n return 'is before';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return 'is before or equal';\n case DateCondition.IS_AFTER:\n return 'is after';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return 'is after or equal';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getLabelForBooleanCondition(\n condition: BooleanCondition\n): string {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getLabelForCharCondition(condition: CharCondition): string {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return 'is';\n case CharCondition.IS_NOT_EQUAL:\n return 'is not';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getDefaultConditionForType(columnType: string): Condition {\n if (TableUtils.isNumberType(columnType)) {\n return NumberCondition.IS_EQUAL;\n }\n if (TableUtils.isCharType(columnType)) {\n return CharCondition.IS_EQUAL;\n }\n if (TableUtils.isStringType(columnType)) {\n return StringCondition.IS_EXACTLY;\n }\n if (TableUtils.isDateType(columnType)) {\n return DateCondition.IS_EXACTLY;\n }\n if (TableUtils.isBooleanType(columnType)) {\n return BooleanCondition.IS_TRUE;\n }\n\n throw new Error('Invalid column type');\n}\n\nexport function getDefaultValueForType(columnType: string): string | undefined {\n if (TableUtils.isCharType(columnType)) {\n return '';\n }\n if (TableUtils.isStringType(columnType)) {\n return '';\n }\n return undefined;\n}\n\nexport function getConditionConfig(config: BaseFormatConfig): ConditionConfig {\n const { condition, value, start, end } = config;\n return { condition, value, start, end };\n}\n\nexport function getDefaultConditionConfigForType(\n type: string\n): ConditionConfig {\n return {\n condition: getDefaultConditionForType(type),\n value: getDefaultValueForType(type),\n start: undefined,\n end: undefined,\n };\n}\n\nexport function getDefaultStyleConfig(): FormatStyleConfig {\n return {\n type: FormatStyleType.NO_FORMATTING,\n };\n}\n\nfunction getShortLabelForStringCondition(condition: StringCondition): string {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return '==';\n case StringCondition.IS_NOT_EXACTLY:\n return '!=';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nfunction getShortLabelForDateCondition(condition: DateCondition): string {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return '==';\n case DateCondition.IS_NOT_EXACTLY:\n return '!=';\n case DateCondition.IS_BEFORE:\n return '<';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return '<=';\n case DateCondition.IS_AFTER:\n return '>';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return '>=';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nfunction getShortLabelForBooleanCondition(condition: BooleanCondition): string {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nfunction getShortLabelForCharCondition(condition: CharCondition): string {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return '==';\n case CharCondition.IS_NOT_EQUAL:\n return '!=';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getShortLabelForNumberCondition(\n condition: NumberCondition\n): string {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return '==';\n case NumberCondition.IS_NOT_EQUAL:\n return '!=';\n case NumberCondition.IS_BETWEEN:\n return '==';\n case NumberCondition.GREATER_THAN:\n return '>';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return '>=';\n case NumberCondition.LESS_THAN:\n return '<';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return '<=';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getTextForNumberCondition(\n columnName: ColumnName,\n condition: NumberCondition,\n value: unknown,\n start: unknown,\n end: unknown\n): string {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return `${columnName} == ${value}`;\n case NumberCondition.IS_NOT_EQUAL:\n return `${columnName} != ${value}`;\n case NumberCondition.IS_BETWEEN:\n return `${columnName} > ${start} && ${columnName} < ${end}`;\n case NumberCondition.GREATER_THAN:\n return `${columnName} > ${value}`;\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return `${columnName} >= ${value}`;\n case NumberCondition.LESS_THAN:\n return `${columnName} < ${value}`;\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return `${columnName} <= ${value}`;\n case NumberCondition.IS_NULL:\n return `${columnName} == null`;\n case NumberCondition.IS_NOT_NULL:\n return `${columnName} != null`;\n }\n}\n\nexport function getTextForStringCondition(\n columnName: ColumnName,\n condition: StringCondition,\n value: unknown\n): string {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return `${columnName} == \"${value}\"`;\n case StringCondition.IS_NOT_EXACTLY:\n return `${columnName} != \"${value}\"`;\n case StringCondition.CONTAINS:\n return `${columnName} != null && ${columnName}.contains(\"${value}\")`;\n case StringCondition.DOES_NOT_CONTAIN:\n return `${columnName} != null && !${columnName}.contains(\"${value}\")`;\n case StringCondition.STARTS_WITH:\n return `${columnName} != null && ${columnName}.startsWith(\"${value}\")`;\n case StringCondition.ENDS_WITH:\n return `${columnName} != null && ${columnName}.endsWith(\"${value}\")`;\n case StringCondition.IS_NULL:\n return `${columnName} == null`;\n case StringCondition.IS_NOT_NULL:\n return `${columnName} != null`;\n }\n}\n\nexport function getTextForDateCondition(\n dh: typeof DhType,\n columnName: ColumnName,\n condition: DateCondition,\n value: unknown\n): string {\n let formattedValue = value;\n if (typeof value === 'string') {\n // The date time formatting may return a timezone that is not supported by the backend (e.g. 'EDT' instead of 'ET')\n // so we need to parse the date time string and reformat it with a supported timezone ID.\n // Note that we know this will be valid because the input value has already been validated with isDateConditionValid.\n const [dateTimeString, ...rest] = value.split(' ');\n const tzCode = rest.join(' ');\n const tz = dh.i18n.TimeZone.getTimeZone(tzCode);\n formattedValue = `${dateTimeString} ${tz.id}`;\n }\n\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return `${columnName} == '${formattedValue}'`;\n case DateCondition.IS_NOT_EXACTLY:\n return `${columnName} != '${formattedValue}'`;\n case DateCondition.IS_BEFORE:\n return `${columnName} < '${formattedValue}'`;\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return `${columnName} <= '${formattedValue}'`;\n case DateCondition.IS_AFTER:\n return `${columnName} > '${formattedValue}'`;\n case DateCondition.IS_AFTER_OR_EQUAL:\n return `${columnName} >= '${formattedValue}'`;\n case DateCondition.IS_NULL:\n return `${columnName} == null`;\n case DateCondition.IS_NOT_NULL:\n return `${columnName} != null`;\n }\n}\n\nexport function getTextForBooleanCondition(\n columnName: ColumnName,\n condition: BooleanCondition\n): string {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return `${columnName} == true`;\n case BooleanCondition.IS_FALSE:\n return `${columnName} == false`;\n case BooleanCondition.IS_NULL:\n return `${columnName} == null`;\n case BooleanCondition.IS_NOT_NULL:\n return `${columnName} != null`;\n }\n}\n\nexport function getTextForCharCondition(\n columnName: ColumnName,\n condition: CharCondition,\n value: unknown\n): string {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return `${columnName} == '${value}'`;\n case CharCondition.IS_NOT_EQUAL:\n return `${columnName} != '${value}'`;\n case CharCondition.IS_NULL:\n return `isNull(${columnName})`;\n case CharCondition.IS_NOT_NULL:\n return `!isNull(${columnName})`;\n }\n}\n\nexport function getShortLabelForConditionType(\n columnType: string,\n condition: Condition\n): string {\n if (TableUtils.isNumberType(columnType)) {\n return getShortLabelForNumberCondition(condition as NumberCondition);\n }\n if (TableUtils.isCharType(columnType)) {\n return getShortLabelForCharCondition(condition as CharCondition);\n }\n if (TableUtils.isStringType(columnType)) {\n return getShortLabelForStringCondition(condition as StringCondition);\n }\n if (TableUtils.isDateType(columnType)) {\n return getShortLabelForDateCondition(condition as DateCondition);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getShortLabelForBooleanCondition(condition as BooleanCondition);\n }\n\n throw new Error('Invalid column type');\n}\n\n/**\n * Get format columns array for the given columns and formatting rules\n * @param columns Available columns\n * @param rules Formatting rules to build the format columns from\n * @returns Array of format columns\n */\nexport function getFormatColumns(\n dh: typeof DhType,\n columns: readonly DhType.Column[],\n rules: readonly FormattingRule[]\n): DhType.CustomColumn[] {\n if (rules === undefined) {\n log.debug(`no rules passed.`);\n return [];\n }\n const result: DhType.CustomColumn[] = [];\n // There can be only one row format custom column\n // and multiple column format custom columns (one per column)\n let rowFormatConfig: [string, DhType.CustomColumn];\n const columnFormatConfigMap = new Map<\n string,\n [string, DhType.CustomColumn]\n >();\n rules.forEach(({ config, type: formatterType }) => {\n const { column } = config;\n // Check both name and type because the type can change\n const col = columns.find(\n ({ name, type }) => name === column.name && type === column.type\n );\n if (col === undefined) {\n log.debug(\n `Column ${column.name}:${column.type} not found. Ignoring format rule.`,\n config\n );\n return;\n }\n // Stack ternary format conditions by column\n const [prevRule, prevFormatColumn] = (formatterType ===\n FormatterType.CONDITIONAL\n ? columnFormatConfigMap.get(col.name)\n : rowFormatConfig) ?? ['null', undefined];\n const rule = makeTernaryFormatRule(dh, config, prevRule);\n if (rule === undefined) {\n log.debug(`Ignoring format rule.`, config);\n return;\n }\n // Replace existing formatColumn with the new stacked format\n const index =\n prevFormatColumn === undefined ? -1 : result.indexOf(prevFormatColumn);\n if (index > -1) {\n result.splice(index, 1);\n }\n const formatColumn =\n formatterType === FormatterType.CONDITIONAL\n ? makeColumnFormatColumn(col, rule)\n : makeRowFormatColumn(dh, rule);\n result.push(formatColumn);\n if (formatterType === FormatterType.CONDITIONAL) {\n columnFormatConfigMap.set(col.name, [rule, formatColumn]);\n } else {\n rowFormatConfig = [rule, formatColumn];\n }\n });\n\n return result;\n}\n\n/**\n * Validate that a given date condition + value pair is valid.\n * @param condition\n * @param value\n */\nexport function isDateConditionValid(\n dh: typeof DhType,\n condition: DateCondition,\n value?: string\n): boolean {\n switch (condition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return true;\n\n default: {\n const [dateTimeString, ...rest] = (value ?? '').split(' ');\n // Reconstitute all tokens after the first ' ' in case the user included garbage data at the end\n // e.g. '2020-01-01 NY blah'\n const tzCode = rest.join(' ');\n\n try {\n DateUtils.parseDateTimeString(dateTimeString);\n } catch (e) {\n log.debug('Invalid datetime string', dateTimeString);\n return false;\n }\n\n try {\n dh.i18n.TimeZone.getTimeZone(tzCode);\n } catch (e) {\n log.debug('Invalid timezone string', tzCode);\n return false;\n }\n\n return true;\n }\n }\n}\n\nexport function isSupportedColumn({ type }: ModelColumn): boolean {\n return (\n TableUtils.isNumberType(type) ||\n TableUtils.isCharType(type) ||\n TableUtils.isStringType(type) ||\n TableUtils.isDateType(type) ||\n TableUtils.isBooleanType(type)\n );\n}\n"],"mappings":";;;;;;;;AAAA,OAAOA,GAAG,MAAM,gBAAgB;AAEhC,SAASC,SAAS,EAAEC,UAAU,QAAQ,wBAAwB;AAAC,SAE7DC,sBAAsB,EACtBC,mBAAmB,EACnBC,qBAAqB;AAIvB,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAM,CAAC,4BAA4B,CAAC;AAmCpD,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAUzB,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAY3B,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAW3B,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAWzB,WAAYC,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;AAO5B,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAOzB,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAmB3B,OAAO,SAASC,oBAAoBA,CAACC,MAAuB,EAAU;EACpE,QAAQA,MAAM;IACZ,KAAKF,eAAe,CAACG,aAAa;MAChC,OAAO,eAAe;IACxB,KAAKH,eAAe,CAACI,QAAQ;MAC3B,OAAO,UAAU;IACnB,KAAKJ,eAAe,CAACK,QAAQ;MAC3B,OAAO,UAAU;IACnB,KAAKL,eAAe,CAACM,IAAI;MACvB,OAAO,MAAM;IACf,KAAKN,eAAe,CAACO,OAAO;MAC1B,OAAO,SAAS;IAClB,KAAKP,eAAe,CAACQ,QAAQ;MAC3B,OAAO,UAAU;IACnB,KAAKR,eAAe,CAACS,QAAQ;MAC3B,OAAO,UAAU;IACnB,KAAKT,eAAe,CAACU,MAAM;MACzB,OAAO,WAAW;EACtB;AACF;AAEA,OAAO,SAASC,2BAA2BA,CACzCC,MAAyB,EACL;EACpB,IAAQC,IAAI,GAAmBD,MAAM,CAA7BC,IAAI;IAAEC,YAAY,GAAKF,MAAM,CAAvBE,YAAY;EAC1B,QAAQD,IAAI;IACV,KAAKb,eAAe,CAACG,aAAa;MAChC,OAAOY,SAAS;IAClB,KAAKf,eAAe,CAACI,QAAQ;MAC3B,OAAO,SAAS;IAClB,KAAKJ,eAAe,CAACK,QAAQ;MAC3B,OAAO,SAAS;IAClB,KAAKL,eAAe,CAACM,IAAI;MACvB,OAAO,SAAS;IAClB,KAAKN,eAAe,CAACO,OAAO;MAC1B,OAAO,SAAS;IAClB,KAAKP,eAAe,CAACQ,QAAQ;MAC3B,OAAO,SAAS;IAClB,KAAKR,eAAe,CAACS,QAAQ;MAC3B,OAAO,SAAS;IAClB,KAAKT,eAAe,CAACU,MAAM;MACzB,OAAOI,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEE,UAAU;IACjC;MACE,OAAOD,SAAS;EACpB;AACF;AAEA,OAAO,SAASE,sBAAsBA,CACpCL,MAAyB,EACL;EACpB,IAAQC,IAAI,GAAmBD,MAAM,CAA7BC,IAAI;IAAEC,YAAY,GAAKF,MAAM,CAAvBE,YAAY;EAC1B,QAAQD,IAAI;IACV,KAAKb,eAAe,CAACG,aAAa;MAChC,OAAOY,SAAS;IAClB,KAAKf,eAAe,CAACI,QAAQ;MAC3B,OAAO,SAAS;IAClB,KAAKJ,eAAe,CAACK,QAAQ;MAC3B,OAAO,SAAS;IAClB,KAAKL,eAAe,CAACM,IAAI;MACvB,OAAO,SAAS;IAClB,KAAKN,eAAe,CAACO,OAAO;MAC1B,OAAO,SAAS;IAClB,KAAKP,eAAe,CAACQ,QAAQ;MAC3B,OAAO,SAAS;IAClB,KAAKR,eAAe,CAACS,QAAQ;MAC3B,OAAO,SAAS;IAClB,KAAKT,eAAe,CAACU,MAAM;MACzB,OAAOI,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEI,KAAK;IAC5B;MACE,OAAOH,SAAS;EACpB;AACF;AAEA,OAAO,SAASI,gBAAgBA,CAACP,MAAwB,EAAsB;EAC7E,IAAMM,KAAK,GAAGD,sBAAsB,CAACL,MAAM,CAACQ,KAAK,CAAC;EAClD,IAAMC,EAAE,GAAGV,2BAA2B,CAACC,MAAM,CAACQ,KAAK,CAAC;EACpD,IAAIF,KAAK,KAAKH,SAAS,IAAIM,EAAE,KAAKN,SAAS,EAAE;IAC3C,OAAOA,SAAS;EAClB;EACA,gBAAAO,MAAA,CAAiBD,EAAE,UAAAC,MAAA,CAASJ,KAAK;AACnC;AAEA,SAASK,sBAAsBA,CAACX,MAAwB,EAAU;EAChE,IAAQY,MAAM,GAAwBZ,MAAM,CAApCY,MAAM;IAAEC,KAAK,GAAiBb,MAAM,CAA5Ba,KAAK;IAAEC,KAAK,GAAUd,MAAM,CAArBc,KAAK;IAAEC,GAAG,GAAKf,MAAM,CAAde,GAAG;EACjC,OAAOC,yBAAyB,CAC9BJ,MAAM,CAACK,IAAI,EACXjB,MAAM,CAACkB,SAAS,EAChBL,KAAK,EACLC,KAAK,EACLC,GACF,CAAC;AACH;AAEA,SAASI,sBAAsBA,CAACnB,MAAwB,EAAU;EAChE,IAAQY,MAAM,GAAYZ,MAAM,CAAxBY,MAAM;IAAEC,KAAK,GAAKb,MAAM,CAAhBa,KAAK;EACrB,OAAOO,yBAAyB,CAC9BR,MAAM,CAACK,IAAI,EACXjB,MAAM,CAACkB,SAAS,EAChBL,KACF,CAAC;AACH;AAEA,SAASQ,oBAAoBA,CAC3BC,EAAiB,EACjBtB,MAAwB,EAChB;EACR,IAAQY,MAAM,GAAYZ,MAAM,CAAxBY,MAAM;IAAEC,KAAK,GAAKb,MAAM,CAAhBa,KAAK;EACrB,OAAOU,uBAAuB,CAC5BD,EAAE,EACFV,MAAM,CAACK,IAAI,EACXjB,MAAM,CAACkB,SAAS,EAChBL,KACF,CAAC;AACH;AAEA,SAASW,uBAAuBA,CAACxB,MAAwB,EAAU;EACjE,IAAQY,MAAM,GAAKZ,MAAM,CAAjBY,MAAM;EACd,OAAOa,0BAA0B,CAC/Bb,MAAM,CAACK,IAAI,EACXjB,MAAM,CAACkB,SACT,CAAC;AACH;AAEA,SAASQ,oBAAoBA,CAAC1B,MAAwB,EAAU;EAC9D,IAAQY,MAAM,GAAYZ,MAAM,CAAxBY,MAAM;IAAEC,KAAK,GAAKb,MAAM,CAAhBa,KAAK;EACrB,OAAOc,uBAAuB,CAC5Bf,MAAM,CAACK,IAAI,EACXjB,MAAM,CAACkB,SAAS,EAChBL,KACF,CAAC;AACH;AAEA,OAAO,SAASe,oBAAoBA,CAClCN,EAAiB,EACjBtB,MAAwB,EAChB;EACR,IAAQY,MAAM,GAAKZ,MAAM,CAAjBY,MAAM;EAEd,IAAIpC,UAAU,CAACqD,YAAY,CAACjB,MAAM,CAACX,IAAI,CAAC,EAAE;IACxC,OAAOU,sBAAsB,CAACX,MAAM,CAAC;EACvC;EACA,IAAIxB,UAAU,CAACsD,UAAU,CAAClB,MAAM,CAACX,IAAI,CAAC,EAAE;IACtC,OAAOyB,oBAAoB,CAAC1B,MAAM,CAAC;EACrC;EACA,IAAIxB,UAAU,CAACuD,YAAY,CAACnB,MAAM,CAACX,IAAI,CAAC,EAAE;IACxC,OAAOkB,sBAAsB,CAACnB,MAAM,CAAC;EACvC;EACA,IAAIxB,UAAU,CAACwD,UAAU,CAACpB,MAAM,CAACX,IAAI,CAAC,EAAE;IACtC,OAAOoB,oBAAoB,CAACC,EAAE,EAAEtB,MAAM,CAAC;EACzC;EACA,IAAIxB,UAAU,CAACyD,aAAa,CAACrB,MAAM,CAACX,IAAI,CAAC,EAAE;IACzC,OAAOuB,uBAAuB,CAACxB,MAAM,CAAC;EACxC;EAEA,MAAM,IAAIkC,KAAK,CAAC,qBAAqB,CAAC;AACxC;AAEA,OAAO,SAASC,0BAA0BA,CAACjB,SAA0B,EAAU;EAC7E,QAAQA,SAAS;IACf,KAAKnC,eAAe,CAACqD,QAAQ;MAC3B,OAAO,aAAa;IACtB,KAAKrD,eAAe,CAACsD,YAAY;MAC/B,OAAO,iBAAiB;IAC1B,KAAKtD,eAAe,CAACuD,UAAU;MAC7B,OAAO,YAAY;IACrB,KAAKvD,eAAe,CAACwD,YAAY;MAC/B,OAAO,cAAc;IACvB,KAAKxD,eAAe,CAACyD,qBAAqB;MACxC,OAAO,0BAA0B;IACnC,KAAKzD,eAAe,CAAC0D,SAAS;MAC5B,OAAO,WAAW;IACpB,KAAK1D,eAAe,CAAC2D,kBAAkB;MACrC,OAAO,uBAAuB;IAChC,KAAK3D,eAAe,CAAC4D,OAAO;MAC1B,OAAO,SAAS;IAClB,KAAK5D,eAAe,CAAC6D,WAAW;MAC9B,OAAO,aAAa;EACxB;AACF;AAEA,OAAO,SAASC,0BAA0BA,CAAC3B,SAA0B,EAAU;EAC7E,QAAQA,SAAS;IACf,KAAKlC,eAAe,CAAC8D,UAAU;MAC7B,OAAO,YAAY;IACrB,KAAK9D,eAAe,CAAC+D,cAAc;MACjC,OAAO,gBAAgB;IACzB,KAAK/D,eAAe,CAACgE,QAAQ;MAC3B,OAAO,UAAU;IACnB,KAAKhE,eAAe,CAACiE,gBAAgB;MACnC,OAAO,kBAAkB;IAC3B,KAAKjE,eAAe,CAACkE,WAAW;MAC9B,OAAO,aAAa;IACtB,KAAKlE,eAAe,CAACmE,SAAS;MAC5B,OAAO,WAAW;IACpB,KAAKnE,eAAe,CAAC2D,OAAO;MAC1B,OAAO,SAAS;IAClB,KAAK3D,eAAe,CAAC4D,WAAW;MAC9B,OAAO,aAAa;EACxB;AACF;AAEA,OAAO,SAASQ,wBAAwBA,CAAClC,SAAwB,EAAU;EACzE,QAAQA,SAAS;IACf,KAAKjC,aAAa,CAAC6D,UAAU;MAC3B,OAAO,IAAI;IACb,KAAK7D,aAAa,CAAC8D,cAAc;MAC/B,OAAO,QAAQ;IACjB,KAAK9D,aAAa,CAACoE,SAAS;MAC1B,OAAO,WAAW;IACpB,KAAKpE,aAAa,CAACqE,kBAAkB;MACnC,OAAO,oBAAoB;IAC7B,KAAKrE,aAAa,CAACsE,QAAQ;MACzB,OAAO,UAAU;IACnB,KAAKtE,aAAa,CAACuE,iBAAiB;MAClC,OAAO,mBAAmB;IAC5B,KAAKvE,aAAa,CAAC0D,OAAO;MACxB,OAAO,SAAS;IAClB,KAAK1D,aAAa,CAAC2D,WAAW;MAC5B,OAAO,aAAa;EACxB;AACF;AAEA,OAAO,SAASa,2BAA2BA,CACzCvC,SAA2B,EACnB;EACR,QAAQA,SAAS;IACf,KAAKhC,gBAAgB,CAACwE,OAAO;MAC3B,OAAO,SAAS;IAClB,KAAKxE,gBAAgB,CAACyE,QAAQ;MAC5B,OAAO,UAAU;IACnB,KAAKzE,gBAAgB,CAACyD,OAAO;MAC3B,OAAO,SAAS;IAClB,KAAKzD,gBAAgB,CAAC0D,WAAW;MAC/B,OAAO,aAAa;EACxB;AACF;AAEA,OAAO,SAASgB,wBAAwBA,CAAC1C,SAAwB,EAAU;EACzE,QAAQA,SAAS;IACf,KAAK/B,aAAa,CAACiD,QAAQ;MACzB,OAAO,IAAI;IACb,KAAKjD,aAAa,CAACkD,YAAY;MAC7B,OAAO,QAAQ;IACjB,KAAKlD,aAAa,CAACwD,OAAO;MACxB,OAAO,SAAS;IAClB,KAAKxD,aAAa,CAACyD,WAAW;MAC5B,OAAO,aAAa;EACxB;AACF;AAEA,OAAO,SAASiB,0BAA0BA,CAACC,UAAkB,EAAa;EACxE,IAAItF,UAAU,CAACqD,YAAY,CAACiC,UAAU,CAAC,EAAE;IACvC,OAAO/E,eAAe,CAACqD,QAAQ;EACjC;EACA,IAAI5D,UAAU,CAACsD,UAAU,CAACgC,UAAU,CAAC,EAAE;IACrC,OAAO3E,aAAa,CAACiD,QAAQ;EAC/B;EACA,IAAI5D,UAAU,CAACuD,YAAY,CAAC+B,UAAU,CAAC,EAAE;IACvC,OAAO9E,eAAe,CAAC8D,UAAU;EACnC;EACA,IAAItE,UAAU,CAACwD,UAAU,CAAC8B,UAAU,CAAC,EAAE;IACrC,OAAO7E,aAAa,CAAC6D,UAAU;EACjC;EACA,IAAItE,UAAU,CAACyD,aAAa,CAAC6B,UAAU,CAAC,EAAE;IACxC,OAAO5E,gBAAgB,CAACwE,OAAO;EACjC;EAEA,MAAM,IAAIxB,KAAK,CAAC,qBAAqB,CAAC;AACxC;AAEA,OAAO,SAAS6B,sBAAsBA,CAACD,UAAkB,EAAsB;EAC7E,IAAItF,UAAU,CAACsD,UAAU,CAACgC,UAAU,CAAC,EAAE;IACrC,OAAO,EAAE;EACX;EACA,IAAItF,UAAU,CAACuD,YAAY,CAAC+B,UAAU,CAAC,EAAE;IACvC,OAAO,EAAE;EACX;EACA,OAAO3D,SAAS;AAClB;AAEA,OAAO,SAAS6D,kBAAkBA,CAAChE,MAAwB,EAAmB;EAC5E,IAAQkB,SAAS,GAAwBlB,MAAM,CAAvCkB,SAAS;IAAEL,KAAK,GAAiBb,MAAM,CAA5Ba,KAAK;IAAEC,KAAK,GAAUd,MAAM,CAArBc,KAAK;IAAEC,GAAG,GAAKf,MAAM,CAAde,GAAG;EACpC,OAAO;IAAEG,SAAS;IAAEL,KAAK;IAAEC,KAAK;IAAEC;EAAI,CAAC;AACzC;AAEA,OAAO,SAASkD,gCAAgCA,CAC9ChE,IAAY,EACK;EACjB,OAAO;IACLiB,SAAS,EAAE2C,0BAA0B,CAAC5D,IAAI,CAAC;IAC3CY,KAAK,EAAEkD,sBAAsB,CAAC9D,IAAI,CAAC;IACnCa,KAAK,EAAEX,SAAS;IAChBY,GAAG,EAAEZ;EACP,CAAC;AACH;AAEA,OAAO,SAAS+D,qBAAqBA,CAAA,EAAsB;EACzD,OAAO;IACLjE,IAAI,EAAEb,eAAe,CAACG;EACxB,CAAC;AACH;AAEA,SAAS4E,+BAA+BA,CAACjD,SAA0B,EAAU;EAC3E,QAAQA,SAAS;IACf,KAAKlC,eAAe,CAAC8D,UAAU;MAC7B,OAAO,IAAI;IACb,KAAK9D,eAAe,CAAC+D,cAAc;MACjC,OAAO,IAAI;IACb,KAAK/D,eAAe,CAACgE,QAAQ;MAC3B,OAAO,UAAU;IACnB,KAAKhE,eAAe,CAACiE,gBAAgB;MACnC,OAAO,kBAAkB;IAC3B,KAAKjE,eAAe,CAACkE,WAAW;MAC9B,OAAO,aAAa;IACtB,KAAKlE,eAAe,CAACmE,SAAS;MAC5B,OAAO,WAAW;IACpB,KAAKnE,eAAe,CAAC2D,OAAO;MAC1B,OAAO,SAAS;IAClB,KAAK3D,eAAe,CAAC4D,WAAW;MAC9B,OAAO,aAAa;EACxB;AACF;AAEA,SAASwB,6BAA6BA,CAAClD,SAAwB,EAAU;EACvE,QAAQA,SAAS;IACf,KAAKjC,aAAa,CAAC6D,UAAU;MAC3B,OAAO,IAAI;IACb,KAAK7D,aAAa,CAAC8D,cAAc;MAC/B,OAAO,IAAI;IACb,KAAK9D,aAAa,CAACoE,SAAS;MAC1B,OAAO,GAAG;IACZ,KAAKpE,aAAa,CAACqE,kBAAkB;MACnC,OAAO,IAAI;IACb,KAAKrE,aAAa,CAACsE,QAAQ;MACzB,OAAO,GAAG;IACZ,KAAKtE,aAAa,CAACuE,iBAAiB;MAClC,OAAO,IAAI;IACb,KAAKvE,aAAa,CAAC0D,OAAO;MACxB,OAAO,SAAS;IAClB,KAAK1D,aAAa,CAAC2D,WAAW;MAC5B,OAAO,aAAa;EACxB;AACF;AAEA,SAASyB,gCAAgCA,CAACnD,SAA2B,EAAU;EAC7E,QAAQA,SAAS;IACf,KAAKhC,gBAAgB,CAACwE,OAAO;MAC3B,OAAO,SAAS;IAClB,KAAKxE,gBAAgB,CAACyE,QAAQ;MAC5B,OAAO,UAAU;IACnB,KAAKzE,gBAAgB,CAACyD,OAAO;MAC3B,OAAO,SAAS;IAClB,KAAKzD,gBAAgB,CAAC0D,WAAW;MAC/B,OAAO,aAAa;EACxB;AACF;AAEA,SAAS0B,6BAA6BA,CAACpD,SAAwB,EAAU;EACvE,QAAQA,SAAS;IACf,KAAK/B,aAAa,CAACiD,QAAQ;MACzB,OAAO,IAAI;IACb,KAAKjD,aAAa,CAACkD,YAAY;MAC7B,OAAO,IAAI;IACb,KAAKlD,aAAa,CAACwD,OAAO;MACxB,OAAO,SAAS;IAClB,KAAKxD,aAAa,CAACyD,WAAW;MAC5B,OAAO,aAAa;EACxB;AACF;AAEA,OAAO,SAAS2B,+BAA+BA,CAC7CrD,SAA0B,EAClB;EACR,QAAQA,SAAS;IACf,KAAKnC,eAAe,CAACqD,QAAQ;MAC3B,OAAO,IAAI;IACb,KAAKrD,eAAe,CAACsD,YAAY;MAC/B,OAAO,IAAI;IACb,KAAKtD,eAAe,CAACuD,UAAU;MAC7B,OAAO,IAAI;IACb,KAAKvD,eAAe,CAACwD,YAAY;MAC/B,OAAO,GAAG;IACZ,KAAKxD,eAAe,CAACyD,qBAAqB;MACxC,OAAO,IAAI;IACb,KAAKzD,eAAe,CAAC0D,SAAS;MAC5B,OAAO,GAAG;IACZ,KAAK1D,eAAe,CAAC2D,kBAAkB;MACrC,OAAO,IAAI;IACb,KAAK3D,eAAe,CAAC4D,OAAO;MAC1B,OAAO,SAAS;IAClB,KAAK5D,eAAe,CAAC6D,WAAW;MAC9B,OAAO,aAAa;EACxB;AACF;AAEA,OAAO,SAAS5B,yBAAyBA,CACvCwD,UAAsB,EACtBtD,SAA0B,EAC1BL,KAAc,EACdC,KAAc,EACdC,GAAY,EACJ;EACR,QAAQG,SAAS;IACf,KAAKnC,eAAe,CAACqD,QAAQ;MAC3B,UAAA1B,MAAA,CAAU8D,UAAU,UAAA9D,MAAA,CAAOG,KAAK;IAClC,KAAK9B,eAAe,CAACsD,YAAY;MAC/B,UAAA3B,MAAA,CAAU8D,UAAU,UAAA9D,MAAA,CAAOG,KAAK;IAClC,KAAK9B,eAAe,CAACuD,UAAU;MAC7B,UAAA5B,MAAA,CAAU8D,UAAU,SAAA9D,MAAA,CAAMI,KAAK,UAAAJ,MAAA,CAAO8D,UAAU,SAAA9D,MAAA,CAAMK,GAAG;IAC3D,KAAKhC,eAAe,CAACwD,YAAY;MAC/B,UAAA7B,MAAA,CAAU8D,UAAU,SAAA9D,MAAA,CAAMG,KAAK;IACjC,KAAK9B,eAAe,CAACyD,qBAAqB;MACxC,UAAA9B,MAAA,CAAU8D,UAAU,UAAA9D,MAAA,CAAOG,KAAK;IAClC,KAAK9B,eAAe,CAAC0D,SAAS;MAC5B,UAAA/B,MAAA,CAAU8D,UAAU,SAAA9D,MAAA,CAAMG,KAAK;IACjC,KAAK9B,eAAe,CAAC2D,kBAAkB;MACrC,UAAAhC,MAAA,CAAU8D,UAAU,UAAA9D,MAAA,CAAOG,KAAK;IAClC,KAAK9B,eAAe,CAAC4D,OAAO;MAC1B,UAAAjC,MAAA,CAAU8D,UAAU;IACtB,KAAKzF,eAAe,CAAC6D,WAAW;MAC9B,UAAAlC,MAAA,CAAU8D,UAAU;EACxB;AACF;AAEA,OAAO,SAASpD,yBAAyBA,CACvCoD,UAAsB,EACtBtD,SAA0B,EAC1BL,KAAc,EACN;EACR,QAAQK,SAAS;IACf,KAAKlC,eAAe,CAAC8D,UAAU;MAC7B,UAAApC,MAAA,CAAU8D,UAAU,YAAA9D,MAAA,CAAQG,KAAK;IACnC,KAAK7B,eAAe,CAAC+D,cAAc;MACjC,UAAArC,MAAA,CAAU8D,UAAU,YAAA9D,MAAA,CAAQG,KAAK;IACnC,KAAK7B,eAAe,CAACgE,QAAQ;MAC3B,UAAAtC,MAAA,CAAU8D,UAAU,kBAAA9D,MAAA,CAAe8D,UAAU,kBAAA9D,MAAA,CAAcG,KAAK;IAClE,KAAK7B,eAAe,CAACiE,gBAAgB;MACnC,UAAAvC,MAAA,CAAU8D,UAAU,mBAAA9D,MAAA,CAAgB8D,UAAU,kBAAA9D,MAAA,CAAcG,KAAK;IACnE,KAAK7B,eAAe,CAACkE,WAAW;MAC9B,UAAAxC,MAAA,CAAU8D,UAAU,kBAAA9D,MAAA,CAAe8D,UAAU,oBAAA9D,MAAA,CAAgBG,KAAK;IACpE,KAAK7B,eAAe,CAACmE,SAAS;MAC5B,UAAAzC,MAAA,CAAU8D,UAAU,kBAAA9D,MAAA,CAAe8D,UAAU,kBAAA9D,MAAA,CAAcG,KAAK;IAClE,KAAK7B,eAAe,CAAC2D,OAAO;MAC1B,UAAAjC,MAAA,CAAU8D,UAAU;IACtB,KAAKxF,eAAe,CAAC4D,WAAW;MAC9B,UAAAlC,MAAA,CAAU8D,UAAU;EACxB;AACF;AAEA,OAAO,SAASjD,uBAAuBA,CACrCD,EAAiB,EACjBkD,UAAsB,EACtBtD,SAAwB,EACxBL,KAAc,EACN;EACR,IAAI4D,cAAc,GAAG5D,KAAK;EAC1B,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B;IACA;IACA;IACA,IAAA6D,YAAA,GAAkC7D,KAAK,CAAC8D,KAAK,CAAC,GAAG,CAAC;MAAAC,aAAA,GAAAC,QAAA,CAAAH,YAAA;MAA3CI,cAAc,GAAAF,aAAA;MAAKG,IAAI,GAAAH,aAAA,CAAAI,KAAA;IAC9B,IAAMC,MAAM,GAAGF,IAAI,CAACG,IAAI,CAAC,GAAG,CAAC;IAC7B,IAAMC,EAAE,GAAG7D,EAAE,CAAC8D,IAAI,CAACC,QAAQ,CAACC,WAAW,CAACL,MAAM,CAAC;IAC/CR,cAAc,MAAA/D,MAAA,CAAMoE,cAAc,OAAApE,MAAA,CAAIyE,EAAE,CAACI,EAAE,CAAE;EAC/C;EAEA,QAAQrE,SAAS;IACf,KAAKjC,aAAa,CAAC6D,UAAU;MAC3B,UAAApC,MAAA,CAAU8D,UAAU,WAAA9D,MAAA,CAAQ+D,cAAc;IAC5C,KAAKxF,aAAa,CAAC8D,cAAc;MAC/B,UAAArC,MAAA,CAAU8D,UAAU,WAAA9D,MAAA,CAAQ+D,cAAc;IAC5C,KAAKxF,aAAa,CAACoE,SAAS;MAC1B,UAAA3C,MAAA,CAAU8D,UAAU,UAAA9D,MAAA,CAAO+D,cAAc;IAC3C,KAAKxF,aAAa,CAACqE,kBAAkB;MACnC,UAAA5C,MAAA,CAAU8D,UAAU,YAAA9D,MAAA,CAAS+D,cAAc;IAC7C,KAAKxF,aAAa,CAACsE,QAAQ;MACzB,UAAA7C,MAAA,CAAU8D,UAAU,UAAA9D,MAAA,CAAO+D,cAAc;IAC3C,KAAKxF,aAAa,CAACuE,iBAAiB;MAClC,UAAA9C,MAAA,CAAU8D,UAAU,YAAA9D,MAAA,CAAS+D,cAAc;IAC7C,KAAKxF,aAAa,CAAC0D,OAAO;MACxB,UAAAjC,MAAA,CAAU8D,UAAU;IACtB,KAAKvF,aAAa,CAAC2D,WAAW;MAC5B,UAAAlC,MAAA,CAAU8D,UAAU;EACxB;AACF;AAEA,OAAO,SAAS/C,0BAA0BA,CACxC+C,UAAsB,EACtBtD,SAA2B,EACnB;EACR,QAAQA,SAAS;IACf,KAAKhC,gBAAgB,CAACwE,OAAO;MAC3B,UAAAhD,MAAA,CAAU8D,UAAU;IACtB,KAAKtF,gBAAgB,CAACyE,QAAQ;MAC5B,UAAAjD,MAAA,CAAU8D,UAAU;IACtB,KAAKtF,gBAAgB,CAACyD,OAAO;MAC3B,UAAAjC,MAAA,CAAU8D,UAAU;IACtB,KAAKtF,gBAAgB,CAAC0D,WAAW;MAC/B,UAAAlC,MAAA,CAAU8D,UAAU;EACxB;AACF;AAEA,OAAO,SAAS7C,uBAAuBA,CACrC6C,UAAsB,EACtBtD,SAAwB,EACxBL,KAAc,EACN;EACR,QAAQK,SAAS;IACf,KAAK/B,aAAa,CAACiD,QAAQ;MACzB,UAAA1B,MAAA,CAAU8D,UAAU,WAAA9D,MAAA,CAAQG,KAAK;IACnC,KAAK1B,aAAa,CAACkD,YAAY;MAC7B,UAAA3B,MAAA,CAAU8D,UAAU,WAAA9D,MAAA,CAAQG,KAAK;IACnC,KAAK1B,aAAa,CAACwD,OAAO;MACxB,iBAAAjC,MAAA,CAAiB8D,UAAU;IAC7B,KAAKrF,aAAa,CAACyD,WAAW;MAC5B,kBAAAlC,MAAA,CAAkB8D,UAAU;EAChC;AACF;AAEA,OAAO,SAASgB,6BAA6BA,CAC3C1B,UAAkB,EAClB5C,SAAoB,EACZ;EACR,IAAI1C,UAAU,CAACqD,YAAY,CAACiC,UAAU,CAAC,EAAE;IACvC,OAAOS,+BAA+B,CAACrD,SAA4B,CAAC;EACtE;EACA,IAAI1C,UAAU,CAACsD,UAAU,CAACgC,UAAU,CAAC,EAAE;IACrC,OAAOQ,6BAA6B,CAACpD,SAA0B,CAAC;EAClE;EACA,IAAI1C,UAAU,CAACuD,YAAY,CAAC+B,UAAU,CAAC,EAAE;IACvC,OAAOK,+BAA+B,CAACjD,SAA4B,CAAC;EACtE;EACA,IAAI1C,UAAU,CAACwD,UAAU,CAAC8B,UAAU,CAAC,EAAE;IACrC,OAAOM,6BAA6B,CAAClD,SAA0B,CAAC;EAClE;EACA,IAAI1C,UAAU,CAACyD,aAAa,CAAC6B,UAAU,CAAC,EAAE;IACxC,OAAOO,gCAAgC,CAACnD,SAA6B,CAAC;EACxE;EAEA,MAAM,IAAIgB,KAAK,CAAC,qBAAqB,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASuD,gBAAgBA,CAC9BnE,EAAiB,EACjBoE,OAAiC,EACjCC,KAAgC,EACT;EACvB,IAAIA,KAAK,KAAKxF,SAAS,EAAE;IACvBvB,GAAG,CAACgH,KAAK,mBAAmB,CAAC;IAC7B,OAAO,EAAE;EACX;EACA,IAAMC,MAA6B,GAAG,EAAE;EACxC;EACA;EACA,IAAIC,eAA8C;EAClD,IAAMC,qBAAqB,GAAG,IAAIC,GAAG,CAGnC,CAAC;EACHL,KAAK,CAACM,OAAO,CAACC,IAAA,IAAqC;IAAA,IAAAC,KAAA;IAAA,IAAlCnG,MAAM,GAAAkG,IAAA,CAANlG,MAAM;MAAQoG,aAAa,GAAAF,IAAA,CAAnBjG,IAAI;IAC3B,IAAQW,MAAM,GAAKZ,MAAM,CAAjBY,MAAM;IACd;IACA,IAAMyF,GAAG,GAAGX,OAAO,CAACY,IAAI,CACtBC,KAAA;MAAA,IAAGtF,IAAI,GAAAsF,KAAA,CAAJtF,IAAI;QAAEhB,IAAI,GAAAsG,KAAA,CAAJtG,IAAI;MAAA,OAAOgB,IAAI,KAAKL,MAAM,CAACK,IAAI,IAAIhB,IAAI,KAAKW,MAAM,CAACX,IAAI;IAAA,CAClE,CAAC;IACD,IAAIoG,GAAG,KAAKlG,SAAS,EAAE;MACrBvB,GAAG,CAACgH,KAAK,WAAAlF,MAAA,CACGE,MAAM,CAACK,IAAI,OAAAP,MAAA,CAAIE,MAAM,CAACX,IAAI,wCACpCD,MACF,CAAC;MACD;IACF;IACA;IACA,IAAAwG,KAAA,IAAAL,KAAA,GAAsCC,aAAa,KACnDtH,aAAa,CAAC2H,WAAW,GACrBV,qBAAqB,CAACW,GAAG,CAACL,GAAG,CAACpF,IAAI,CAAC,GACnC6E,eAAe,cAAAK,KAAA,cAAAA,KAAA,GAAK,CAAC,MAAM,EAAEhG,SAAS,CAAC;MAAAwG,KAAA,GAAAC,cAAA,CAAAJ,KAAA;MAHpCK,QAAQ,GAAAF,KAAA;MAAEG,gBAAgB,GAAAH,KAAA;IAIjC,IAAMI,IAAI,GAAGpI,qBAAqB,CAAC2C,EAAE,EAAEtB,MAAM,EAAE6G,QAAQ,CAAC;IACxD,IAAIE,IAAI,KAAK5G,SAAS,EAAE;MACtBvB,GAAG,CAACgH,KAAK,0BAA0B5F,MAAM,CAAC;MAC1C;IACF;IACA;IACA,IAAMgH,KAAK,GACTF,gBAAgB,KAAK3G,SAAS,GAAG,CAAC,CAAC,GAAG0F,MAAM,CAACoB,OAAO,CAACH,gBAAgB,CAAC;IACxE,IAAIE,KAAK,GAAG,CAAC,CAAC,EAAE;MACdnB,MAAM,CAACqB,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;IACzB;IACA,IAAMG,YAAY,GAChBf,aAAa,KAAKtH,aAAa,CAAC2H,WAAW,GACvChI,sBAAsB,CAAC4H,GAAG,EAAEU,IAAI,CAAC,GACjCrI,mBAAmB,CAAC4C,EAAE,EAAEyF,IAAI,CAAC;IACnClB,MAAM,CAACuB,IAAI,CAACD,YAAY,CAAC;IACzB,IAAIf,aAAa,KAAKtH,aAAa,CAAC2H,WAAW,EAAE;MAC/CV,qBAAqB,CAACsB,GAAG,CAAChB,GAAG,CAACpF,IAAI,EAAE,CAAC8F,IAAI,EAAEI,YAAY,CAAC,CAAC;IAC3D,CAAC,MAAM;MACLrB,eAAe,GAAG,CAACiB,IAAI,EAAEI,YAAY,CAAC;IACxC;EACF,CAAC,CAAC;EAEF,OAAOtB,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASyB,oBAAoBA,CAClChG,EAAiB,EACjBJ,SAAwB,EACxBL,KAAc,EACL;EACT,QAAQK,SAAS;IACf,KAAKjC,aAAa,CAAC0D,OAAO;IAC1B,KAAK1D,aAAa,CAAC2D,WAAW;MAC5B,OAAO,IAAI;IAEb;MAAS;QACP,IAAA2E,MAAA,GAAkC,CAAC1G,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,EAAE8D,KAAK,CAAC,GAAG,CAAC;UAAA6C,OAAA,GAAA3C,QAAA,CAAA0C,MAAA;UAAnDzC,cAAc,GAAA0C,OAAA;UAAKzC,IAAI,GAAAyC,OAAA,CAAAxC,KAAA;QAC9B;QACA;QACA,IAAMC,MAAM,GAAGF,IAAI,CAACG,IAAI,CAAC,GAAG,CAAC;QAE7B,IAAI;UACF3G,SAAS,CAACkJ,mBAAmB,CAAC3C,cAAc,CAAC;QAC/C,CAAC,CAAC,OAAO4C,CAAC,EAAE;UACV9I,GAAG,CAACgH,KAAK,CAAC,yBAAyB,EAAEd,cAAc,CAAC;UACpD,OAAO,KAAK;QACd;QAEA,IAAI;UACFxD,EAAE,CAAC8D,IAAI,CAACC,QAAQ,CAACC,WAAW,CAACL,MAAM,CAAC;QACtC,CAAC,CAAC,OAAOyC,CAAC,EAAE;UACV9I,GAAG,CAACgH,KAAK,CAAC,yBAAyB,EAAEX,MAAM,CAAC;UAC5C,OAAO,KAAK;QACd;QAEA,OAAO,IAAI;MACb;EACF;AACF;AAEA,OAAO,SAAS0C,iBAAiBA,CAAAC,KAAA,EAAiC;EAAA,IAA9B3H,IAAI,GAAA2H,KAAA,CAAJ3H,IAAI;EACtC,OACEzB,UAAU,CAACqD,YAAY,CAAC5B,IAAI,CAAC,IAC7BzB,UAAU,CAACsD,UAAU,CAAC7B,IAAI,CAAC,IAC3BzB,UAAU,CAACuD,YAAY,CAAC9B,IAAI,CAAC,IAC7BzB,UAAU,CAACwD,UAAU,CAAC/B,IAAI,CAAC,IAC3BzB,UAAU,CAACyD,aAAa,CAAChC,IAAI,CAAC;AAElC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ConditionalFormattingUtils.js","names":["Log","DateUtils","TableUtils","makeColumnFormatColumn","makeRowFormatColumn","makeTernaryFormatRule","log","module","FormatterType","NumberCondition","StringCondition","DateCondition","BooleanCondition","CharCondition","FormatStyleType","getLabelForStyleType","option","NO_FORMATTING","POSITIVE","NEGATIVE","WARN","NEUTRAL","ACCENT_1","ACCENT_2","CUSTOM","getBackgroundForStyleConfig","config","type","customConfig","undefined","background","getColorForStyleConfig","color","getStyleDBString","style","bg","concat","formatRHV","value","quote","name","formatDateRHV","dh","_value$split","split","_value$split2","_toArray","dateTimeString","rest","slice","tzCode","join","tz","i18n","TimeZone","getTimeZone","id","getNumberConditionText","leftHandValue","rightHandValue","start","end","getTextForNumberCondition","condition","getStringConditionText","columnName","rhv","IS_EXACTLY","IS_NOT_EXACTLY","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","IS_NULL","IS_NOT_NULL","getDateConditionText","IS_BEFORE","IS_BEFORE_OR_EQUAL","IS_AFTER","IS_AFTER_OR_EQUAL","getBooleanConditionText","getTextForBooleanCondition","getCharConditionText","IS_EQUAL","IS_NOT_EQUAL","getConditionDBString","isNumberType","isCharType","isStringType","isDateType","isBooleanType","Error","getLabelForNumberCondition","IS_BETWEEN","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","getLabelForStringCondition","getLabelForDateCondition","getLabelForBooleanCondition","IS_TRUE","IS_FALSE","getLabelForCharCondition","getDefaultConditionForType","columnType","getDefaultValueForType","getConditionConfig","getDefaultConditionConfigForType","getDefaultStyleConfig","getShortLabelForStringCondition","getShortLabelForDateCondition","getShortLabelForBooleanCondition","getShortLabelForCharCondition","getShortLabelForNumberCondition","_formatRHV","_formatRHV2","getShortLabelForConditionType","getFormatColumns","columns","rules","debug","result","rowFormatConfig","columnFormatConfigMap","Map","forEach","_ref","formatterType","formattedColumns","isColumnType","CONDITIONAL","conditionCol","find","_ref2","targetColConfigs","length","targetColConfig","_ref6","formatTargetCol","found","_ref3","_ref4","get","_ref5","_slicedToArray","prevRule","prevFormatColumn","rule","index","indexOf","splice","formatColumn","push","set","isDateConditionValid","_split","_split2","parseDateTimeString","e","isSupportedColumn","_ref7"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormattingUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport {\n makeColumnFormatColumn,\n makeRowFormatColumn,\n makeTernaryFormatRule,\n} from './ConditionalFormattingAPIUtils';\nimport { type ColumnName } from '../../CommonTypes';\n\nconst log = Log.module('ConditionalFormattingUtils');\n\nexport type ModelColumn = {\n name: string;\n type: string;\n};\n\nexport type Condition =\n | NumberCondition\n | StringCondition\n | DateCondition\n | BooleanCondition\n | CharCondition;\n\nexport interface BaseFormatConfig {\n /**\n * The columns whose formatting is applied. When set, formatting is applied to\n * each column while the condition is evaluated against `leftHandValue`. When\n * absent, `leftHandValue` is used as both the condition column and the format\n * target.\n */\n formattedColumns: ModelColumn[];\n /**\n * The column whose value is evaluated as the left-hand side of the condition.\n */\n leftHandValue: ModelColumn;\n condition: Condition;\n /**\n * The right-hand side of the condition. May be a literal string value or a\n * column reference (`ModelColumn`).\n */\n rightHandValue?: string | ModelColumn;\n start?: string;\n end?: string;\n style: FormatStyleConfig;\n}\n\nexport interface ConditionConfig {\n condition: Condition;\n rightHandValue?: string | ModelColumn;\n start?: string;\n end?: string;\n}\n\nexport type ChangeCallback = (\n ruleConfig: BaseFormatConfig,\n isValid: boolean\n) => void;\n\nexport enum FormatterType {\n CONDITIONAL = 'conditional',\n ROWS = 'rows',\n}\n\nexport interface FormattingRule {\n type: FormatterType;\n config: BaseFormatConfig;\n}\n\nexport enum NumberCondition {\n IS_EQUAL = 'is-equal',\n IS_NOT_EQUAL = 'is-not-equal',\n IS_BETWEEN = 'is-between',\n GREATER_THAN = 'greater-than',\n GREATER_THAN_OR_EQUAL = 'greater-than-or-equal',\n LESS_THAN = 'less-than',\n LESS_THAN_OR_EQUAL = 'less-than-or-equal',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum StringCondition {\n IS_EXACTLY = 'is-exactly',\n IS_NOT_EXACTLY = 'is-not-exactly',\n CONTAINS = 'contains',\n DOES_NOT_CONTAIN = 'does-not-contain',\n STARTS_WITH = 'starts-with',\n ENDS_WITH = 'ends-with',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum DateCondition {\n IS_EXACTLY = 'is-exactly',\n IS_NOT_EXACTLY = 'is-not-exactly',\n IS_BEFORE = 'is-before',\n IS_BEFORE_OR_EQUAL = 'is-before-or-equal',\n IS_AFTER = 'is-after',\n IS_AFTER_OR_EQUAL = 'is-after-or-equal',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum BooleanCondition {\n IS_TRUE = 'is-true',\n IS_FALSE = 'is-false',\n IS_EQUAL = 'is-equal',\n IS_NOT_EQUAL = 'is-not-equal',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum CharCondition {\n IS_EQUAL = 'is-equal',\n IS_NOT_EQUAL = 'is-not-equal',\n IS_NULL = 'is-null',\n IS_NOT_NULL = 'is-not-null',\n}\n\nexport enum FormatStyleType {\n NO_FORMATTING = 'no-formatting',\n POSITIVE = 'positive',\n NEGATIVE = 'negative',\n WARN = 'warn',\n NEUTRAL = 'neutral',\n ACCENT_1 = 'accent-1',\n ACCENT_2 = 'accent-2',\n CUSTOM = 'custom',\n}\n\nexport interface FormatStyleConfig {\n type: FormatStyleType;\n customConfig?: {\n color: string;\n background: string;\n };\n}\n\nexport function getLabelForStyleType(option: FormatStyleType): string {\n switch (option) {\n case FormatStyleType.NO_FORMATTING:\n return 'No formatting';\n case FormatStyleType.POSITIVE:\n return 'Positive';\n case FormatStyleType.NEGATIVE:\n return 'Negative';\n case FormatStyleType.WARN:\n return 'Warn';\n case FormatStyleType.NEUTRAL:\n return 'Neutral';\n case FormatStyleType.ACCENT_1:\n return 'Accent 1';\n case FormatStyleType.ACCENT_2:\n return 'Accent 2';\n case FormatStyleType.CUSTOM:\n return 'Custom...';\n }\n}\n\nexport function getBackgroundForStyleConfig(\n config: FormatStyleConfig\n): string | undefined {\n const { type, customConfig } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#9fde6f';\n case FormatStyleType.NEGATIVE:\n return '#ff6087';\n case FormatStyleType.WARN:\n return '#f67f40';\n case FormatStyleType.NEUTRAL:\n return '#ffd95c';\n case FormatStyleType.ACCENT_1:\n return '#78dce8';\n case FormatStyleType.ACCENT_2:\n return '#ab9bf5';\n case FormatStyleType.CUSTOM:\n return customConfig?.background;\n default:\n return undefined;\n }\n}\n\nexport function getColorForStyleConfig(\n config: FormatStyleConfig\n): string | undefined {\n const { type, customConfig } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#526a3f';\n case FormatStyleType.NEGATIVE:\n return '#802f44';\n case FormatStyleType.WARN:\n return '#663318';\n case FormatStyleType.NEUTRAL:\n return '#63562b';\n case FormatStyleType.ACCENT_1:\n return '#3f6469';\n case FormatStyleType.ACCENT_2:\n return '#554d72';\n case FormatStyleType.CUSTOM:\n return customConfig?.color;\n default:\n return undefined;\n }\n}\n\nexport function getStyleDBString(config: BaseFormatConfig): string | undefined {\n const color = getColorForStyleConfig(config.style);\n const bg = getBackgroundForStyleConfig(config.style);\n if (color === undefined || bg === undefined) {\n return undefined;\n }\n return `bgfg(\\`${bg}\\`, \\`${color}\\`)`;\n}\n\n/**\n * Formats a rightHandValue for use in a condition expression.\n * - If a ModelColumn: returns the column name as a bare identifier (no quoting)\n * - If a string: wraps it in the given quote character\n * - If undefined: returns undefined\n */\nexport function formatRHV(\n value: string | ModelColumn | undefined,\n quote: string\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'object') return value.name;\n return `${quote}${value}${quote}`;\n}\n\n/**\n * Formats a date rightHandValue for use in a condition expression.\n * - If a ModelColumn: returns the column name (no quoting or timezone processing)\n * - If a string: reformats the timezone and wraps in single quotes\n */\nfunction formatDateRHV(\n dh: typeof DhType,\n value: string | ModelColumn | undefined\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'object') return value.name;\n const [dateTimeString, ...rest] = value.split(' ');\n const tzCode = rest.join(' ');\n const tz = dh.i18n.TimeZone.getTimeZone(tzCode);\n return `'${dateTimeString} ${tz.id}'`;\n}\n\nfunction getNumberConditionText(config: BaseFormatConfig): string {\n const { leftHandValue, rightHandValue, start, end } = config;\n return getTextForNumberCondition(\n leftHandValue.name,\n config.condition as NumberCondition,\n formatRHV(rightHandValue, ''),\n start,\n end\n );\n}\n\nfunction getStringConditionText(config: BaseFormatConfig): string {\n const { leftHandValue, rightHandValue } = config;\n const columnName = leftHandValue.name;\n const rhv = formatRHV(rightHandValue, '\"');\n switch (config.condition as StringCondition) {\n case StringCondition.IS_EXACTLY:\n return `${columnName} == ${rhv}`;\n case StringCondition.IS_NOT_EXACTLY:\n return `${columnName} != ${rhv}`;\n case StringCondition.CONTAINS:\n return `${columnName} != null && ${columnName}.contains(${rhv})`;\n case StringCondition.DOES_NOT_CONTAIN:\n return `${columnName} != null && !${columnName}.contains(${rhv})`;\n case StringCondition.STARTS_WITH:\n return `${columnName} != null && ${columnName}.startsWith(${rhv})`;\n case StringCondition.ENDS_WITH:\n return `${columnName} != null && ${columnName}.endsWith(${rhv})`;\n case StringCondition.IS_NULL:\n return `${columnName} == null`;\n case StringCondition.IS_NOT_NULL:\n return `${columnName} != null`;\n }\n}\n\nfunction getDateConditionText(\n dh: typeof DhType,\n config: BaseFormatConfig\n): string {\n const { leftHandValue, rightHandValue } = config;\n const columnName = leftHandValue.name;\n const rhv = formatDateRHV(dh, rightHandValue);\n switch (config.condition as DateCondition) {\n case DateCondition.IS_EXACTLY:\n return `${columnName} == ${rhv}`;\n case DateCondition.IS_NOT_EXACTLY:\n return `${columnName} != ${rhv}`;\n case DateCondition.IS_BEFORE:\n return `${columnName} < ${rhv}`;\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return `${columnName} <= ${rhv}`;\n case DateCondition.IS_AFTER:\n return `${columnName} > ${rhv}`;\n case DateCondition.IS_AFTER_OR_EQUAL:\n return `${columnName} >= ${rhv}`;\n case DateCondition.IS_NULL:\n return `${columnName} == null`;\n case DateCondition.IS_NOT_NULL:\n return `${columnName} != null`;\n }\n}\n\nfunction getBooleanConditionText(config: BaseFormatConfig): string {\n const { leftHandValue, rightHandValue } = config;\n return getTextForBooleanCondition(\n leftHandValue.name,\n config.condition as BooleanCondition,\n rightHandValue\n );\n}\n\nfunction getCharConditionText(config: BaseFormatConfig): string {\n const { leftHandValue, rightHandValue } = config;\n const columnName = leftHandValue.name;\n const rhv = formatRHV(rightHandValue, \"'\");\n switch (config.condition as CharCondition) {\n case CharCondition.IS_EQUAL:\n return `${columnName} == ${rhv}`;\n case CharCondition.IS_NOT_EQUAL:\n return `${columnName} != ${rhv}`;\n case CharCondition.IS_NULL:\n return `isNull(${columnName})`;\n case CharCondition.IS_NOT_NULL:\n return `!isNull(${columnName})`;\n }\n}\n\nexport function getConditionDBString(\n dh: typeof DhType,\n config: BaseFormatConfig\n): string {\n const { leftHandValue } = config;\n\n if (TableUtils.isNumberType(leftHandValue.type)) {\n return getNumberConditionText(config);\n }\n if (TableUtils.isCharType(leftHandValue.type)) {\n return getCharConditionText(config);\n }\n if (TableUtils.isStringType(leftHandValue.type)) {\n return getStringConditionText(config);\n }\n if (TableUtils.isDateType(leftHandValue.type)) {\n return getDateConditionText(dh, config);\n }\n if (TableUtils.isBooleanType(leftHandValue.type)) {\n return getBooleanConditionText(config);\n }\n\n throw new Error('Invalid column type');\n}\n\nexport function getLabelForNumberCondition(condition: NumberCondition): string {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return 'is equal to';\n case NumberCondition.IS_NOT_EQUAL:\n return 'is not equal to';\n case NumberCondition.IS_BETWEEN:\n return 'is between';\n case NumberCondition.GREATER_THAN:\n return 'greater than';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return 'greater than or equal to';\n case NumberCondition.LESS_THAN:\n return 'less than';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return 'less than or equal to';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getLabelForStringCondition(condition: StringCondition): string {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return 'is exactly';\n case StringCondition.IS_NOT_EXACTLY:\n return 'is not exactly';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getLabelForDateCondition(condition: DateCondition): string {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return 'is';\n case DateCondition.IS_NOT_EXACTLY:\n return 'is not';\n case DateCondition.IS_BEFORE:\n return 'is before';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return 'is before or equal';\n case DateCondition.IS_AFTER:\n return 'is after';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return 'is after or equal';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getLabelForBooleanCondition(\n condition: BooleanCondition\n): string {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_EQUAL:\n return 'is equal to';\n case BooleanCondition.IS_NOT_EQUAL:\n return 'is not equal to';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getLabelForCharCondition(condition: CharCondition): string {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return 'is';\n case CharCondition.IS_NOT_EQUAL:\n return 'is not';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getDefaultConditionForType(columnType: string): Condition {\n if (TableUtils.isNumberType(columnType)) {\n return NumberCondition.IS_EQUAL;\n }\n if (TableUtils.isCharType(columnType)) {\n return CharCondition.IS_EQUAL;\n }\n if (TableUtils.isStringType(columnType)) {\n return StringCondition.IS_EXACTLY;\n }\n if (TableUtils.isDateType(columnType)) {\n return DateCondition.IS_EXACTLY;\n }\n if (TableUtils.isBooleanType(columnType)) {\n return BooleanCondition.IS_TRUE;\n }\n\n throw new Error('Invalid column type');\n}\n\nexport function getDefaultValueForType(columnType: string): string | undefined {\n if (TableUtils.isStringType(columnType)) {\n return '';\n }\n return undefined;\n}\n\nexport function getConditionConfig(config: BaseFormatConfig): ConditionConfig {\n const { condition, rightHandValue, start, end } = config;\n return { condition, rightHandValue, start, end };\n}\n\nexport function getDefaultConditionConfigForType(\n type: string\n): ConditionConfig {\n return {\n condition: getDefaultConditionForType(type),\n rightHandValue: getDefaultValueForType(type),\n start: undefined,\n end: undefined,\n };\n}\n\nexport function getDefaultStyleConfig(): FormatStyleConfig {\n return {\n type: FormatStyleType.NO_FORMATTING,\n };\n}\n\nfunction getShortLabelForStringCondition(condition: StringCondition): string {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return '==';\n case StringCondition.IS_NOT_EXACTLY:\n return '!=';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nfunction getShortLabelForDateCondition(condition: DateCondition): string {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return '==';\n case DateCondition.IS_NOT_EXACTLY:\n return '!=';\n case DateCondition.IS_BEFORE:\n return '<';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return '<=';\n case DateCondition.IS_AFTER:\n return '>';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return '>=';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nfunction getShortLabelForBooleanCondition(condition: BooleanCondition): string {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_EQUAL:\n return '==';\n case BooleanCondition.IS_NOT_EQUAL:\n return '!=';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nfunction getShortLabelForCharCondition(condition: CharCondition): string {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return '==';\n case CharCondition.IS_NOT_EQUAL:\n return '!=';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getShortLabelForNumberCondition(\n condition: NumberCondition\n): string {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return '==';\n case NumberCondition.IS_NOT_EQUAL:\n return '!=';\n case NumberCondition.IS_BETWEEN:\n return '==';\n case NumberCondition.GREATER_THAN:\n return '>';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return '>=';\n case NumberCondition.LESS_THAN:\n return '<';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return '<=';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\n\nexport function getTextForNumberCondition(\n columnName: ColumnName,\n condition: NumberCondition,\n value: unknown,\n start: unknown,\n end: unknown\n): string {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return `${columnName} == ${value}`;\n case NumberCondition.IS_NOT_EQUAL:\n return `${columnName} != ${value}`;\n case NumberCondition.IS_BETWEEN:\n return `${columnName} > ${start} && ${columnName} < ${end}`;\n case NumberCondition.GREATER_THAN:\n return `${columnName} > ${value}`;\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return `${columnName} >= ${value}`;\n case NumberCondition.LESS_THAN:\n return `${columnName} < ${value}`;\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return `${columnName} <= ${value}`;\n case NumberCondition.IS_NULL:\n return `${columnName} == null`;\n case NumberCondition.IS_NOT_NULL:\n return `${columnName} != null`;\n }\n}\n\nexport function getTextForBooleanCondition(\n columnName: ColumnName,\n condition: BooleanCondition,\n rightHandValue?: string | ModelColumn\n): string {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return `${columnName} == true`;\n case BooleanCondition.IS_FALSE:\n return `${columnName} == false`;\n case BooleanCondition.IS_EQUAL:\n return `${columnName} == ${formatRHV(rightHandValue, '') ?? 'null'}`;\n case BooleanCondition.IS_NOT_EQUAL:\n return `${columnName} != ${formatRHV(rightHandValue, '') ?? 'null'}`;\n case BooleanCondition.IS_NULL:\n return `${columnName} == null`;\n case BooleanCondition.IS_NOT_NULL:\n return `${columnName} != null`;\n }\n}\n\nexport function getShortLabelForConditionType(\n columnType: string,\n condition: Condition\n): string {\n if (TableUtils.isNumberType(columnType)) {\n return getShortLabelForNumberCondition(condition as NumberCondition);\n }\n if (TableUtils.isCharType(columnType)) {\n return getShortLabelForCharCondition(condition as CharCondition);\n }\n if (TableUtils.isStringType(columnType)) {\n return getShortLabelForStringCondition(condition as StringCondition);\n }\n if (TableUtils.isDateType(columnType)) {\n return getShortLabelForDateCondition(condition as DateCondition);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getShortLabelForBooleanCondition(condition as BooleanCondition);\n }\n\n throw new Error('Invalid column type');\n}\n\n/**\n * Get format columns array for the given columns and formatting rules\n * @param columns Available columns\n * @param rules Formatting rules to build the format columns from\n * @returns Array of format columns\n */\nexport function getFormatColumns(\n dh: typeof DhType,\n columns: readonly DhType.Column[],\n rules: readonly FormattingRule[]\n): DhType.CustomColumn[] {\n if (rules === undefined) {\n log.debug(`no rules passed.`);\n return [];\n }\n const result: DhType.CustomColumn[] = [];\n // There can be only one row format custom column\n // and multiple column format custom columns (one per column)\n let rowFormatConfig: [string, DhType.CustomColumn];\n const columnFormatConfigMap = new Map<\n string,\n [string, DhType.CustomColumn]\n >();\n rules.forEach(({ config, type: formatterType }) => {\n const { leftHandValue, formattedColumns } = config;\n const isColumnType = formatterType === FormatterType.CONDITIONAL;\n\n // Check both name and type because the type can change\n const conditionCol = columns.find(\n ({ name, type }) =>\n name === leftHandValue.name && type === leftHandValue.type\n );\n if (conditionCol === undefined) {\n log.debug(\n `Column ${leftHandValue.name}:${leftHandValue.type} not found. Ignoring format rule.`,\n config\n );\n return;\n }\n\n // For COLUMNS rules, format each column in formattedColumns.\n // When formattedColumns is absent or empty, fall back to the condition column\n // by using [null] to indicate that the condition column should be used as the format target.\n const targetColConfigs: (ModelColumn | null)[] =\n isColumnType && formattedColumns.length > 0 ? formattedColumns : [null];\n\n targetColConfigs.forEach(targetColConfig => {\n let formatTargetCol = conditionCol;\n if (isColumnType && targetColConfig !== null) {\n const found = columns.find(\n ({ name, type }) =>\n name === targetColConfig.name && type === targetColConfig.type\n );\n if (found === undefined) {\n log.debug(\n `Formatted column ${targetColConfig.name}:${targetColConfig.type} not found. Ignoring format rule.`,\n config\n );\n return;\n }\n formatTargetCol = found;\n }\n\n // Stack ternary format conditions by formatted column\n const [prevRule, prevFormatColumn] = (isColumnType\n ? columnFormatConfigMap.get(formatTargetCol.name)\n : rowFormatConfig) ?? ['null', undefined];\n const rule = makeTernaryFormatRule(dh, config, prevRule);\n if (rule === undefined) {\n log.debug(`Ignoring format rule.`, config);\n return;\n }\n // Replace existing formatColumn with the new stacked format\n const index =\n prevFormatColumn === undefined ? -1 : result.indexOf(prevFormatColumn);\n if (index > -1) {\n result.splice(index, 1);\n }\n const formatColumn = isColumnType\n ? makeColumnFormatColumn(formatTargetCol, rule)\n : makeRowFormatColumn(dh, rule);\n result.push(formatColumn);\n if (isColumnType) {\n columnFormatConfigMap.set(formatTargetCol.name, [rule, formatColumn]);\n } else {\n rowFormatConfig = [rule, formatColumn];\n }\n });\n });\n\n return result;\n}\n\n/**\n * Validate that a given date condition + value pair is valid.\n * @param condition\n * @param value\n */\nexport function isDateConditionValid(\n dh: typeof DhType,\n condition: DateCondition,\n value?: string\n): boolean {\n switch (condition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return true;\n\n default: {\n const [dateTimeString, ...rest] = (value ?? '').split(' ');\n // Reconstitute all tokens after the first ' ' in case the user included garbage data at the end\n // e.g. '2020-01-01 NY blah'\n const tzCode = rest.join(' ');\n\n try {\n DateUtils.parseDateTimeString(dateTimeString);\n } catch (e) {\n log.debug('Invalid datetime string', dateTimeString);\n return false;\n }\n\n try {\n dh.i18n.TimeZone.getTimeZone(tzCode);\n } catch (e) {\n log.debug('Invalid timezone string', tzCode);\n return false;\n }\n\n return true;\n }\n }\n}\n\nexport function isSupportedColumn({ type }: ModelColumn): boolean {\n return (\n TableUtils.isNumberType(type) ||\n TableUtils.isCharType(type) ||\n TableUtils.isStringType(type) ||\n TableUtils.isDateType(type) ||\n TableUtils.isBooleanType(type)\n );\n}\n"],"mappings":"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","ignoreList":[]}
|