@deephaven/iris-grid 1.26.0 → 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.
Files changed (30) hide show
  1. package/dist/IrisGridUtils.d.ts +7 -0
  2. package/dist/IrisGridUtils.d.ts.map +1 -1
  3. package/dist/IrisGridUtils.js +31 -5
  4. package/dist/IrisGridUtils.js.map +1 -1
  5. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -0
  6. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  7. package/dist/sidebar/conditional-formatting/ConditionEditor.js +177 -167
  8. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  9. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -2
  10. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  11. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  12. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +23 -18
  13. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  14. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +27 -7
  15. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  16. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +172 -122
  17. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  18. package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.d.ts +18 -0
  19. package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.d.ts.map +1 -0
  20. package/dist/sidebar/conditional-formatting/{ColumnFormatEditor.js → MultiColumnFormatEditor.js} +110 -22
  21. package/dist/sidebar/conditional-formatting/MultiColumnFormatEditor.js.map +1 -0
  22. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  23. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +8 -5
  24. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  25. package/dist/sidebar/conditional-formatting/StyleEditor.js +1 -1
  26. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  27. package/package.json +5 -5
  28. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +0 -11
  29. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +0 -1
  30. 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 column = config.column,
155
- value = config.value,
185
+ var leftHandValue = config.leftHandValue,
186
+ rightHandValue = config.rightHandValue,
156
187
  start = config.start,
157
188
  end = config.end;
158
- return getTextForNumberCondition(column.name, config.condition, value, start, end);
189
+ return getTextForNumberCondition(leftHandValue.name, config.condition, formatRHV(rightHandValue, ''), start, end);
159
190
  }
160
191
  function getStringConditionText(config) {
161
- var column = config.column,
162
- value = config.value;
163
- return getTextForStringCondition(column.name, config.condition, value);
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 column = config.column,
167
- value = config.value;
168
- return getTextForDateCondition(dh, column.name, config.condition, value);
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 column = config.column;
172
- return getTextForBooleanCondition(column.name, config.condition);
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 column = config.column,
176
- value = config.value;
177
- return getTextForCharCondition(column.name, config.condition, value);
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 column = config.column;
181
- if (TableUtils.isNumberType(column.type)) {
261
+ var leftHandValue = config.leftHandValue;
262
+ if (TableUtils.isNumberType(leftHandValue.type)) {
182
263
  return getNumberConditionText(config);
183
264
  }
184
- if (TableUtils.isCharType(column.type)) {
265
+ if (TableUtils.isCharType(leftHandValue.type)) {
185
266
  return getCharConditionText(config);
186
267
  }
187
- if (TableUtils.isStringType(column.type)) {
268
+ if (TableUtils.isStringType(leftHandValue.type)) {
188
269
  return getStringConditionText(config);
189
270
  }
190
- if (TableUtils.isDateType(column.type)) {
271
+ if (TableUtils.isDateType(leftHandValue.type)) {
191
272
  return getDateConditionText(dh, config);
192
273
  }
193
- if (TableUtils.isBooleanType(column.type)) {
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
- value = config.value,
395
+ rightHandValue = config.rightHandValue,
314
396
  start = config.start,
315
397
  end = config.end;
316
398
  return {
317
399
  condition,
318
- value,
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
- value: getDefaultValueForType(type),
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 getTextForStringCondition(columnName, condition, value) {
445
- switch (condition) {
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 column = config.column;
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 col = columns.find(_ref2 => {
590
+ var conditionCol = columns.find(_ref2 => {
563
591
  var name = _ref2.name,
564
592
  type = _ref2.type;
565
- return name === column.name && type === column.type;
593
+ return name === leftHandValue.name && type === leftHandValue.type;
566
594
  });
567
- if (col === undefined) {
568
- log.debug("Column ".concat(column.name, ":").concat(column.type, " not found. Ignoring format rule."), config);
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
- // Stack ternary format conditions by column
572
- var _ref3 = (_ref5 = formatterType === FormatterType.CONDITIONAL ? columnFormatConfigMap.get(col.name) : rowFormatConfig) !== null && _ref5 !== void 0 ? _ref5 : ['null', undefined],
573
- _ref4 = _slicedToArray(_ref3, 2),
574
- prevRule = _ref4[0],
575
- prevFormatColumn = _ref4[1];
576
- var rule = makeTernaryFormatRule(dh, config, prevRule);
577
- if (rule === undefined) {
578
- log.debug("Ignoring format rule.", config);
579
- return;
580
- }
581
- // Replace existing formatColumn with the new stacked format
582
- var index = prevFormatColumn === undefined ? -1 : result.indexOf(prevFormatColumn);
583
- if (index > -1) {
584
- result.splice(index, 1);
585
- }
586
- var formatColumn = formatterType === FormatterType.CONDITIONAL ? makeColumnFormatColumn(col, rule) : makeRowFormatColumn(dh, rule);
587
- result.push(formatColumn);
588
- if (formatterType === FormatterType.CONDITIONAL) {
589
- columnFormatConfigMap.set(col.name, [rule, formatColumn]);
590
- } else {
591
- rowFormatConfig = [rule, formatColumn];
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(_ref6) {
633
- var type = _ref6.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":"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","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":[]}