@pega/cosmos-react-condition-builder 3.0.0-dev.9.0 → 3.0.0-rc.2

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 (110) hide show
  1. package/lib/components/ConditionBuilder/AtomicCondition.d.ts +6 -4
  2. package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
  3. package/lib/components/ConditionBuilder/AtomicCondition.js +31 -21
  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 +15 -41
  7. package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
  8. package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts +5 -0
  9. package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts.map +1 -0
  10. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js +44 -0
  11. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js.map +1 -0
  12. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +41 -20
  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.d.ts.map +1 -1
  16. package/lib/components/ConditionBuilder/FieldCondition.js +12 -12
  17. package/lib/components/ConditionBuilder/FieldCondition.js.map +1 -1
  18. package/lib/components/ConditionBuilder/FieldCondition.types.d.ts +11 -4
  19. package/lib/components/ConditionBuilder/FieldCondition.types.d.ts.map +1 -1
  20. package/lib/components/ConditionBuilder/FieldCondition.types.js.map +1 -1
  21. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.d.ts.map +1 -1
  22. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js +13 -20
  23. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js.map +1 -1
  24. package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts.map +1 -1
  25. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js +4 -1
  26. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js.map +1 -1
  27. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.d.ts +5 -3
  28. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.d.ts.map +1 -1
  29. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js +48 -14
  30. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js.map +1 -1
  31. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts +38 -0
  32. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts.map +1 -0
  33. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js +133 -0
  34. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js.map +1 -0
  35. package/lib/components/ConditionBuilder/RhsControls/index.d.ts +5 -2
  36. package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
  37. package/lib/components/ConditionBuilder/RhsControls/index.js +89 -28
  38. package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
  39. package/lib/components/ConditionBuilder/core/comparators.d.ts.map +1 -1
  40. package/lib/components/ConditionBuilder/core/comparators.js +4 -0
  41. package/lib/components/ConditionBuilder/core/comparators.js.map +1 -1
  42. package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
  43. package/lib/components/ConditionBuilder/core/evaluator.js +10 -3
  44. package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
  45. package/lib/components/ConditionBuilder/core/formatter.d.ts +1 -0
  46. package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
  47. package/lib/components/ConditionBuilder/core/formatter.js +84 -38
  48. package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
  49. package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -1
  50. package/lib/components/ConditionBuilder/core/transformer.js +55 -2
  51. package/lib/components/ConditionBuilder/core/transformer.js.map +1 -1
  52. package/lib/components/ConditionBuilder/core/types.d.ts +2 -2
  53. package/lib/components/ConditionBuilder/core/types.d.ts.map +1 -1
  54. package/lib/components/ConditionBuilder/core/types.js.map +1 -1
  55. package/lib/components/ConditionBuilder/core/utils.d.ts +5 -1
  56. package/lib/components/ConditionBuilder/core/utils.d.ts.map +1 -1
  57. package/lib/components/ConditionBuilder/core/utils.js +18 -0
  58. package/lib/components/ConditionBuilder/core/utils.js.map +1 -1
  59. package/lib/components/ConditionBuilder/index.d.ts +1 -1
  60. package/lib/components/ConditionBuilder/index.d.ts.map +1 -1
  61. package/lib/components/ConditionBuilder/index.js.map +1 -1
  62. package/lib/components/ConditionInput/ConditionInput.d.ts +6 -0
  63. package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -0
  64. package/lib/components/ConditionInput/ConditionInput.js +215 -0
  65. package/lib/components/ConditionInput/ConditionInput.js.map +1 -0
  66. package/lib/components/ConditionInput/ConditionInput.styles.d.ts +5 -0
  67. package/lib/components/ConditionInput/ConditionInput.styles.d.ts.map +1 -0
  68. package/lib/components/ConditionInput/ConditionInput.styles.js +27 -0
  69. package/lib/components/ConditionInput/ConditionInput.styles.js.map +1 -0
  70. package/lib/components/ConditionInput/ConditionInput.types.d.ts +29 -0
  71. package/lib/components/ConditionInput/ConditionInput.types.d.ts.map +1 -0
  72. package/lib/components/ConditionInput/ConditionInput.types.js +2 -0
  73. package/lib/components/ConditionInput/ConditionInput.types.js.map +1 -0
  74. package/lib/components/ConditionInput/index.d.ts +3 -0
  75. package/lib/components/ConditionInput/index.d.ts.map +1 -0
  76. package/lib/components/ConditionInput/index.js +2 -0
  77. package/lib/components/ConditionInput/index.js.map +1 -0
  78. package/lib/components/ConditionInput/utils.d.ts +13 -0
  79. package/lib/components/ConditionInput/utils.d.ts.map +1 -0
  80. package/lib/components/ConditionInput/utils.js +56 -0
  81. package/lib/components/ConditionInput/utils.js.map +1 -0
  82. package/lib/components/PromotedFilters/ConditionSelector.d.ts +31 -0
  83. package/lib/components/PromotedFilters/ConditionSelector.d.ts.map +1 -0
  84. package/lib/components/PromotedFilters/ConditionSelector.js +72 -0
  85. package/lib/components/PromotedFilters/ConditionSelector.js.map +1 -0
  86. package/lib/components/PromotedFilters/PromotedFilters.d.ts +11 -0
  87. package/lib/components/PromotedFilters/PromotedFilters.d.ts.map +1 -0
  88. package/lib/components/PromotedFilters/PromotedFilters.js +118 -0
  89. package/lib/components/PromotedFilters/PromotedFilters.js.map +1 -0
  90. package/lib/components/PromotedFilters/PromotedFilters.styles.d.ts +4 -0
  91. package/lib/components/PromotedFilters/PromotedFilters.styles.d.ts.map +1 -0
  92. package/lib/components/PromotedFilters/PromotedFilters.styles.js +26 -0
  93. package/lib/components/PromotedFilters/PromotedFilters.styles.js.map +1 -0
  94. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts +31 -0
  95. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts.map +1 -0
  96. package/lib/components/PromotedFilters/PromotedFilters.types.js +2 -0
  97. package/lib/components/PromotedFilters/PromotedFilters.types.js.map +1 -0
  98. package/lib/components/PromotedFilters/index.d.ts +3 -0
  99. package/lib/components/PromotedFilters/index.d.ts.map +1 -0
  100. package/lib/components/PromotedFilters/index.js +2 -0
  101. package/lib/components/PromotedFilters/index.js.map +1 -0
  102. package/lib/index.d.ts +4 -0
  103. package/lib/index.d.ts.map +1 -1
  104. package/lib/index.js +4 -0
  105. package/lib/index.js.map +1 -1
  106. package/package.json +8 -4
  107. package/lib/components/ConditionBuilder/RhsControls/MultiValueSelector.d.ts +0 -16
  108. package/lib/components/ConditionBuilder/RhsControls/MultiValueSelector.d.ts.map +0 -1
  109. package/lib/components/ConditionBuilder/RhsControls/MultiValueSelector.js +0 -43
  110. package/lib/components/ConditionBuilder/RhsControls/MultiValueSelector.js.map +0 -1
@@ -0,0 +1,215 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef, useState, useEffect } from 'react';
3
+ import { CompositeInput, hasProp, Input, RadioButton, useI18n, useConfiguration, DateRangeInput, TimeRangeInput, useUID, NumberRangeInput, RadioButtonGroup } from '@pega/cosmos-react-core';
4
+ import AtomicCondition, { getInitConditionForLhs } from '../ConditionBuilder/AtomicCondition';
5
+ import formatCondition from '../ConditionBuilder/core/formatter';
6
+ import ValueSelector from '../ConditionBuilder/RhsControls/ValueSelector';
7
+ import { truncateISODateString } from '../ConditionBuilder/RhsControls';
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) => {
12
+ const id = useUID();
13
+ const t = useI18n();
14
+ const { locale } = useConfiguration();
15
+ const { name: fieldName, type: fieldType } = fieldProp;
16
+ const basicType = basicFieldMap[fieldType] ?? fieldType;
17
+ const fieldLabel = label || fieldName;
18
+ const field = {
19
+ id: fieldName,
20
+ type: basicType,
21
+ primary: fieldLabel
22
+ };
23
+ const fields = [field];
24
+ const createConditionForDefaultMode = (value) => {
25
+ let valueObj;
26
+ if (Array.isArray(value))
27
+ valueObj = { values: value };
28
+ else
29
+ valueObj = { value };
30
+ return {
31
+ lhs: { field: fieldName },
32
+ comparator: defaultComparators[fieldType],
33
+ rhs: valueObj
34
+ };
35
+ };
36
+ const convertDateTimeValue = (value) => {
37
+ const truncatedValue = truncateISODateString(value, basicType);
38
+ return fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedValue) : truncatedValue;
39
+ };
40
+ const createConditionForRange = (value) => {
41
+ return {
42
+ lhs: { field: fieldName },
43
+ comparator: defaultComparators[fieldType],
44
+ rhs: value
45
+ };
46
+ };
47
+ const validComparators = fieldType === 'PICKLIST' ? [{ type: 'TEXT', comparators: ['IN'] }] : undefined;
48
+ const condition = conditionProp ??
49
+ (fieldType === 'BOOLEAN'
50
+ ? undefined
51
+ : getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']), validComparators));
52
+ const [newCondition, setNewCondition] = useState(condition);
53
+ let rhsValue = fieldType === 'PICKLIST' ? [] : undefined;
54
+ let rhsRangeValue;
55
+ if (condition?.rhs) {
56
+ if (hasProp(condition.rhs, 'value')) {
57
+ rhsValue = condition.rhs.value.toString();
58
+ }
59
+ else if (hasProp(condition.rhs, 'values')) {
60
+ rhsValue = condition.rhs.values.map(String);
61
+ }
62
+ else if (hasProp(condition.rhs, 'start')) {
63
+ rhsRangeValue = { start: condition.rhs.start, end: condition.rhs.end };
64
+ }
65
+ }
66
+ const [inputValue, setInputValue] = useState(rhsValue);
67
+ const [rangeInputValue, setRangeInputValue] = useState(rhsRangeValue);
68
+ useEffect(() => {
69
+ setNewCondition(condition);
70
+ setInputValue(rhsValue);
71
+ setRangeInputValue(rhsRangeValue);
72
+ }, [conditionProp]);
73
+ const handleBlur = () => {
74
+ // trigger onChange only when value has changed
75
+ if (!compareValues(rhsValue, inputValue)) {
76
+ onChange(inputValue ? createConditionForDefaultMode(inputValue) : undefined);
77
+ }
78
+ };
79
+ const handleRangeBlur = (newRangeValue) => {
80
+ // trigger onChange only when value has changed
81
+ if (!compareRangeValues(rhsRangeValue, newRangeValue)) {
82
+ onChange(newRangeValue ? createConditionForRange(newRangeValue) : undefined);
83
+ }
84
+ };
85
+ const onRadioButtonChange = (value) => {
86
+ const updatedCondition = value === undefined
87
+ ? undefined
88
+ : {
89
+ lhs: { field: fieldName },
90
+ comparator: value ? 'IS_TRUE' : 'IS_FALSE'
91
+ };
92
+ onChange(updatedCondition);
93
+ };
94
+ const onClear = () => {
95
+ onChange(undefined);
96
+ setNewCondition(condition);
97
+ };
98
+ const handleDateRangeValueChange = (value) => {
99
+ setRangeInputValue({
100
+ start: value.start.valueAsISOString || undefined,
101
+ end: value.end.valueAsISOString || undefined
102
+ });
103
+ };
104
+ const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN' && fieldType !== 'PICKLIST';
105
+ let defaultControl = null;
106
+ const valueToSet = typeof inputValue === 'string' ? inputValue : undefined;
107
+ if (!showAdvanced) {
108
+ switch (fieldType) {
109
+ case 'INTEGER':
110
+ case 'DECIMAL':
111
+ case 'PERCENTAGE':
112
+ case 'CURRENCY':
113
+ defaultControl = (_jsx(NumberRangeInput, { id: id, label: fieldLabel, labelHidden: flat, ref: ref, value: {
114
+ start: rangeInputValue?.start?.toString() ?? '',
115
+ end: rangeInputValue?.end?.toString() ?? ''
116
+ }, 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 }));
124
+ break;
125
+ case 'BOOLEAN':
126
+ defaultControl = (_jsxs(RadioButtonGroup, { as: StyledConditionRadioGroup, id: id, ref: ref, label: fieldLabel, 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) })] }));
127
+ break;
128
+ case 'DATE_ONLY':
129
+ defaultControl = (_jsx(DateRangeInput, { id: id, ref: ref, label: fieldLabel, labelHidden: flat, value: rangeInputValue
130
+ ? { 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: '' }));
139
+ break;
140
+ case 'TIME_ONLY':
141
+ defaultControl = (_jsx(TimeRangeInput, { id: id, ref: ref, mode: 'time', label: fieldLabel, labelHidden: flat, value: rangeInputValue
142
+ ? { 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: '' }));
151
+ break;
152
+ case 'DATE_TIME':
153
+ defaultControl = (_jsx(TimeRangeInput, { id: id, ref: ref, mode: 'datetime', label: fieldLabel, labelHidden: flat, value: rangeInputValue
154
+ ? { 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: '' }));
163
+ break;
164
+ case 'PICKLIST':
165
+ defaultControl = (_jsx(ValueSelector, { label: flat ? undefined : fieldLabel, mode: 'multi-select', values: inputValue ?? [], selectedField: fieldProp, comparator: condition?.comparator ?? defaultComparators[fieldType], onChange: value => {
166
+ setInputValue(value.length > 0 ? value : undefined);
167
+ }, onBlur: handleBlur, onClear: onClear, placeholder: t('all'), parameters: [], rhs: { values: [] } }));
168
+ break;
169
+ case 'TEXT':
170
+ case 'EMAIL':
171
+ case 'URL':
172
+ case 'PHONE':
173
+ default:
174
+ defaultControl = (_jsx(Input, { id: id, ref: ref, label: fieldLabel, labelHidden: flat, value: valueToSet, onChange: (e) => setInputValue(e.target.value), onBlur: handleBlur }));
175
+ break;
176
+ }
177
+ }
178
+ const dialog = {
179
+ renderer: AtomicCondition,
180
+ rendererProps: {
181
+ condition: newCondition ??
182
+ getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])),
183
+ fields,
184
+ onChange: setNewCondition,
185
+ itemDirection: 'column',
186
+ lhsMode: 'hidden',
187
+ validRhsTypes: new Set(['LITERAL']),
188
+ indicateErrors: false,
189
+ rhsLabelHidden: true
190
+ },
191
+ onCancel: ({ close }) => {
192
+ setNewCondition(condition);
193
+ close();
194
+ },
195
+ onApply: ({ close }) => {
196
+ onChange(newCondition);
197
+ close();
198
+ }
199
+ };
200
+ 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 }));
203
+ }
204
+ if (showAdvanced) {
205
+ return (_jsx(CompositeInput, { dialog: dialog, label: label, onClear: onClear, value: conditionProp
206
+ ? formatCondition({ condition: conditionProp }, fields, t, {
207
+ locale,
208
+ omitLhs: true
209
+ })
210
+ : undefined, placeholder: t('all'), ref: ref }));
211
+ }
212
+ return defaultControl;
213
+ });
214
+ export default ConditionInput;
215
+ //# sourceMappingURL=ConditionInput.js.map
@@ -0,0 +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} 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 fieldLabel = label || fieldName;\n\n const field: Field = {\n id: fieldName,\n type: basicType,\n primary: fieldLabel\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 // trigger onChange only when value has changed\n if (!compareValues(rhsValue, inputValue)) {\n onChange(inputValue ? createConditionForDefaultMode(inputValue) : 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={fieldLabel}\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={fieldLabel}\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={fieldLabel}\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={fieldLabel}\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={fieldLabel}\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 : fieldLabel}\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={fieldLabel}\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(newCondition);\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"]}
@@ -0,0 +1,5 @@
1
+ import { DefaultTheme } from 'styled-components';
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>;
5
+ //# sourceMappingURL=ConditionInput.styles.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,27 @@
1
+ import styled, { css } from 'styled-components';
2
+ import { StyledGrid, defaultThemeProp, StyledFieldGroupLegend, StyledButton, FieldGroup, StyledRadioCheckGroup } from '@pega/cosmos-react-core';
3
+ import { AtomicCondition } from '../ConditionBuilder';
4
+ export const StyledConditionRadioGroup = styled(StyledRadioCheckGroup) `
5
+ ${StyledGrid} {
6
+ display: inline-flex;
7
+ } ;
8
+ `;
9
+ StyledConditionRadioGroup.defaultProps = defaultThemeProp;
10
+ const StyledFieldGroupLegendFn = ({ theme: { base: { palette } } }) => {
11
+ return css `
12
+ ${StyledFieldGroupLegend} {
13
+ border-block-start: 0.0625rem solid ${palette['border-line']};
14
+ padding-block-start: 0.625rem;
15
+
16
+ ${StyledButton} {
17
+ border-color: transparent;
18
+ font-weight: initial;
19
+ }
20
+ }
21
+ `;
22
+ };
23
+ export const StyledFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);
24
+ StyledFieldGroup.defaultProps = defaultThemeProp;
25
+ export const StyledAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);
26
+ StyledAtomicCondition.defaultProps = defaultThemeProp;
27
+ //# sourceMappingURL=ConditionInput.styles.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,29 @@
1
+ import { Ref } from 'react';
2
+ 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 interface ConditionField {
5
+ /** Unique field identifier. */
6
+ name: string;
7
+ /** Type of the field. */
8
+ type: ConditionFieldType;
9
+ /** List of possible field values */
10
+ possibleValues?: ValueSelection<ConditionField>;
11
+ }
12
+ export declare type ConditionInputMode = 'default' | 'advanced' | 'predefined';
13
+ export interface ConditionInputProps {
14
+ /** Definition of the field the condition is created for. */
15
+ field: ConditionField;
16
+ /** Display mode. Either with default comparator or the full-fledged */
17
+ mode: ConditionInputMode;
18
+ /** Label for the input. */
19
+ label?: string;
20
+ /** Condition value. */
21
+ condition?: LeafCondition;
22
+ /** Callback invoked when user changes the condition. */
23
+ onChange: (condition?: LeafCondition) => void;
24
+ /** Reference to the input element. */
25
+ ref?: Ref<HTMLInputElement>;
26
+ /** Whether advanced view should be wrapped in popup or just flat. */
27
+ flat?: boolean;
28
+ }
29
+ //# sourceMappingURL=ConditionInput.types.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ConditionInput.types.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,3 @@
1
+ export { default } from './ConditionInput';
2
+ export { ConditionInputProps, ConditionInputMode, ConditionFieldType, ConditionField } from './ConditionInput.types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACf,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default } from './ConditionInput';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export { default } from './ConditionInput';\nexport {\n ConditionInputProps,\n ConditionInputMode,\n ConditionFieldType,\n ConditionField\n} from './ConditionInput.types';\n"]}
@@ -0,0 +1,13 @@
1
+ import type { Comparator, FieldType } from '../ConditionBuilder/core/types';
2
+ import type { ConditionFieldType } from './ConditionInput.types';
3
+ export declare const defaultComparators: Record<ConditionFieldType, Comparator>;
4
+ 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: {
7
+ start: string | number | undefined;
8
+ end: string | number | undefined;
9
+ } | undefined, value2: {
10
+ start: string | number | undefined;
11
+ end: string | number | undefined;
12
+ } | undefined) => boolean;
13
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,56 @@
1
+ export const defaultComparators = {
2
+ TEXT: 'CONTAINS',
3
+ EMAIL: 'CONTAINS',
4
+ URL: 'CONTAINS',
5
+ PHONE: 'CONTAINS',
6
+ INTEGER: 'BTW',
7
+ DECIMAL: 'BTW',
8
+ PERCENTAGE: 'BTW',
9
+ CURRENCY: 'BTW',
10
+ BOOLEAN: 'IS_TRUE',
11
+ DATE_ONLY: 'BTW',
12
+ TIME_ONLY: 'BTW',
13
+ DATE_TIME: 'BTW',
14
+ PICKLIST: 'IN'
15
+ };
16
+ export const basicFieldMap = {
17
+ EMAIL: 'TEXT',
18
+ URL: 'TEXT',
19
+ PHONE: 'TEXT',
20
+ INTEGER: 'NUMBER',
21
+ DECIMAL: 'NUMBER',
22
+ PERCENTAGE: 'NUMBER',
23
+ CURRENCY: 'NUMBER',
24
+ TEXT: 'TEXT',
25
+ BOOLEAN: 'BOOLEAN',
26
+ DATE_ONLY: 'DATE_ONLY',
27
+ TIME_ONLY: 'TIME_ONLY',
28
+ DATE_TIME: 'DATE_TIME',
29
+ PICKLIST: 'TEXT'
30
+ };
31
+ export const compareValues = (value1, value2) => {
32
+ // both values are undefined
33
+ if (!value1 && !value2)
34
+ return true;
35
+ // only one value is undefined
36
+ if (!value1 || !value2)
37
+ return false;
38
+ // for strings compare only value
39
+ if (typeof value1 === 'string') {
40
+ return value1 === value2;
41
+ }
42
+ // for arrays compare length and every value
43
+ if (value1.length !== value2.length)
44
+ return false;
45
+ return value1.every((value, index) => value === value2[index]);
46
+ };
47
+ export const compareRangeValues = (value1, value2) => {
48
+ // both values are undefined
49
+ if (!value1 && !value2)
50
+ return true;
51
+ // only one value is undefined
52
+ if (!value1 || !value2)
53
+ return false;
54
+ return value1.start === value2.start && value1.end === value2.end;
55
+ };
56
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/utils.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,kBAAkB,GAA2C;IACxE,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,IAAI;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAA0C;IAClE,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,MAAM;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAqC,EACrC,MAAqC,EACrC,EAAE;IACF,4BAA4B;IAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEpC,8BAA8B;IAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAErC,iCAAiC;IACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,MAAM,KAAK,MAAM,CAAC;KAC1B;IAED,4CAA4C;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAElD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAA4F,EAC5F,MAA4F,EAC5F,EAAE;IACF,4BAA4B;IAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEpC,8BAA8B;IAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAErC,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;AACpE,CAAC,CAAC","sourcesContent":["import type { Comparator, FieldType } from '../ConditionBuilder/core/types';\n\nimport type { ConditionFieldType } from './ConditionInput.types';\n\nexport const defaultComparators: Record<ConditionFieldType, Comparator> = {\n TEXT: 'CONTAINS',\n EMAIL: 'CONTAINS',\n URL: 'CONTAINS',\n PHONE: 'CONTAINS',\n INTEGER: 'BTW',\n DECIMAL: 'BTW',\n PERCENTAGE: 'BTW',\n CURRENCY: 'BTW',\n BOOLEAN: 'IS_TRUE',\n DATE_ONLY: 'BTW',\n TIME_ONLY: 'BTW',\n DATE_TIME: 'BTW',\n PICKLIST: 'IN'\n} as const;\n\nexport const basicFieldMap: Record<ConditionFieldType, FieldType> = {\n EMAIL: 'TEXT',\n URL: 'TEXT',\n PHONE: 'TEXT',\n INTEGER: 'NUMBER',\n DECIMAL: 'NUMBER',\n PERCENTAGE: 'NUMBER',\n CURRENCY: 'NUMBER',\n TEXT: 'TEXT',\n BOOLEAN: 'BOOLEAN',\n DATE_ONLY: 'DATE_ONLY',\n TIME_ONLY: 'TIME_ONLY',\n DATE_TIME: 'DATE_TIME',\n PICKLIST: 'TEXT'\n} as const;\n\nexport const compareValues = (\n value1: string | string[] | undefined,\n value2: string | string[] | undefined\n) => {\n // both values are undefined\n if (!value1 && !value2) return true;\n\n // only one value is undefined\n if (!value1 || !value2) return false;\n\n // for strings compare only value\n if (typeof value1 === 'string') {\n return value1 === value2;\n }\n\n // for arrays compare length and every value\n if (value1.length !== value2.length) return false;\n\n return value1.every((value, index) => value === value2[index]);\n};\n\nexport const compareRangeValues = (\n value1: { start: string | number | undefined; end: string | number | undefined } | undefined,\n value2: { start: string | number | undefined; end: string | number | undefined } | undefined\n) => {\n // both values are undefined\n if (!value1 && !value2) return true;\n\n // only one value is undefined\n if (!value1 || !value2) return false;\n\n return value1.start === value2.start && value1.end === value2.end;\n};\n"]}
@@ -0,0 +1,31 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { BaseProps, NoChildrenProp, ComboBoxProps, ForwardProps } from '@pega/cosmos-react-core';
3
+ import { AtomicConditionProps } from '../ConditionBuilder/AtomicCondition';
4
+ import { LeafCondition } from '../ConditionBuilder';
5
+ interface ConditionSelectorProps extends BaseProps, NoChildrenProp {
6
+ /** Callback for onChange */
7
+ onChange: (condition?: LeafCondition) => void;
8
+ /** Callback for clear */
9
+ onClear?: () => void;
10
+ /** Used to indicate any errors on the control */
11
+ status?: 'error';
12
+ /** Custom label for input. Makes label visible if provided. */
13
+ label?: ComboBoxProps['label'];
14
+ /** Visually hides the label region. */
15
+ labelHidden?: ComboBoxProps['labelHidden'];
16
+ /** Guidance text that apppears below the input. */
17
+ info?: ComboBoxProps['info'];
18
+ /** Definition of the field the condition is created for. */
19
+ fields: AtomicConditionProps['fields'];
20
+ /** List of possible predefined Conditions */
21
+ conditions: {
22
+ id: string;
23
+ value: LeafCondition;
24
+ label?: string;
25
+ }[];
26
+ /** Currently selected condition. */
27
+ condition?: LeafCondition;
28
+ }
29
+ declare const ConditionSelector: FunctionComponent<ConditionSelectorProps & ForwardProps>;
30
+ export default ConditionSelector;
31
+ //# sourceMappingURL=ConditionSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConditionSelector.d.ts","sourceRoot":"","sources":["../../../src/components/PromotedFilters/ConditionSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAEL,SAAS,EAET,cAAc,EACd,aAAa,EAKb,YAAY,EAGb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,UAAU,sBAAuB,SAAQ,SAAS,EAAE,cAAc;IAChE,4BAA4B;IAC5B,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,uCAAuC;IACvC,WAAW,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,mDAAmD;IACnD,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,4DAA4D;IAC5D,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvC,6CAA6C;IAC7C,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,aAAa,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnE,oCAAoC;IACpC,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAmCD,QAAA,MAAM,iBAAiB,EAAE,iBAAiB,CAAC,sBAAsB,GAAG,YAAY,CAkF/E,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo, useRef } from 'react';
3
+ import { useI18n, ComboBox, Button, Icon, useConfiguration, menuHelpers, hasProp } from '@pega/cosmos-react-core';
4
+ import formatCondition from '../ConditionBuilder/core/formatter';
5
+ const equal = (c1, c2) => {
6
+ if (c1.comparator !== c2.comparator)
7
+ return false;
8
+ if (c1.rhs && c2.rhs) {
9
+ if (hasProp(c1.rhs, 'field') && hasProp(c2.rhs, 'field'))
10
+ return c1.rhs.field === c2.rhs.field;
11
+ if (hasProp(c1.rhs, 'dateFunction') && hasProp(c2.rhs, 'dateFunction')) {
12
+ return c1.rhs.dateFunction === c2.rhs.dateFunction && c1.rhs.value === c2.rhs.value;
13
+ }
14
+ if (hasProp(c1.rhs, 'value') && hasProp(c2.rhs, 'value'))
15
+ return c1.rhs.value === c2.rhs.value;
16
+ if (hasProp(c1.rhs, 'values') && hasProp(c2.rhs, 'values')) {
17
+ const rhs1 = c1.rhs;
18
+ const rhs2 = c2.rhs;
19
+ // due to https://github.com/microsoft/TypeScript/issues/44373
20
+ return (rhs1.values.length === rhs2.values.length &&
21
+ rhs1.values.every((v, i) => v === rhs2.values[i]));
22
+ }
23
+ if (hasProp(c1.rhs, 'parameterId') && hasProp(c2.rhs, 'parameterId')) {
24
+ return c1.rhs.parameterId === c2.rhs.parameterId;
25
+ }
26
+ if (hasProp(c1.rhs, 'relativeDate') && hasProp(c2.rhs, 'relativeDate')) {
27
+ return (c1.rhs.relativeDate.datePart === c2.rhs.relativeDate.datePart &&
28
+ c1.rhs.relativeDate.interval === c2.rhs.relativeDate.interval &&
29
+ c1.rhs.relativeDate.timePeriod === c2.rhs.relativeDate.timePeriod);
30
+ }
31
+ }
32
+ return c1.rhs === c2.rhs;
33
+ };
34
+ const ConditionSelector = ({ onChange, onClear, status, label, info, fields, labelHidden, conditions, condition, ...restProps }) => {
35
+ const t = useI18n();
36
+ const { locale } = useConfiguration();
37
+ const inputRef = useRef(null);
38
+ const itemsToRender = useMemo(() => {
39
+ return conditions.map(({ id, label: conditionLabel, value }) => {
40
+ return {
41
+ id,
42
+ primary: conditionLabel ??
43
+ formatCondition({ condition: value }, fields, t, {
44
+ locale,
45
+ omitLhs: true
46
+ }),
47
+ selected: !!value && !!condition && equal(value, condition)
48
+ };
49
+ });
50
+ }, [conditions, condition]);
51
+ const selected = useMemo(() => menuHelpers.getSelected(itemsToRender)[0], [itemsToRender]);
52
+ return (_jsx(ComboBox, { ...restProps, ref: inputRef, mode: 'single-select', label: label ?? t('condition_builder_possible_values_label'), labelHidden: labelHidden, placeholder: t('all'), selected: selected
53
+ ? {
54
+ items: {
55
+ id: selected.id,
56
+ text: selected.primary
57
+ }
58
+ }
59
+ : undefined, menu: {
60
+ items: itemsToRender,
61
+ onItemClick: (id) => onChange(conditions.find(cnd => cnd.id === id)?.value)
62
+ }, status: status, info: status === 'error' ? t('condition_builder_empty_selection_error_text') : info, actions: onClear &&
63
+ condition !== undefined && (_jsx(Button, { icon: true, variant: 'simple', label: t('clear'), onClick: () => {
64
+ onClear();
65
+ if (inputRef.current) {
66
+ const inputEl = inputRef.current.querySelector('input');
67
+ inputEl?.focus();
68
+ }
69
+ }, children: _jsx(Icon, { name: 'times' }) })) }));
70
+ };
71
+ export default ConditionSelector;
72
+ //# sourceMappingURL=ConditionSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConditionSelector.js","sourceRoot":"","sources":["../../../src/components/PromotedFilters/ConditionSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo, useRef, FunctionComponent } from 'react';\n\nimport {\n useI18n,\n BaseProps,\n ComboBox,\n NoChildrenProp,\n ComboBoxProps,\n Button,\n Icon,\n useConfiguration,\n MenuItemProps,\n ForwardProps,\n menuHelpers,\n hasProp\n} from '@pega/cosmos-react-core';\n\nimport { AtomicConditionProps } from '../ConditionBuilder/AtomicCondition';\nimport formatCondition from '../ConditionBuilder/core/formatter';\nimport { LeafCondition } from '../ConditionBuilder';\n\ninterface ConditionSelectorProps extends BaseProps, NoChildrenProp {\n /** Callback for onChange */\n onChange: (condition?: LeafCondition) => void;\n /** Callback for clear */\n onClear?: () => void;\n /** Used to indicate any errors on the control */\n status?: 'error';\n /** Custom label for input. Makes label visible if provided. */\n label?: ComboBoxProps['label'];\n /** Visually hides the label region. */\n labelHidden?: ComboBoxProps['labelHidden'];\n /** Guidance text that apppears below the input. */\n info?: ComboBoxProps['info'];\n /** Definition of the field the condition is created for. */\n fields: AtomicConditionProps['fields'];\n /** List of possible predefined Conditions */\n conditions: { id: string; value: LeafCondition; label?: string }[];\n /** Currently selected condition. */\n condition?: LeafCondition;\n}\n\nconst equal = (c1: LeafCondition, c2: LeafCondition) => {\n if (c1.comparator !== c2.comparator) return false;\n\n if (c1.rhs && c2.rhs) {\n if (hasProp(c1.rhs, 'field') && hasProp(c2.rhs, 'field')) return c1.rhs.field === c2.rhs.field;\n if (hasProp(c1.rhs, 'dateFunction') && hasProp(c2.rhs, 'dateFunction')) {\n return c1.rhs.dateFunction === c2.rhs.dateFunction && c1.rhs.value === c2.rhs.value;\n }\n if (hasProp(c1.rhs, 'value') && hasProp(c2.rhs, 'value')) return c1.rhs.value === c2.rhs.value;\n if (hasProp(c1.rhs, 'values') && hasProp(c2.rhs, 'values')) {\n const rhs1 = c1.rhs;\n const rhs2 = c2.rhs;\n // due to https://github.com/microsoft/TypeScript/issues/44373\n return (\n rhs1.values.length === rhs2.values.length &&\n (rhs1.values as unknown[]).every((v, i) => v === rhs2.values[i])\n );\n }\n if (hasProp(c1.rhs, 'parameterId') && hasProp(c2.rhs, 'parameterId')) {\n return c1.rhs.parameterId === c2.rhs.parameterId;\n }\n if (hasProp(c1.rhs, 'relativeDate') && hasProp(c2.rhs, 'relativeDate')) {\n return (\n c1.rhs.relativeDate.datePart === c2.rhs.relativeDate.datePart &&\n c1.rhs.relativeDate.interval === c2.rhs.relativeDate.interval &&\n c1.rhs.relativeDate.timePeriod === c2.rhs.relativeDate.timePeriod\n );\n }\n }\n\n return c1.rhs === c2.rhs;\n};\n\nconst ConditionSelector: FunctionComponent<ConditionSelectorProps & ForwardProps> = ({\n onChange,\n onClear,\n status,\n label,\n info,\n fields,\n labelHidden,\n conditions,\n condition,\n ...restProps\n}: ConditionSelectorProps) => {\n const t = useI18n();\n const { locale } = useConfiguration();\n\n const inputRef = useRef<HTMLDivElement>(null);\n const itemsToRender = useMemo(() => {\n return conditions.map(({ id, label: conditionLabel, value }) => {\n return {\n id,\n primary:\n conditionLabel ??\n formatCondition({ condition: value }, fields, t, {\n locale,\n omitLhs: true\n }),\n selected: !!value && !!condition && equal(value, condition)\n };\n });\n }, [conditions, condition]);\n\n const selected = useMemo<MenuItemProps | undefined>(\n () => menuHelpers.getSelected(itemsToRender)[0],\n [itemsToRender]\n );\n\n return (\n <ComboBox\n {...restProps}\n ref={inputRef}\n mode='single-select'\n label={label ?? t('condition_builder_possible_values_label')}\n labelHidden={labelHidden}\n placeholder={t('all')}\n selected={\n selected\n ? {\n items: {\n id: selected.id,\n text: selected.primary\n }\n }\n : undefined\n }\n menu={{\n items: itemsToRender,\n onItemClick: (id: MenuItemProps['id']) =>\n onChange(conditions.find(cnd => cnd.id === id)?.value)\n }}\n status={status}\n info={status === 'error' ? t('condition_builder_empty_selection_error_text') : info}\n actions={\n onClear &&\n condition !== undefined && (\n <Button\n icon\n variant='simple'\n label={t('clear')}\n onClick={() => {\n onClear();\n if (inputRef.current) {\n const inputEl = inputRef.current.querySelector('input');\n inputEl?.focus();\n }\n }}\n >\n <Icon name='times' />\n </Button>\n )\n }\n />\n );\n};\n\nexport default ConditionSelector;\n"]}
@@ -0,0 +1,11 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { ForwardProps } from '@pega/cosmos-react-core';
3
+ import { Condition } from '../ConditionBuilder/ConditionBuilder.types';
4
+ import { PromotedFiltersProps } from './PromotedFilters.types';
5
+ export interface FilterModalProps extends Pick<PromotedFiltersProps, 'filters' | 'condition'> {
6
+ /** Callback fired on apply of any of the filters */
7
+ onApply?: (condition: Condition | undefined) => void;
8
+ }
9
+ export declare const PromotedFilters: FunctionComponent<PromotedFiltersProps & ForwardProps>;
10
+ export default PromotedFilters;
11
+ //# sourceMappingURL=PromotedFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromotedFilters.d.ts","sourceRoot":"","sources":["../../../src/components/PromotedFilters/PromotedFilters.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAMlB,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,YAAY,EAQb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAiB,MAAM,4CAA4C,CAAC;AAOtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAO/D,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,oBAAoB,EAAE,SAAS,GAAG,WAAW,CAAC;IAC3F,oDAAoD;IACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD;AA+JD,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,oBAAoB,GAAG,YAAY,CAkHlF,CAAC;AAEF,eAAe,eAAe,CAAC"}