@pega/cosmos-react-condition-builder 4.0.0-dev.2.0 → 4.0.0-dev.20.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 (96) hide show
  1. package/lib/components/ConditionBuilder/AtomicCondition.d.ts +9 -5
  2. package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
  3. package/lib/components/ConditionBuilder/AtomicCondition.js +48 -13
  4. package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
  5. package/lib/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
  6. package/lib/components/ConditionBuilder/ConditionBuilder.js +85 -22
  7. package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
  8. package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts +2 -0
  9. package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts.map +1 -1
  10. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js +18 -3
  11. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js.map +1 -1
  12. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +7 -5
  13. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
  14. package/lib/components/ConditionBuilder/ConditionBuilder.types.js.map +1 -1
  15. package/lib/components/ConditionBuilder/FieldCondition.types.d.ts +1 -3
  16. package/lib/components/ConditionBuilder/FieldCondition.types.d.ts.map +1 -1
  17. package/lib/components/ConditionBuilder/FieldCondition.types.js.map +1 -1
  18. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.d.ts.map +1 -1
  19. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.js +18 -10
  20. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.js.map +1 -1
  21. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.d.ts +5 -3
  22. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.d.ts.map +1 -1
  23. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js +2 -2
  24. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js.map +1 -1
  25. package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts.map +1 -1
  26. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js +1 -1
  27. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js.map +1 -1
  28. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.d.ts.map +1 -1
  29. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.js +21 -11
  30. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.js.map +1 -1
  31. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js +2 -2
  32. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js.map +1 -1
  33. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.d.ts +0 -2
  34. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.d.ts.map +1 -1
  35. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js +84 -68
  36. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js.map +1 -1
  37. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.d.ts.map +1 -1
  38. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.js +2 -1
  39. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.js.map +1 -1
  40. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts +7 -3
  41. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts.map +1 -1
  42. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js +71 -20
  43. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js.map +1 -1
  44. package/lib/components/ConditionBuilder/RhsControls/index.d.ts +5 -5
  45. package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
  46. package/lib/components/ConditionBuilder/RhsControls/index.js +56 -16
  47. package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
  48. package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
  49. package/lib/components/ConditionBuilder/core/evaluator.js +15 -3
  50. package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
  51. package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
  52. package/lib/components/ConditionBuilder/core/formatter.js +22 -1
  53. package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
  54. package/lib/components/ConditionBuilder/core/rows-reducer.d.ts +1 -1
  55. package/lib/components/ConditionBuilder/core/rows-reducer.d.ts.map +1 -1
  56. package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -1
  57. package/lib/components/ConditionBuilder/core/transformer.js +4 -2
  58. package/lib/components/ConditionBuilder/core/transformer.js.map +1 -1
  59. package/lib/components/ConditionBuilder/core/types.d.ts +17 -17
  60. package/lib/components/ConditionBuilder/core/types.d.ts.map +1 -1
  61. package/lib/components/ConditionBuilder/core/types.js.map +1 -1
  62. package/lib/components/ConditionBuilder/core/utils.d.ts +2 -6
  63. package/lib/components/ConditionBuilder/core/utils.d.ts.map +1 -1
  64. package/lib/components/ConditionBuilder/core/utils.js +4 -7
  65. package/lib/components/ConditionBuilder/core/utils.js.map +1 -1
  66. package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -1
  67. package/lib/components/ConditionInput/ConditionInput.js +145 -58
  68. package/lib/components/ConditionInput/ConditionInput.js.map +1 -1
  69. package/lib/components/ConditionInput/ConditionInput.styles.d.ts +2 -2
  70. package/lib/components/ConditionInput/ConditionInput.styles.d.ts.map +1 -1
  71. package/lib/components/ConditionInput/ConditionInput.styles.js +5 -5
  72. package/lib/components/ConditionInput/ConditionInput.styles.js.map +1 -1
  73. package/lib/components/ConditionInput/ConditionInput.types.d.ts +5 -2
  74. package/lib/components/ConditionInput/ConditionInput.types.d.ts.map +1 -1
  75. package/lib/components/ConditionInput/ConditionInput.types.js.map +1 -1
  76. package/lib/components/ConditionInput/utils.d.ts +7 -3
  77. package/lib/components/ConditionInput/utils.d.ts.map +1 -1
  78. package/lib/components/ConditionInput/utils.js +67 -2
  79. package/lib/components/ConditionInput/utils.js.map +1 -1
  80. package/lib/components/PromotedFilters/ConditionSelector.d.ts.map +1 -1
  81. package/lib/components/PromotedFilters/ConditionSelector.js +3 -31
  82. package/lib/components/PromotedFilters/ConditionSelector.js.map +1 -1
  83. package/lib/components/PromotedFilters/PromotedFilters.d.ts.map +1 -1
  84. package/lib/components/PromotedFilters/PromotedFilters.js +46 -12
  85. package/lib/components/PromotedFilters/PromotedFilters.js.map +1 -1
  86. package/lib/components/PromotedFilters/PromotedFilters.styles.d.ts.map +1 -1
  87. package/lib/components/PromotedFilters/PromotedFilters.styles.js +12 -0
  88. package/lib/components/PromotedFilters/PromotedFilters.styles.js.map +1 -1
  89. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts +3 -1
  90. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts.map +1 -1
  91. package/lib/components/PromotedFilters/PromotedFilters.types.js.map +1 -1
  92. package/package.json +9 -9
  93. package/lib/components/ConditionBuilder/HelpButton.d.ts +0 -10
  94. package/lib/components/ConditionBuilder/HelpButton.d.ts.map +0 -1
  95. package/lib/components/ConditionBuilder/HelpButton.js +0 -11
  96. package/lib/components/ConditionBuilder/HelpButton.js.map +0 -1
@@ -1,23 +1,54 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { forwardRef, useState, useEffect } from 'react';
2
+ import { forwardRef, useState, useEffect, useImperativeHandle, useRef } from 'react';
3
3
  import { CompositeInput, hasProp, Input, RadioButton, useI18n, useConfiguration, DateRangeInput, TimeRangeInput, useUID, NumberRangeInput, RadioButtonGroup } from '@pega/cosmos-react-core';
4
4
  import AtomicCondition, { getInitConditionForLhs, isValidCondition } from '../ConditionBuilder/AtomicCondition';
5
5
  import formatCondition from '../ConditionBuilder/core/formatter';
6
6
  import ValueSelector from '../ConditionBuilder/RhsControls/ValueSelector';
7
7
  import { truncateISODateString } from '../ConditionBuilder/RhsControls';
8
8
  import { convertTimeValueToMs } from '../ConditionBuilder/core/time-utils';
9
- import { StyledConditionRadioGroup, StyledAtomicCondition, StyledFieldGroup } from './ConditionInput.styles';
10
- import { basicFieldMap, defaultComparators, compareValues, compareRangeValues } from './utils';
11
- const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp, label, mode, onChange, flat = false }, ref) => {
9
+ import { StyledVerticalAtomicCondition, StyledConditionRadioGroup, StyledVerticalFieldGroup } from './ConditionInput.styles';
10
+ import { basicFieldMap, defaultComparators, valuesEqual, rangeValuesEqual, conditionsEqual, possibleFieldValuesToConditionFieldValues } from './utils';
11
+ const isDateValid = (dateTimeParam) => {
12
+ return dateTimeParam.valueAsISOString && !dateTimeParam.state;
13
+ };
14
+ const validRhsTypes = new Set(['LITERAL', 'RELATIVE_DATE', 'DATE_FUNCTION']);
15
+ const dateFunctions = {
16
+ DATE_TIME: [
17
+ 'YEARS',
18
+ 'QUARTERS',
19
+ 'MONTHS',
20
+ 'WEEKS',
21
+ 'DAYS',
22
+ 'HOURS',
23
+ 'MINUTES',
24
+ 'SECONDS',
25
+ 'MONTHS_OF_YEAR',
26
+ 'DAYS_OF_MONTH',
27
+ 'DAYS_OF_WEEK',
28
+ 'HOURS_OF_DAY'
29
+ ],
30
+ DATE_ONLY: [
31
+ 'YEARS',
32
+ 'QUARTERS',
33
+ 'MONTHS',
34
+ 'WEEKS',
35
+ 'MONTHS_OF_YEAR',
36
+ 'DAYS_OF_MONTH',
37
+ 'DAYS_OF_WEEK'
38
+ ]
39
+ };
40
+ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp, label, mode, onChange, flat = false, handle }, ref) => {
12
41
  const id = useUID();
13
42
  const t = useI18n();
14
43
  const { locale } = useConfiguration();
44
+ const [collapsed, setCollapsed] = useState(false);
15
45
  const { name: fieldName, type: fieldType } = fieldProp;
16
46
  const basicType = basicFieldMap[fieldType] ?? fieldType;
17
47
  const field = {
18
48
  id: fieldName,
19
49
  type: basicType,
20
- primary: label ?? fieldName
50
+ primary: label ?? fieldName,
51
+ possibleValues: possibleFieldValuesToConditionFieldValues(fieldProp.possibleValues)
21
52
  };
22
53
  const fields = [field];
23
54
  const createConditionForDefaultMode = (value) => {
@@ -32,15 +63,26 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
32
63
  rhs: valueObj
33
64
  };
34
65
  };
35
- const convertDateTimeValue = (value) => {
36
- const truncatedValue = truncateISODateString(value, basicType);
37
- return fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedValue) : truncatedValue;
66
+ const convertDateTimeValue = (range) => {
67
+ if (!isDateValid(range.start) || !isDateValid(range.end))
68
+ return undefined;
69
+ const truncatedStartValue = truncateISODateString(range.start.valueAsISOString ?? '', basicType);
70
+ const truncatedEndValue = truncateISODateString(range.end.valueAsISOString ?? '', basicType);
71
+ return {
72
+ start: fieldType === 'TIME_ONLY'
73
+ ? convertTimeValueToMs(truncatedStartValue)
74
+ : truncatedStartValue,
75
+ end: fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedEndValue) : truncatedEndValue
76
+ };
38
77
  };
39
78
  const createConditionForRange = (value) => {
79
+ if (!value || value.start === undefined || value.end === undefined)
80
+ return;
40
81
  return {
41
82
  lhs: { field: fieldName },
42
83
  comparator: defaultComparators[fieldType],
43
- rhs: value
84
+ // undefined checked before, type added to satisfy typescript
85
+ rhs: { ...value }
44
86
  };
45
87
  };
46
88
  const validComparators = fieldType === 'PICKLIST' ? [{ type: 'TEXT', comparators: ['IN'] }] : undefined;
@@ -49,6 +91,10 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
49
91
  ? undefined
50
92
  : getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']), validComparators));
51
93
  const [newCondition, setNewCondition] = useState(condition);
94
+ // holds current status of condition to control if invalid values are kept in forms and errors are displaying
95
+ const newConditionStatus = useRef(undefined);
96
+ // status of the form control
97
+ const [status, setStatus] = useState(undefined);
52
98
  let rhsValue = fieldType === 'PICKLIST' ? [] : undefined;
53
99
  let rhsRangeValue;
54
100
  if (condition?.rhs) {
@@ -65,22 +111,59 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
65
111
  const [inputValue, setInputValue] = useState(rhsValue);
66
112
  const [rangeInputValue, setRangeInputValue] = useState(rhsRangeValue);
67
113
  useEffect(() => {
68
- setNewCondition(condition);
114
+ // condition state is updated only when condition status is valid
115
+ // allows to keep invalid values in inputs
116
+ if (!newConditionStatus.current)
117
+ setNewCondition(condition);
69
118
  setInputValue(rhsValue);
70
119
  setRangeInputValue(rhsRangeValue);
71
120
  }, [conditionProp]);
72
121
  const handleBlur = () => {
73
122
  const newValue = typeof inputValue === 'string' ? inputValue.trim() : inputValue;
74
123
  // trigger onChange only when value has changed
75
- if (!compareValues(rhsValue, newValue)) {
124
+ if (!valuesEqual(rhsValue, newValue)) {
76
125
  onChange(newValue ? createConditionForDefaultMode(newValue) : undefined);
77
126
  }
78
127
  };
79
- const handleRangeBlur = (newRangeValue) => {
128
+ const handleRangeUpdate = (newRangeValue) => {
80
129
  // trigger onChange only when value has changed
81
- if (!compareRangeValues(rhsRangeValue, newRangeValue)) {
82
- onChange(newRangeValue ? createConditionForRange(newRangeValue) : undefined);
130
+ if (!rangeValuesEqual(rhsRangeValue, newRangeValue)) {
131
+ onChange(createConditionForRange(newRangeValue));
132
+ }
133
+ };
134
+ const handleRangeBlur = (newRangeValue) => {
135
+ // if both values are undefined, condition is treated as undefined
136
+ // if only one value is undefined, condition is treated as invalid
137
+ if (newRangeValue &&
138
+ ((newRangeValue.start === undefined && newRangeValue.end !== undefined) ||
139
+ (newRangeValue.end === undefined && newRangeValue.start !== undefined) ||
140
+ (typeof newRangeValue.start === 'number' &&
141
+ typeof newRangeValue.end === 'number' &&
142
+ newRangeValue.start &&
143
+ newRangeValue.end &&
144
+ newRangeValue.start > newRangeValue.end))) {
145
+ setStatus('error');
146
+ }
147
+ else {
148
+ setStatus(undefined);
149
+ }
150
+ handleRangeUpdate(newRangeValue);
151
+ };
152
+ const handleDateRangeBlur = (newRangeValue) => {
153
+ // if both timestamps are undefined, condition is treated as undefined
154
+ // if only one value is undefined, or any of them is invalid, then condition is treated as invalid
155
+ if (((newRangeValue.start.valueAsTimestamp !== undefined ||
156
+ newRangeValue.end.valueAsTimestamp !== undefined) &&
157
+ (!isDateValid(newRangeValue.start) || !isDateValid(newRangeValue.end))) ||
158
+ (newRangeValue.start.valueAsTimestamp &&
159
+ newRangeValue.end.valueAsTimestamp &&
160
+ newRangeValue.start.valueAsTimestamp > newRangeValue.end.valueAsTimestamp)) {
161
+ setStatus('error');
162
+ }
163
+ else {
164
+ setStatus(undefined);
83
165
  }
166
+ handleRangeUpdate(convertDateTimeValue(newRangeValue));
84
167
  };
85
168
  const onRadioButtonChange = (value) => {
86
169
  const updatedCondition = value === undefined
@@ -91,17 +174,26 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
91
174
  };
92
175
  onChange(updatedCondition);
93
176
  };
94
- const onClear = () => {
177
+ const clearHandle = useRef(null);
178
+ const clear = () => {
95
179
  onChange(undefined);
96
- setNewCondition(condition);
180
+ setNewCondition(undefined);
181
+ setRangeInputValue(undefined);
182
+ newConditionStatus.current = undefined;
183
+ setStatus(undefined);
184
+ if (clearHandle.current)
185
+ clearHandle.current.clear();
97
186
  };
187
+ useImperativeHandle(handle, () => ({
188
+ clear
189
+ }), [clear]);
98
190
  const handleDateRangeValueChange = (value) => {
99
191
  setRangeInputValue({
100
192
  start: value.start.valueAsISOString || undefined,
101
193
  end: value.end.valueAsISOString || undefined
102
194
  });
103
195
  };
104
- const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN' && fieldType !== 'PICKLIST';
196
+ const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN';
105
197
  let defaultControl = null;
106
198
  const valueToSet = typeof inputValue === 'string' ? inputValue : undefined;
107
199
  if (!showAdvanced) {
@@ -114,13 +206,11 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
114
206
  start: rangeInputValue?.start?.toString() ?? '',
115
207
  end: rangeInputValue?.end?.toString() ?? ''
116
208
  }, onChange: setRangeInputValue, onBlur: newRangeValue => {
117
- handleRangeBlur(newRangeValue.start && newRangeValue.end
118
- ? {
119
- start: Number(newRangeValue.start),
120
- end: Number(newRangeValue.end)
121
- }
122
- : undefined);
123
- }, numberOfDecimals: fieldType === 'INTEGER' ? 0 : undefined }));
209
+ handleRangeBlur({
210
+ start: newRangeValue.start ? Number(newRangeValue.start) : undefined,
211
+ end: newRangeValue.end ? Number(newRangeValue.end) : undefined
212
+ });
213
+ }, numberOfDecimals: fieldType === 'INTEGER' ? 0 : undefined, status: status, info: status === 'error' ? t('condition_builder_invalid_number_range') : undefined, handle: clearHandle }));
124
214
  break;
125
215
  case 'BOOLEAN':
126
216
  defaultControl = (_jsxs(RadioButtonGroup, { as: StyledConditionRadioGroup, id: id, ref: ref, label: label, labelHidden: flat, name: fieldName, inline: true, children: [_jsx(RadioButton, { label: t('show_all'), checked: condition === undefined, onChange: () => onRadioButtonChange() }), _jsx(RadioButton, { label: t('boolean_display_true_label'), checked: condition?.comparator === 'IS_TRUE', onChange: () => onRadioButtonChange(true) }), _jsx(RadioButton, { label: t('boolean_display_false_label'), checked: condition?.comparator === 'IS_FALSE', onChange: () => onRadioButtonChange(false) })] }));
@@ -128,43 +218,22 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
128
218
  case 'DATE_ONLY':
129
219
  defaultControl = (_jsx(DateRangeInput, { id: id, ref: ref, label: label, labelHidden: flat, value: rangeInputValue
130
220
  ? { start: rangeInputValue.start, end: rangeInputValue.end }
131
- : undefined, onChange: handleDateRangeValueChange, onBlur: newRangeValue => {
132
- handleRangeBlur(newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString
133
- ? {
134
- start: convertDateTimeValue(newRangeValue.start.valueAsISOString),
135
- end: convertDateTimeValue(newRangeValue.end.valueAsISOString)
136
- }
137
- : undefined);
138
- }, fromLabel: '', toLabel: '', info: '' }));
221
+ : undefined, onChange: handleDateRangeValueChange, onBlur: handleDateRangeBlur, fromLabel: '', toLabel: '', status: status, info: status === 'error' ? t('condition_builder_invalid_date_range') : undefined, handle: clearHandle }));
139
222
  break;
140
223
  case 'TIME_ONLY':
141
224
  defaultControl = (_jsx(TimeRangeInput, { id: id, ref: ref, mode: 'time', label: label, labelHidden: flat, value: rangeInputValue
142
225
  ? { start: rangeInputValue.start, end: rangeInputValue.end }
143
- : undefined, onChange: handleDateRangeValueChange, onBlur: newRangeValue => {
144
- handleRangeBlur(newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString
145
- ? {
146
- start: convertDateTimeValue(newRangeValue.start.valueAsISOString),
147
- end: convertDateTimeValue(newRangeValue.end.valueAsISOString)
148
- }
149
- : undefined);
150
- }, info: '' }));
226
+ : undefined, onChange: handleDateRangeValueChange, onBlur: handleDateRangeBlur, status: status, info: status === 'error' ? t('condition_builder_invalid_time_range') : undefined, handle: clearHandle }));
151
227
  break;
152
228
  case 'DATE_TIME':
153
229
  defaultControl = (_jsx(TimeRangeInput, { id: id, ref: ref, mode: 'datetime', label: label, labelHidden: flat, value: rangeInputValue
154
230
  ? { start: rangeInputValue.start, end: rangeInputValue.end }
155
- : undefined, onChange: handleDateRangeValueChange, onBlur: newRangeValue => {
156
- handleRangeBlur(newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString
157
- ? {
158
- start: convertDateTimeValue(newRangeValue.start.valueAsISOString),
159
- end: convertDateTimeValue(newRangeValue.end.valueAsISOString)
160
- }
161
- : undefined);
162
- }, info: '' }));
231
+ : undefined, onChange: handleDateRangeValueChange, onBlur: handleDateRangeBlur, status: status, info: status === 'error' ? t('condition_builder_invalid_date_range') : undefined, handle: clearHandle }));
163
232
  break;
164
233
  case 'PICKLIST':
165
- defaultControl = (_jsx(ValueSelector, { label: flat ? undefined : label, mode: 'multi-select', values: inputValue ?? [], selectedField: fieldProp, comparator: condition?.comparator ?? defaultComparators[fieldType], onChange: value => {
234
+ defaultControl = (_jsx(ValueSelector, { label: flat ? undefined : label, mode: 'multi-select', values: inputValue ?? [], selectedField: { id: fieldName, ...fieldProp }, comparator: condition?.comparator ?? defaultComparators[fieldType], onChange: value => {
166
235
  setInputValue(value.length > 0 ? value : undefined);
167
- }, onBlur: handleBlur, onClear: onClear, placeholder: t('all'), parameters: [], rhs: { values: [] } }));
236
+ }, onBlur: handleBlur, onClear: clear, placeholder: t('all'), parameters: [], rhs: { values: [] }, handle: clearHandle }));
168
237
  break;
169
238
  case 'TEXT':
170
239
  case 'EMAIL':
@@ -184,25 +253,43 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
184
253
  onChange: setNewCondition,
185
254
  itemDirection: 'column',
186
255
  lhsMode: 'hidden',
187
- validRhsTypes: new Set(['LITERAL']),
188
- indicateErrors: false,
189
- rhsLabelHidden: true
256
+ validRhsTypes,
257
+ dateFunctions,
258
+ indicateErrors: !!status
190
259
  },
191
260
  onCancel: ({ close }) => {
192
261
  setNewCondition(condition);
262
+ setStatus(undefined);
193
263
  close();
194
264
  },
195
265
  onApply: ({ close }) => {
196
- onChange(newCondition && isValidCondition(newCondition, fields, true) ? newCondition : undefined);
197
- close();
266
+ setStatus(undefined);
267
+ if (newCondition === undefined ||
268
+ // Avoid trimming values if they did not change.
269
+ isValidCondition(newCondition, fields, !conditionsEqual(condition, newCondition))) {
270
+ onChange(newCondition);
271
+ close();
272
+ }
273
+ else {
274
+ setStatus('error');
275
+ }
198
276
  }
199
277
  };
200
278
  if (flat) {
201
- return showAdvanced ? (_jsx(StyledAtomicCondition, { collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: onClear }], condition: newCondition ??
202
- getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])), onChange: onChange, fields: fields, itemDirection: 'column', lhsMode: 'label', validRhsTypes: new Set(['LITERAL']), indicateErrors: false })) : (_jsx(StyledFieldGroup, { name: label, collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: onClear }], children: defaultControl }));
279
+ return showAdvanced ? (_jsx(StyledVerticalAtomicCondition, { collapsed: collapsed, onToggleCollapsed: () => setCollapsed(cur => !cur), actions: [{ id: 'clear', text: t('clear'), onClick: clear }], condition: newCondition ??
280
+ getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])), onBlur: (value) => {
281
+ // comparing with conditionProp as it is not initialized as default condition
282
+ if (!conditionsEqual(value, conditionProp)) {
283
+ onChange(value);
284
+ }
285
+ setStatus(newConditionStatus.current);
286
+ }, onChange: (value, conditionStatus) => {
287
+ newConditionStatus.current = conditionStatus;
288
+ setNewCondition(value);
289
+ }, fields: fields, itemDirection: 'column', lhsMode: 'label', validRhsTypes: validRhsTypes, dateFunctions: dateFunctions, indicateErrors: status === 'error', ref: ref, handle: clearHandle })) : (_jsx(StyledVerticalFieldGroup, { name: label, collapsed: collapsed, onToggleCollapsed: () => setCollapsed(cur => !cur), actions: [{ id: 'clear', text: t('clear'), onClick: clear }], children: defaultControl }));
203
290
  }
204
291
  if (showAdvanced) {
205
- return (_jsx(CompositeInput, { dialog: dialog, label: label, onClear: onClear, value: conditionProp
292
+ return (_jsx(CompositeInput, { dialog: dialog, label: label, onClear: clear, value: conditionProp
206
293
  ? formatCondition({ condition: conditionProp }, fields, t, {
207
294
  locale,
208
295
  omitLhs: true
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useEffect\n} from 'react';\n\nimport {\n CompositeInput,\n CompositeInputProps,\n ForwardProps,\n hasProp,\n Input,\n RadioButton,\n useI18n,\n useConfiguration,\n DateRangeInput,\n TimeRangeInput,\n useUID,\n NumberRangeInput,\n RadioButtonGroup\n} from '@pega/cosmos-react-core';\nimport { DateRangeCallbackParameter } from '@pega/cosmos-react-core/lib/components/DateTime/DateTime.types';\n\nimport type { ComparatorsByType } from '../ConditionBuilder/core/types';\nimport AtomicCondition, {\n AtomicConditionProps,\n getInitConditionForLhs,\n isValidCondition\n} from '../ConditionBuilder/AtomicCondition';\nimport formatCondition from '../ConditionBuilder/core/formatter';\nimport type { Field, LeafCondition } from '../ConditionBuilder/ConditionBuilder.types';\nimport ValueSelector from '../ConditionBuilder/RhsControls/ValueSelector';\nimport { truncateISODateString } from '../ConditionBuilder/RhsControls';\nimport { convertTimeValueToMs } from '../ConditionBuilder/core/time-utils';\n\nimport type { ConditionInputProps } from './ConditionInput.types';\nimport {\n StyledConditionRadioGroup,\n StyledAtomicCondition,\n StyledFieldGroup\n} from './ConditionInput.styles';\nimport { basicFieldMap, defaultComparators, compareValues, compareRangeValues } from './utils';\n\nconst ConditionInput: FunctionComponent<ConditionInputProps & ForwardProps> = forwardRef(\n (\n {\n field: fieldProp,\n condition: conditionProp,\n label,\n mode,\n onChange,\n flat = false\n }: PropsWithoutRef<ConditionInputProps>,\n ref: ConditionInputProps['ref']\n ) => {\n const id = useUID();\n const t = useI18n();\n const { locale } = useConfiguration();\n\n const { name: fieldName, type: fieldType } = fieldProp;\n const basicType = basicFieldMap[fieldType] ?? fieldType;\n\n const field: Field = {\n id: fieldName,\n type: basicType,\n primary: label ?? fieldName\n };\n\n const fields: AtomicConditionProps['fields'] = [field];\n\n const createConditionForDefaultMode = (value: string | string[]): LeafCondition => {\n let valueObj: LeafCondition['rhs'];\n if (Array.isArray(value)) valueObj = { values: value };\n else valueObj = { value };\n\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: valueObj\n };\n };\n\n const convertDateTimeValue = (value: string) => {\n const truncatedValue = truncateISODateString(value, basicType);\n return fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedValue) : truncatedValue;\n };\n\n const createConditionForRange = (value: {\n start: string | number;\n end: string | number;\n }): LeafCondition => {\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: value\n };\n };\n\n const validComparators: ComparatorsByType[] | undefined =\n fieldType === 'PICKLIST' ? [{ type: 'TEXT', comparators: ['IN'] }] : undefined;\n\n const condition =\n conditionProp ??\n (fieldType === 'BOOLEAN'\n ? undefined\n : getInitConditionForLhs(\n { field: fieldName },\n fields,\n new Set(['LITERAL']),\n validComparators\n ));\n\n const [newCondition, setNewCondition] = useState<LeafCondition | undefined>(condition);\n\n let rhsValue: string | string[] | undefined = fieldType === 'PICKLIST' ? [] : undefined;\n let rhsRangeValue:\n | { start: string | number | undefined; end: string | number | undefined }\n | undefined;\n\n if (condition?.rhs) {\n if (hasProp(condition.rhs, 'value')) {\n rhsValue = condition.rhs.value.toString();\n } else if (hasProp(condition.rhs, 'values')) {\n rhsValue = condition.rhs.values.map(String);\n } else if (hasProp(condition.rhs, 'start')) {\n rhsRangeValue = { start: condition.rhs.start, end: condition.rhs.end };\n }\n }\n\n const [inputValue, setInputValue] = useState(rhsValue);\n const [rangeInputValue, setRangeInputValue] = useState(rhsRangeValue);\n\n useEffect(() => {\n setNewCondition(condition);\n setInputValue(rhsValue);\n setRangeInputValue(rhsRangeValue);\n }, [conditionProp]);\n\n const handleBlur = () => {\n const newValue = typeof inputValue === 'string' ? inputValue.trim() : inputValue;\n // trigger onChange only when value has changed\n if (!compareValues(rhsValue, newValue)) {\n onChange(newValue ? createConditionForDefaultMode(newValue) : undefined);\n }\n };\n\n const handleRangeBlur = (newRangeValue?: { start: string | number; end: string | number }) => {\n // trigger onChange only when value has changed\n if (!compareRangeValues(rhsRangeValue, newRangeValue)) {\n onChange(newRangeValue ? createConditionForRange(newRangeValue) : undefined);\n }\n };\n\n const onRadioButtonChange = (value?: boolean) => {\n const updatedCondition: LeafCondition | undefined =\n value === undefined\n ? undefined\n : {\n lhs: { field: fieldName },\n comparator: value ? 'IS_TRUE' : 'IS_FALSE'\n };\n onChange(updatedCondition);\n };\n\n const onClear = () => {\n onChange(undefined);\n setNewCondition(condition);\n };\n\n const handleDateRangeValueChange = (value: DateRangeCallbackParameter) => {\n setRangeInputValue({\n start: value.start.valueAsISOString || undefined,\n end: value.end.valueAsISOString || undefined\n });\n };\n\n const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN' && fieldType !== 'PICKLIST';\n\n let defaultControl: JSX.Element | null = null;\n\n const valueToSet = typeof inputValue === 'string' ? inputValue : undefined;\n\n if (!showAdvanced) {\n switch (fieldType) {\n case 'INTEGER':\n case 'DECIMAL':\n case 'PERCENTAGE':\n case 'CURRENCY':\n defaultControl = (\n <NumberRangeInput\n id={id}\n label={label}\n labelHidden={flat}\n ref={ref}\n value={{\n start: rangeInputValue?.start?.toString() ?? '',\n end: rangeInputValue?.end?.toString() ?? ''\n }}\n onChange={setRangeInputValue}\n onBlur={newRangeValue => {\n handleRangeBlur(\n newRangeValue.start && newRangeValue.end\n ? {\n start: Number(newRangeValue.start),\n end: Number(newRangeValue.end)\n }\n : undefined\n );\n }}\n numberOfDecimals={fieldType === 'INTEGER' ? 0 : undefined}\n />\n );\n break;\n case 'BOOLEAN':\n defaultControl = (\n <RadioButtonGroup\n as={StyledConditionRadioGroup}\n id={id}\n ref={ref}\n label={label}\n labelHidden={flat}\n name={fieldName}\n inline\n >\n <RadioButton\n label={t('show_all')}\n checked={condition === undefined}\n onChange={() => onRadioButtonChange()}\n />\n <RadioButton\n label={t('boolean_display_true_label')}\n checked={condition?.comparator === 'IS_TRUE'}\n onChange={() => onRadioButtonChange(true)}\n />\n <RadioButton\n label={t('boolean_display_false_label')}\n checked={condition?.comparator === 'IS_FALSE'}\n onChange={() => onRadioButtonChange(false)}\n />\n </RadioButtonGroup>\n );\n break;\n case 'DATE_ONLY':\n defaultControl = (\n <DateRangeInput\n id={id}\n ref={ref}\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={newRangeValue => {\n handleRangeBlur(\n newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString\n ? {\n start: convertDateTimeValue(newRangeValue.start.valueAsISOString),\n end: convertDateTimeValue(newRangeValue.end.valueAsISOString)\n }\n : undefined\n );\n }}\n fromLabel=''\n toLabel=''\n info=''\n />\n );\n break;\n case 'TIME_ONLY':\n defaultControl = (\n <TimeRangeInput\n id={id}\n ref={ref}\n mode='time'\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={newRangeValue => {\n handleRangeBlur(\n newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString\n ? {\n start: convertDateTimeValue(newRangeValue.start.valueAsISOString),\n end: convertDateTimeValue(newRangeValue.end.valueAsISOString)\n }\n : undefined\n );\n }}\n info=''\n />\n );\n break;\n case 'DATE_TIME':\n defaultControl = (\n <TimeRangeInput\n id={id}\n ref={ref}\n mode='datetime'\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={newRangeValue => {\n handleRangeBlur(\n newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString\n ? {\n start: convertDateTimeValue(newRangeValue.start.valueAsISOString),\n end: convertDateTimeValue(newRangeValue.end.valueAsISOString)\n }\n : undefined\n );\n }}\n info=''\n />\n );\n break;\n case 'PICKLIST':\n defaultControl = (\n <ValueSelector\n label={flat ? undefined : label}\n mode='multi-select'\n values={inputValue ?? []}\n selectedField={fieldProp}\n comparator={condition?.comparator ?? defaultComparators[fieldType]}\n onChange={value => {\n setInputValue(value.length > 0 ? value : undefined);\n }}\n onBlur={handleBlur}\n onClear={onClear}\n placeholder={t('all')}\n parameters={[]}\n rhs={{ values: [] }}\n />\n );\n break;\n case 'TEXT':\n case 'EMAIL':\n case 'URL':\n case 'PHONE':\n default:\n defaultControl = (\n <Input\n id={id}\n ref={ref}\n label={label}\n labelHidden={flat}\n value={valueToSet}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setInputValue(e.target.value)}\n onBlur={handleBlur}\n />\n );\n break;\n }\n }\n\n const dialog: CompositeInputProps<AtomicConditionProps & ForwardProps>['dialog'] = {\n renderer: AtomicCondition,\n rendererProps: {\n condition:\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])),\n fields,\n onChange: setNewCondition,\n itemDirection: 'column',\n lhsMode: 'hidden',\n validRhsTypes: new Set(['LITERAL']),\n indicateErrors: false,\n rhsLabelHidden: true\n },\n onCancel: ({ close }) => {\n setNewCondition(condition);\n close();\n },\n onApply: ({ close }) => {\n onChange(\n newCondition && isValidCondition(newCondition, fields, true) ? newCondition : undefined\n );\n close();\n }\n };\n\n if (flat) {\n return showAdvanced ? (\n <StyledAtomicCondition\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n condition={\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']))\n }\n onChange={onChange}\n fields={fields}\n itemDirection='column'\n lhsMode='label'\n validRhsTypes={new Set(['LITERAL'])}\n indicateErrors={false}\n />\n ) : (\n <StyledFieldGroup\n name={label}\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n >\n {defaultControl}\n </StyledFieldGroup>\n );\n }\n\n if (showAdvanced) {\n return (\n <CompositeInput\n dialog={dialog}\n label={label}\n onClear={onClear}\n value={\n conditionProp\n ? formatCondition({ condition: conditionProp }, fields, t, {\n locale,\n omitLhs: true\n })\n : undefined\n }\n placeholder={t('all')}\n ref={ref}\n />\n );\n }\n\n return defaultControl;\n }\n);\n\nexport default ConditionInput;\n"]}
1
+ {"version":3,"file":"ConditionInput.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useEffect,\n useImperativeHandle,\n useRef\n} from 'react';\n\nimport {\n CompositeInput,\n CompositeInputProps,\n ForwardProps,\n hasProp,\n Input,\n RadioButton,\n useI18n,\n useConfiguration,\n DateRangeInput,\n TimeRangeInput,\n useUID,\n NumberRangeInput,\n RadioButtonGroup,\n FormControlProps,\n HandleValue\n} from '@pega/cosmos-react-core';\nimport {\n DateRangeCallbackParameter,\n DateTimeCallbackParameter\n} from '@pega/cosmos-react-core/lib/components/DateTime/DateTime.types';\n\nimport type { ComparatorsByType, RHSType } from '../ConditionBuilder/core/types';\nimport AtomicCondition, {\n AtomicConditionProps,\n getInitConditionForLhs,\n isValidCondition\n} from '../ConditionBuilder/AtomicCondition';\nimport formatCondition from '../ConditionBuilder/core/formatter';\nimport type {\n DateFunctionsByType,\n Field,\n LeafCondition\n} from '../ConditionBuilder/ConditionBuilder.types';\nimport ValueSelector from '../ConditionBuilder/RhsControls/ValueSelector';\nimport { truncateISODateString } from '../ConditionBuilder/RhsControls';\nimport { convertTimeValueToMs } from '../ConditionBuilder/core/time-utils';\n\nimport type { ConditionInputProps } from './ConditionInput.types';\nimport {\n StyledVerticalAtomicCondition,\n StyledConditionRadioGroup,\n StyledVerticalFieldGroup\n} from './ConditionInput.styles';\nimport {\n basicFieldMap,\n defaultComparators,\n valuesEqual,\n rangeValuesEqual,\n conditionsEqual,\n possibleFieldValuesToConditionFieldValues\n} from './utils';\n\nconst isDateValid = (dateTimeParam: DateTimeCallbackParameter) => {\n return dateTimeParam.valueAsISOString && !dateTimeParam.state;\n};\n\nconst validRhsTypes = new Set<RHSType>(['LITERAL', 'RELATIVE_DATE', 'DATE_FUNCTION']);\n\nconst dateFunctions: DateFunctionsByType = {\n DATE_TIME: [\n 'YEARS',\n 'QUARTERS',\n 'MONTHS',\n 'WEEKS',\n 'DAYS',\n 'HOURS',\n 'MINUTES',\n 'SECONDS',\n 'MONTHS_OF_YEAR',\n 'DAYS_OF_MONTH',\n 'DAYS_OF_WEEK',\n 'HOURS_OF_DAY'\n ],\n DATE_ONLY: [\n 'YEARS',\n 'QUARTERS',\n 'MONTHS',\n 'WEEKS',\n 'MONTHS_OF_YEAR',\n 'DAYS_OF_MONTH',\n 'DAYS_OF_WEEK'\n ]\n};\n\nconst ConditionInput: FunctionComponent<ConditionInputProps & ForwardProps> = forwardRef(\n (\n {\n field: fieldProp,\n condition: conditionProp,\n label,\n mode,\n onChange,\n flat = false,\n handle\n }: PropsWithoutRef<ConditionInputProps>,\n ref: ConditionInputProps['ref']\n ) => {\n const id = useUID();\n const t = useI18n();\n const { locale } = useConfiguration();\n const [collapsed, setCollapsed] = useState(false);\n\n const { name: fieldName, type: fieldType } = fieldProp;\n const basicType = basicFieldMap[fieldType] ?? fieldType;\n\n const field: Field = {\n id: fieldName,\n type: basicType,\n primary: label ?? fieldName,\n possibleValues: possibleFieldValuesToConditionFieldValues(fieldProp.possibleValues)\n };\n\n const fields: AtomicConditionProps['fields'] = [field];\n\n const createConditionForDefaultMode = (value: string | string[]): LeafCondition => {\n let valueObj: LeafCondition['rhs'];\n if (Array.isArray(value)) valueObj = { values: value };\n else valueObj = { value };\n\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: valueObj\n };\n };\n\n const convertDateTimeValue = (range: DateRangeCallbackParameter) => {\n if (!isDateValid(range.start) || !isDateValid(range.end)) return undefined;\n\n const truncatedStartValue = truncateISODateString(\n range.start.valueAsISOString ?? '',\n basicType\n );\n const truncatedEndValue = truncateISODateString(range.end.valueAsISOString ?? '', basicType);\n return {\n start:\n fieldType === 'TIME_ONLY'\n ? convertTimeValueToMs(truncatedStartValue)\n : truncatedStartValue,\n end: fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedEndValue) : truncatedEndValue\n };\n };\n\n const createConditionForRange = (\n value:\n | {\n start: string | number | undefined;\n end: string | number | undefined;\n }\n | undefined\n ): LeafCondition | undefined => {\n if (!value || value.start === undefined || value.end === undefined) return;\n\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n // undefined checked before, type added to satisfy typescript\n rhs: { ...value } as { start: string | number; end: string | number }\n };\n };\n\n const validComparators: ComparatorsByType[] | undefined =\n fieldType === 'PICKLIST' ? [{ type: 'TEXT', comparators: ['IN'] }] : undefined;\n\n const condition =\n conditionProp ??\n (fieldType === 'BOOLEAN'\n ? undefined\n : getInitConditionForLhs(\n { field: fieldName },\n fields,\n new Set(['LITERAL']),\n validComparators\n ));\n\n const [newCondition, setNewCondition] = useState<LeafCondition | undefined>(condition);\n\n // holds current status of condition to control if invalid values are kept in forms and errors are displaying\n const newConditionStatus = useRef<'error' | undefined>(undefined);\n\n // status of the form control\n const [status, setStatus] = useState<FormControlProps['status']>(undefined);\n\n let rhsValue: string | string[] | undefined = fieldType === 'PICKLIST' ? [] : undefined;\n let rhsRangeValue:\n | { start: string | number | undefined; end: string | number | undefined }\n | undefined;\n\n if (condition?.rhs) {\n if (hasProp(condition.rhs, 'value')) {\n rhsValue = condition.rhs.value.toString();\n } else if (hasProp(condition.rhs, 'values')) {\n rhsValue = condition.rhs.values.map(String);\n } else if (hasProp(condition.rhs, 'start')) {\n rhsRangeValue = { start: condition.rhs.start, end: condition.rhs.end };\n }\n }\n\n const [inputValue, setInputValue] = useState(rhsValue);\n const [rangeInputValue, setRangeInputValue] = useState(rhsRangeValue);\n\n useEffect(() => {\n // condition state is updated only when condition status is valid\n // allows to keep invalid values in inputs\n if (!newConditionStatus.current) setNewCondition(condition);\n setInputValue(rhsValue);\n setRangeInputValue(rhsRangeValue);\n }, [conditionProp]);\n\n const handleBlur = () => {\n const newValue = typeof inputValue === 'string' ? inputValue.trim() : inputValue;\n // trigger onChange only when value has changed\n if (!valuesEqual(rhsValue, newValue)) {\n onChange(newValue ? createConditionForDefaultMode(newValue) : undefined);\n }\n };\n\n const handleRangeUpdate = (newRangeValue?: {\n start: string | number | undefined;\n end: string | number | undefined;\n }) => {\n // trigger onChange only when value has changed\n if (!rangeValuesEqual(rhsRangeValue, newRangeValue)) {\n onChange(createConditionForRange(newRangeValue));\n }\n };\n\n const handleRangeBlur = (newRangeValue?: {\n start: number | undefined;\n end: number | undefined;\n }) => {\n // if both values are undefined, condition is treated as undefined\n // if only one value is undefined, condition is treated as invalid\n\n if (\n newRangeValue &&\n ((newRangeValue.start === undefined && newRangeValue.end !== undefined) ||\n (newRangeValue.end === undefined && newRangeValue.start !== undefined) ||\n (typeof newRangeValue.start === 'number' &&\n typeof newRangeValue.end === 'number' &&\n newRangeValue.start &&\n newRangeValue.end &&\n newRangeValue.start > newRangeValue.end))\n ) {\n setStatus('error');\n } else {\n setStatus(undefined);\n }\n\n handleRangeUpdate(newRangeValue);\n };\n\n const handleDateRangeBlur = (newRangeValue: DateRangeCallbackParameter) => {\n // if both timestamps are undefined, condition is treated as undefined\n // if only one value is undefined, or any of them is invalid, then condition is treated as invalid\n if (\n ((newRangeValue.start.valueAsTimestamp !== undefined ||\n newRangeValue.end.valueAsTimestamp !== undefined) &&\n (!isDateValid(newRangeValue.start) || !isDateValid(newRangeValue.end))) ||\n (newRangeValue.start.valueAsTimestamp &&\n newRangeValue.end.valueAsTimestamp &&\n newRangeValue.start.valueAsTimestamp > newRangeValue.end.valueAsTimestamp)\n ) {\n setStatus('error');\n } else {\n setStatus(undefined);\n }\n\n handleRangeUpdate(convertDateTimeValue(newRangeValue));\n };\n\n const onRadioButtonChange = (value?: boolean) => {\n const updatedCondition: LeafCondition | undefined =\n value === undefined\n ? undefined\n : {\n lhs: { field: fieldName },\n comparator: value ? 'IS_TRUE' : 'IS_FALSE'\n };\n onChange(updatedCondition);\n };\n\n const clearHandle = useRef<HandleValue>(null);\n\n const clear = () => {\n onChange(undefined);\n setNewCondition(undefined);\n setRangeInputValue(undefined);\n newConditionStatus.current = undefined;\n setStatus(undefined);\n if (clearHandle.current) clearHandle.current.clear();\n };\n\n useImperativeHandle(\n handle,\n () => ({\n clear\n }),\n [clear]\n );\n\n const handleDateRangeValueChange = (value: DateRangeCallbackParameter) => {\n setRangeInputValue({\n start: value.start.valueAsISOString || undefined,\n end: value.end.valueAsISOString || undefined\n });\n };\n\n const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN';\n\n let defaultControl: JSX.Element | null = null;\n\n const valueToSet = typeof inputValue === 'string' ? inputValue : undefined;\n\n if (!showAdvanced) {\n switch (fieldType) {\n case 'INTEGER':\n case 'DECIMAL':\n case 'PERCENTAGE':\n case 'CURRENCY':\n defaultControl = (\n <NumberRangeInput\n id={id}\n label={label}\n labelHidden={flat}\n ref={ref}\n value={{\n start: rangeInputValue?.start?.toString() ?? '',\n end: rangeInputValue?.end?.toString() ?? ''\n }}\n onChange={setRangeInputValue}\n onBlur={newRangeValue => {\n handleRangeBlur({\n start: newRangeValue.start ? Number(newRangeValue.start) : undefined,\n end: newRangeValue.end ? Number(newRangeValue.end) : undefined\n });\n }}\n numberOfDecimals={fieldType === 'INTEGER' ? 0 : undefined}\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_number_range') : undefined}\n handle={clearHandle}\n />\n );\n break;\n case 'BOOLEAN':\n defaultControl = (\n <RadioButtonGroup\n as={StyledConditionRadioGroup}\n id={id}\n ref={ref}\n label={label}\n labelHidden={flat}\n name={fieldName}\n inline\n >\n <RadioButton\n label={t('show_all')}\n checked={condition === undefined}\n onChange={() => onRadioButtonChange()}\n />\n <RadioButton\n label={t('boolean_display_true_label')}\n checked={condition?.comparator === 'IS_TRUE'}\n onChange={() => onRadioButtonChange(true)}\n />\n <RadioButton\n label={t('boolean_display_false_label')}\n checked={condition?.comparator === 'IS_FALSE'}\n onChange={() => onRadioButtonChange(false)}\n />\n </RadioButtonGroup>\n );\n break;\n case 'DATE_ONLY':\n defaultControl = (\n <DateRangeInput\n id={id}\n ref={ref}\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={handleDateRangeBlur}\n fromLabel=''\n toLabel=''\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_date_range') : undefined}\n handle={clearHandle}\n />\n );\n break;\n case 'TIME_ONLY':\n defaultControl = (\n <TimeRangeInput\n id={id}\n ref={ref}\n mode='time'\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={handleDateRangeBlur}\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_time_range') : undefined}\n handle={clearHandle}\n />\n );\n break;\n case 'DATE_TIME':\n defaultControl = (\n <TimeRangeInput\n id={id}\n ref={ref}\n mode='datetime'\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={handleDateRangeBlur}\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_date_range') : undefined}\n handle={clearHandle}\n />\n );\n break;\n case 'PICKLIST':\n defaultControl = (\n <ValueSelector\n label={flat ? undefined : label}\n mode='multi-select'\n values={inputValue ?? []}\n selectedField={{ id: fieldName, ...fieldProp }}\n comparator={condition?.comparator ?? defaultComparators[fieldType]}\n onChange={value => {\n setInputValue(value.length > 0 ? value : undefined);\n }}\n onBlur={handleBlur}\n onClear={clear}\n placeholder={t('all')}\n parameters={[]}\n rhs={{ values: [] }}\n handle={clearHandle}\n />\n );\n break;\n case 'TEXT':\n case 'EMAIL':\n case 'URL':\n case 'PHONE':\n default:\n defaultControl = (\n <Input\n id={id}\n ref={ref}\n label={label}\n labelHidden={flat}\n value={valueToSet}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setInputValue(e.target.value)}\n onBlur={handleBlur}\n />\n );\n break;\n }\n }\n\n const dialog: CompositeInputProps<AtomicConditionProps & ForwardProps>['dialog'] = {\n renderer: AtomicCondition,\n rendererProps: {\n condition:\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])),\n fields,\n onChange: setNewCondition,\n itemDirection: 'column',\n lhsMode: 'hidden',\n validRhsTypes,\n dateFunctions,\n indicateErrors: !!status\n },\n onCancel: ({ close }) => {\n setNewCondition(condition);\n setStatus(undefined);\n close();\n },\n onApply: ({ close }) => {\n setStatus(undefined);\n if (\n newCondition === undefined ||\n // Avoid trimming values if they did not change.\n isValidCondition(newCondition, fields, !conditionsEqual(condition, newCondition))\n ) {\n onChange(newCondition);\n close();\n } else {\n setStatus('error');\n }\n }\n };\n\n if (flat) {\n return showAdvanced ? (\n <StyledVerticalAtomicCondition\n collapsed={collapsed}\n onToggleCollapsed={() => setCollapsed(cur => !cur)}\n actions={[{ id: 'clear', text: t('clear'), onClick: clear }]}\n condition={\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']))\n }\n onBlur={(value: LeafCondition) => {\n // comparing with conditionProp as it is not initialized as default condition\n if (!conditionsEqual(value, conditionProp)) {\n onChange(value);\n }\n\n setStatus(newConditionStatus.current);\n }}\n onChange={(value: LeafCondition, conditionStatus?: 'error') => {\n newConditionStatus.current = conditionStatus;\n setNewCondition(value);\n }}\n fields={fields}\n itemDirection='column'\n lhsMode='label'\n validRhsTypes={validRhsTypes}\n dateFunctions={dateFunctions}\n indicateErrors={status === 'error'}\n ref={ref}\n handle={clearHandle}\n />\n ) : (\n <StyledVerticalFieldGroup\n name={label}\n collapsed={collapsed}\n onToggleCollapsed={() => setCollapsed(cur => !cur)}\n actions={[{ id: 'clear', text: t('clear'), onClick: clear }]}\n >\n {defaultControl}\n </StyledVerticalFieldGroup>\n );\n }\n\n if (showAdvanced) {\n return (\n <CompositeInput\n dialog={dialog}\n label={label}\n onClear={clear}\n value={\n conditionProp\n ? formatCondition({ condition: conditionProp }, fields, t, {\n locale,\n omitLhs: true\n })\n : undefined\n }\n placeholder={t('all')}\n ref={ref}\n />\n );\n }\n\n return defaultControl;\n }\n);\n\nexport default ConditionInput;\n"]}
@@ -1,5 +1,5 @@
1
1
  import { DefaultTheme } from 'styled-components';
2
2
  export declare const StyledConditionRadioGroup: import("styled-components").StyledComponent<"fieldset", DefaultTheme, {}, never>;
3
- export declare const StyledFieldGroup: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").FieldGroupProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
4
- export declare const StyledAtomicCondition: import("styled-components").StyledComponent<import("react").FunctionComponent<import("../ConditionBuilder/AtomicCondition").AtomicConditionProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
3
+ export declare const StyledVerticalFieldGroup: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").FieldGroupProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
4
+ export declare const StyledVerticalAtomicCondition: import("styled-components").StyledComponent<import("react").FunctionComponent<import("../ConditionBuilder/AtomicCondition").AtomicConditionProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
5
5
  //# sourceMappingURL=ConditionInput.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.styles.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.styles.ts"],"names":[],"mappings":"AAAA,OAAe,EAAc,YAAY,EAAO,MAAM,mBAAmB,CAAC;AAa1E,eAAO,MAAM,yBAAyB,kFAIrC,CAAC;AAsBF,eAAO,MAAM,gBAAgB,6MAA+C,CAAC;AAI7E,eAAO,MAAM,qBAAqB,8NAAoD,CAAC"}
1
+ {"version":3,"file":"ConditionInput.styles.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.styles.ts"],"names":[],"mappings":"AAAA,OAAe,EAAc,YAAY,EAAO,MAAM,mBAAmB,CAAC;AAa1E,eAAO,MAAM,yBAAyB,kFAIrC,CAAC;AAsBF,eAAO,MAAM,wBAAwB,6MAA+C,CAAC;AAIrF,eAAO,MAAM,6BAA6B,8NAAoD,CAAC"}
@@ -4,7 +4,7 @@ import { AtomicCondition } from '../ConditionBuilder';
4
4
  export const StyledConditionRadioGroup = styled(StyledRadioCheckGroup) `
5
5
  ${StyledGrid} {
6
6
  display: inline-flex;
7
- } ;
7
+ }
8
8
  `;
9
9
  StyledConditionRadioGroup.defaultProps = defaultThemeProp;
10
10
  const StyledFieldGroupLegendFn = ({ theme: { base: { palette } } }) => {
@@ -20,8 +20,8 @@ const StyledFieldGroupLegendFn = ({ theme: { base: { palette } } }) => {
20
20
  }
21
21
  `;
22
22
  };
23
- export const StyledFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);
24
- StyledFieldGroup.defaultProps = defaultThemeProp;
25
- export const StyledAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);
26
- StyledAtomicCondition.defaultProps = defaultThemeProp;
23
+ export const StyledVerticalFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);
24
+ StyledVerticalFieldGroup.defaultProps = defaultThemeProp;
25
+ export const StyledVerticalAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);
26
+ StyledVerticalAtomicCondition.defaultProps = defaultThemeProp;
27
27
  //# sourceMappingURL=ConditionInput.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.styles.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAA4B,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACV,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAClE,UAAU;;;CAGb,CAAC;AAEF,yBAAyB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAE1D,MAAM,wBAAwB,GAAG,CAAC,EAChC,KAAK,EAAE,EACL,IAAI,EAAE,EAAE,OAAO,EAAE,EAClB,EACwB,EAAE,EAAE;IAC7B,OAAO,GAAG,CAAA;MACN,sBAAsB;4CACgB,OAAO,CAAC,aAAa,CAAC;;;QAG1D,YAAY;;;;;GAKjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAE7E,gBAAgB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAEvF,qBAAqB,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { ThemeProps, DefaultTheme, css } from 'styled-components';\n\nimport {\n StyledGrid,\n defaultThemeProp,\n StyledFieldGroupLegend,\n StyledButton,\n FieldGroup,\n StyledRadioCheckGroup\n} from '@pega/cosmos-react-core';\n\nimport { AtomicCondition } from '../ConditionBuilder';\n\nexport const StyledConditionRadioGroup = styled(StyledRadioCheckGroup)`\n ${StyledGrid} {\n display: inline-flex;\n } ;\n`;\n\nStyledConditionRadioGroup.defaultProps = defaultThemeProp;\n\nconst StyledFieldGroupLegendFn = ({\n theme: {\n base: { palette }\n }\n}: ThemeProps<DefaultTheme>) => {\n return css`\n ${StyledFieldGroupLegend} {\n border-block-start: 0.0625rem solid ${palette['border-line']};\n padding-block-start: 0.625rem;\n\n ${StyledButton} {\n border-color: transparent;\n font-weight: initial;\n }\n }\n `;\n};\n\nexport const StyledFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);\n\nStyledFieldGroup.defaultProps = defaultThemeProp;\n\nexport const StyledAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);\n\nStyledAtomicCondition.defaultProps = defaultThemeProp;\n"]}
1
+ {"version":3,"file":"ConditionInput.styles.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAA4B,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACV,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAClE,UAAU;;;CAGb,CAAC;AAEF,yBAAyB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAE1D,MAAM,wBAAwB,GAAG,CAAC,EAChC,KAAK,EAAE,EACL,IAAI,EAAE,EAAE,OAAO,EAAE,EAClB,EACwB,EAAE,EAAE;IAC7B,OAAO,GAAG,CAAA;MACN,sBAAsB;4CACgB,OAAO,CAAC,aAAa,CAAC;;;QAG1D,YAAY;;;;;GAKjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAErF,wBAAwB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEzD,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAE/F,6BAA6B,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { ThemeProps, DefaultTheme, css } from 'styled-components';\n\nimport {\n StyledGrid,\n defaultThemeProp,\n StyledFieldGroupLegend,\n StyledButton,\n FieldGroup,\n StyledRadioCheckGroup\n} from '@pega/cosmos-react-core';\n\nimport { AtomicCondition } from '../ConditionBuilder';\n\nexport const StyledConditionRadioGroup = styled(StyledRadioCheckGroup)`\n ${StyledGrid} {\n display: inline-flex;\n }\n`;\n\nStyledConditionRadioGroup.defaultProps = defaultThemeProp;\n\nconst StyledFieldGroupLegendFn = ({\n theme: {\n base: { palette }\n }\n}: ThemeProps<DefaultTheme>) => {\n return css`\n ${StyledFieldGroupLegend} {\n border-block-start: 0.0625rem solid ${palette['border-line']};\n padding-block-start: 0.625rem;\n\n ${StyledButton} {\n border-color: transparent;\n font-weight: initial;\n }\n }\n `;\n};\n\nexport const StyledVerticalFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);\n\nStyledVerticalFieldGroup.defaultProps = defaultThemeProp;\n\nexport const StyledVerticalAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);\n\nStyledVerticalAtomicCondition.defaultProps = defaultThemeProp;\n"]}
@@ -1,6 +1,7 @@
1
1
  import { Ref } from 'react';
2
+ import { HandleValue } from '@pega/cosmos-react-core';
2
3
  import type { LeafCondition, ValueSelection } from '../ConditionBuilder';
3
- export declare type ConditionFieldType = 'TEXT' | 'EMAIL' | 'URL' | 'PHONE' | 'INTEGER' | 'DECIMAL' | 'PERCENTAGE' | 'BOOLEAN' | 'CURRENCY' | 'DATE_ONLY' | 'TIME_ONLY' | 'DATE_TIME' | 'PICKLIST';
4
+ export type ConditionFieldType = 'TEXT' | 'EMAIL' | 'URL' | 'PHONE' | 'INTEGER' | 'DECIMAL' | 'PERCENTAGE' | 'BOOLEAN' | 'CURRENCY' | 'DATE_ONLY' | 'TIME_ONLY' | 'DATE_TIME' | 'PICKLIST';
4
5
  export interface ConditionField {
5
6
  /** Unique field identifier. */
6
7
  name: string;
@@ -9,7 +10,7 @@ export interface ConditionField {
9
10
  /** List of possible field values */
10
11
  possibleValues?: ValueSelection<ConditionField>;
11
12
  }
12
- export declare type ConditionInputMode = 'default' | 'advanced' | 'predefined';
13
+ export type ConditionInputMode = 'default' | 'advanced' | 'predefined';
13
14
  export interface ConditionInputProps {
14
15
  /** Definition of the field the condition is created for. */
15
16
  field: ConditionField;
@@ -25,5 +26,7 @@ export interface ConditionInputProps {
25
26
  ref?: Ref<HTMLInputElement>;
26
27
  /** Whether advanced view should be wrapped in popup or just flat. */
27
28
  flat?: boolean;
29
+ /** Imperative handle */
30
+ handle?: Ref<HandleValue>;
28
31
  }
29
32
  //# sourceMappingURL=ConditionInput.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.types.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,oBAAY,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,oCAAoC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,oBAAY,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,KAAK,EAAE,cAAc,CAAC;IACtB,uEAAuE;IACvE,IAAI,EAAE,kBAAkB,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,sCAAsC;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,qEAAqE;IACrE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
1
+ {"version":3,"file":"ConditionInput.types.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,oCAAoC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,KAAK,EAAE,cAAc,CAAC;IACtB,uEAAuE;IACvE,IAAI,EAAE,kBAAkB,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,sCAAsC;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,qEAAqE;IACrE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wBAAwB;IACxB,MAAM,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.types.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport type { LeafCondition, ValueSelection } from '../ConditionBuilder';\n\nexport type ConditionFieldType =\n | 'TEXT'\n | 'EMAIL'\n | 'URL'\n | 'PHONE'\n | 'INTEGER'\n | 'DECIMAL'\n | 'PERCENTAGE'\n | 'BOOLEAN'\n | 'CURRENCY'\n | 'DATE_ONLY'\n | 'TIME_ONLY'\n | 'DATE_TIME'\n | 'PICKLIST';\n\nexport interface ConditionField {\n /** Unique field identifier. */\n name: string;\n /** Type of the field. */\n type: ConditionFieldType;\n /** List of possible field values */\n possibleValues?: ValueSelection<ConditionField>;\n}\n\nexport type ConditionInputMode = 'default' | 'advanced' | 'predefined';\n\nexport interface ConditionInputProps {\n /** Definition of the field the condition is created for. */\n field: ConditionField;\n /** Display mode. Either with default comparator or the full-fledged */\n mode: ConditionInputMode;\n /** Label for the input. */\n label?: string;\n /** Condition value. */\n condition?: LeafCondition;\n /** Callback invoked when user changes the condition. */\n onChange: (condition?: LeafCondition) => void;\n /** Reference to the input element. */\n ref?: Ref<HTMLInputElement>;\n /** Whether advanced view should be wrapped in popup or just flat. */\n flat?: boolean;\n}\n"]}
1
+ {"version":3,"file":"ConditionInput.types.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport { HandleValue } from '@pega/cosmos-react-core';\n\nimport type { LeafCondition, ValueSelection } from '../ConditionBuilder';\n\nexport type ConditionFieldType =\n | 'TEXT'\n | 'EMAIL'\n | 'URL'\n | 'PHONE'\n | 'INTEGER'\n | 'DECIMAL'\n | 'PERCENTAGE'\n | 'BOOLEAN'\n | 'CURRENCY'\n | 'DATE_ONLY'\n | 'TIME_ONLY'\n | 'DATE_TIME'\n | 'PICKLIST';\n\nexport interface ConditionField {\n /** Unique field identifier. */\n name: string;\n /** Type of the field. */\n type: ConditionFieldType;\n /** List of possible field values */\n possibleValues?: ValueSelection<ConditionField>;\n}\n\nexport type ConditionInputMode = 'default' | 'advanced' | 'predefined';\n\nexport interface ConditionInputProps {\n /** Definition of the field the condition is created for. */\n field: ConditionField;\n /** Display mode. Either with default comparator or the full-fledged */\n mode: ConditionInputMode;\n /** Label for the input. */\n label?: string;\n /** Condition value. */\n condition?: LeafCondition;\n /** Callback invoked when user changes the condition. */\n onChange: (condition?: LeafCondition) => void;\n /** Reference to the input element. */\n ref?: Ref<HTMLInputElement>;\n /** Whether advanced view should be wrapped in popup or just flat. */\n flat?: boolean;\n /** Imperative handle */\n handle?: Ref<HandleValue>;\n}\n"]}
@@ -1,13 +1,17 @@
1
+ import { Field, LeafCondition, ValueSelection } from '../ConditionBuilder';
1
2
  import type { Comparator, FieldType } from '../ConditionBuilder/core/types';
2
- import type { ConditionFieldType } from './ConditionInput.types';
3
+ import type { ConditionField, ConditionFieldType } from './ConditionInput.types';
3
4
  export declare const defaultComparators: Record<ConditionFieldType, Comparator>;
4
5
  export declare const basicFieldMap: Record<ConditionFieldType, FieldType>;
5
- export declare const compareValues: (value1: string | string[] | undefined, value2: string | string[] | undefined) => boolean;
6
- export declare const compareRangeValues: (value1: {
6
+ export declare const valuesEqual: (value1: string | string[] | undefined, value2: string | string[] | undefined) => boolean;
7
+ export declare const rangeValuesEqual: (value1: {
7
8
  start: string | number | undefined;
8
9
  end: string | number | undefined;
9
10
  } | undefined, value2: {
10
11
  start: string | number | undefined;
11
12
  end: string | number | undefined;
12
13
  } | undefined) => boolean;
14
+ export declare const conditionsEqual: (condition1: LeafCondition | undefined, condition2: LeafCondition | undefined) => boolean;
15
+ export declare const convertFieldToConditionField: (lhs?: Field) => ConditionField | undefined;
16
+ export declare const possibleFieldValuesToConditionFieldValues: (possibleValues: ConditionField['possibleValues']) => ValueSelection<Field> | undefined;
13
17
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAc5D,CAAC;AAEX,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,CActD,CAAC;AAEX,eAAO,MAAM,aAAa,WAChB,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,UAC7B,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,YAiBtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,WACrB;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,UACpF;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,YAS7F,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAc5D,CAAC;AAEX,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,CActD,CAAC;AAEX,eAAO,MAAM,WAAW,WACd,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,UAC7B,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,YAiBtC,CAAC;AAEF,eAAO,MAAM,gBAAgB,WACnB;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,UACpF;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,YAS7F,CAAC;AAEF,eAAO,MAAM,eAAe,eACd,aAAa,GAAG,SAAS,cACzB,aAAa,GAAG,SAAS,YAuDtC,CAAC;AAEF,eAAO,MAAM,4BAA4B,SAAU,KAAK,+BAOvD,CAAC;AAEF,eAAO,MAAM,yCAAyC,mBACpC,cAAc,CAAC,gBAAgB,CAAC,KAC/C,eAAe,KAAK,CAAC,GAAG,SAc1B,CAAC"}