@pega/cosmos-react-condition-builder 9.0.0-build.9.9 → 9.0.1

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 (80) hide show
  1. package/lib/components/ConditionBuilder/AtomicCondition.d.ts +4 -0
  2. package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
  3. package/lib/components/ConditionBuilder/AtomicCondition.js +10 -11
  4. package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
  5. package/lib/components/ConditionBuilder/ConditionBuilder.d.ts +2 -3
  6. package/lib/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
  7. package/lib/components/ConditionBuilder/ConditionBuilder.js +79 -40
  8. package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
  9. package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts +604 -6
  10. package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts.map +1 -1
  11. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js +90 -36
  12. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js.map +1 -1
  13. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +42 -2
  14. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
  15. package/lib/components/ConditionBuilder/ConditionBuilder.types.js.map +1 -1
  16. package/lib/components/ConditionBuilder/RhsControls/CSVInput.d.ts +18 -0
  17. package/lib/components/ConditionBuilder/RhsControls/CSVInput.d.ts.map +1 -0
  18. package/lib/components/ConditionBuilder/RhsControls/CSVInput.js +59 -0
  19. package/lib/components/ConditionBuilder/RhsControls/CSVInput.js.map +1 -0
  20. package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts +2 -0
  21. package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts.map +1 -1
  22. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js +21 -5
  23. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js.map +1 -1
  24. package/lib/components/ConditionBuilder/RhsControls/NumericRangeInput.d.ts +31 -0
  25. package/lib/components/ConditionBuilder/RhsControls/NumericRangeInput.d.ts.map +1 -0
  26. package/lib/components/ConditionBuilder/RhsControls/NumericRangeInput.js +52 -0
  27. package/lib/components/ConditionBuilder/RhsControls/NumericRangeInput.js.map +1 -0
  28. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts +5 -3
  29. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts.map +1 -1
  30. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js +28 -22
  31. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js.map +1 -1
  32. package/lib/components/ConditionBuilder/RhsControls/index.d.ts +5 -5
  33. package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
  34. package/lib/components/ConditionBuilder/RhsControls/index.js +35 -43
  35. package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
  36. package/lib/components/ConditionBuilder/core/comparators.d.ts.map +1 -1
  37. package/lib/components/ConditionBuilder/core/comparators.js +6 -1
  38. package/lib/components/ConditionBuilder/core/comparators.js.map +1 -1
  39. package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
  40. package/lib/components/ConditionBuilder/core/formatter.js +51 -4
  41. package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
  42. package/lib/components/ConditionBuilder/core/time-utils.d.ts +1 -1
  43. package/lib/components/ConditionBuilder/core/time-utils.d.ts.map +1 -1
  44. package/lib/components/ConditionBuilder/core/time-utils.js +4 -3
  45. package/lib/components/ConditionBuilder/core/time-utils.js.map +1 -1
  46. package/lib/components/ConditionBuilder/core/transformer.d.ts +6 -1
  47. package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -1
  48. package/lib/components/ConditionBuilder/core/transformer.js +104 -84
  49. package/lib/components/ConditionBuilder/core/transformer.js.map +1 -1
  50. package/lib/components/ConditionBuilder/core/types.d.ts +4 -1
  51. package/lib/components/ConditionBuilder/core/types.d.ts.map +1 -1
  52. package/lib/components/ConditionBuilder/core/types.js.map +1 -1
  53. package/lib/components/ConditionBuilder/index.d.ts +2 -1
  54. package/lib/components/ConditionBuilder/index.d.ts.map +1 -1
  55. package/lib/components/ConditionBuilder/index.js.map +1 -1
  56. package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -1
  57. package/lib/components/ConditionInput/ConditionInput.js +110 -32
  58. package/lib/components/ConditionInput/ConditionInput.js.map +1 -1
  59. package/lib/components/ConditionInput/ConditionInput.styles.d.ts +52 -4
  60. package/lib/components/ConditionInput/ConditionInput.styles.d.ts.map +1 -1
  61. package/lib/components/ConditionInput/ConditionInput.styles.js +4 -3
  62. package/lib/components/ConditionInput/ConditionInput.styles.js.map +1 -1
  63. package/lib/components/ConditionInput/ConditionInput.types.d.ts +4 -0
  64. package/lib/components/ConditionInput/ConditionInput.types.d.ts.map +1 -1
  65. package/lib/components/ConditionInput/ConditionInput.types.js.map +1 -1
  66. package/lib/components/PromotedFilters/ConditionSelector.d.ts +2 -0
  67. package/lib/components/PromotedFilters/ConditionSelector.d.ts.map +1 -1
  68. package/lib/components/PromotedFilters/ConditionSelector.js +13 -20
  69. package/lib/components/PromotedFilters/ConditionSelector.js.map +1 -1
  70. package/lib/components/PromotedFilters/PromotedFilters.d.ts.map +1 -1
  71. package/lib/components/PromotedFilters/PromotedFilters.js +36 -25
  72. package/lib/components/PromotedFilters/PromotedFilters.js.map +1 -1
  73. package/lib/components/PromotedFilters/PromotedFilters.styles.d.ts +191 -3
  74. package/lib/components/PromotedFilters/PromotedFilters.styles.d.ts.map +1 -1
  75. package/lib/components/PromotedFilters/PromotedFilters.styles.js +13 -5
  76. package/lib/components/PromotedFilters/PromotedFilters.styles.js.map +1 -1
  77. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts +4 -0
  78. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts.map +1 -1
  79. package/lib/components/PromotedFilters/PromotedFilters.types.js.map +1 -1
  80. package/package.json +4 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumericRangeInput.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/NumericRangeInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useState } from 'react';\nimport type { Ref } from 'react';\n\nimport { NumberRangeInput, useAfterInitialEffect, useI18n } from '@pega/cosmos-react-core';\nimport type { BaseProps, FormControlProps, NoChildrenProp } from '@pega/cosmos-react-core';\n\nexport interface NumericRangeInputProps extends BaseProps, NoChildrenProp {\n /** Label for the range input. */\n label: FormControlProps['label'];\n /** Determines whether the label is hidden. */\n labelHidden?: FormControlProps['labelHidden'];\n /** Rhs for the condition. */\n rhs?: { start: string | number; end: string | number };\n /** Callback for any modifications to the Rhs. */\n onChange: (rhs: { start: number | undefined; end: number | undefined }) => void;\n /** Used to indicate any errors on the control. */\n status?: 'error';\n /**\n * Determines whether decimals can be entered.\n * @default true\n */\n allowDecimal?: boolean;\n /** Determines whether value is stored in the database in the range of 0 to 1 or 0 to 100. */\n unit?: 'percent_1' | 'percent_100';\n /** Ref to the component. */\n ref?: Ref<HTMLFieldSetElement>;\n}\n\nexport const NumericRangeInput = forwardRef<HTMLFieldSetElement, NumericRangeInputProps>(\n ({ rhs, onChange, status, allowDecimal = true, unit, ...props }, ref) => {\n const t = useI18n();\n // Formats a value as a percentage and fixes floating point rounding errors in input box\n const convertPercentToDisplayValue = (value: string | number | undefined) => {\n if (unit === 'percent_1') {\n const num = typeof value === 'number' ? value : Number(value);\n // Number value of empty string is 0, which we don't want, so we return just value instead\n if (!Number.isNaN(num) && value !== '') {\n return parseFloat((num * 100).toFixed(2));\n }\n }\n return value;\n };\n\n const [internalValue, setInternalValue] = useState<{\n start: string | undefined;\n end: string | undefined;\n }>({\n start: convertPercentToDisplayValue(rhs?.start)?.toString(),\n end: convertPercentToDisplayValue(rhs?.end)?.toString()\n });\n\n useAfterInitialEffect(() => {\n setInternalValue({\n start: convertPercentToDisplayValue(rhs?.start)?.toString(),\n end: convertPercentToDisplayValue(rhs?.end)?.toString()\n });\n }, [rhs?.start, rhs?.end]);\n\n const handleChange = (newValue: { start: string; end: string }) => {\n setInternalValue(newValue);\n };\n\n const handleBlur = (newValue: { start: string; end: string }) => {\n let outStartValue: number | undefined;\n let outEndValue: number | undefined;\n if (newValue.start) {\n const valueAsNumber = Number(newValue.start);\n if (!Number.isNaN(valueAsNumber)) {\n outStartValue = unit === 'percent_1' ? valueAsNumber / 100 : valueAsNumber;\n }\n }\n if (newValue.end) {\n const valueAsNumber = Number(newValue.end);\n if (!Number.isNaN(valueAsNumber)) {\n outEndValue = unit === 'percent_1' ? valueAsNumber / 100 : valueAsNumber;\n }\n }\n onChange({\n start: outStartValue,\n end: outEndValue\n });\n };\n\n return (\n <NumberRangeInput\n {...props}\n ref={ref}\n value={internalValue}\n onChange={handleChange}\n onBlur={handleBlur}\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_number_range') : undefined}\n numberOfDecimals={allowDecimal ? undefined : 0}\n unit={unit === 'percent_1' || unit === 'percent_100' ? 'percent' : undefined}\n fromPlaceholder={t('range_from_numeric')}\n toPlaceholder={t('range_to_numeric')}\n />\n );\n }\n);\n"]}
@@ -8,7 +8,7 @@ interface ValueSelectorProps<T extends {
8
8
  }> extends BaseProps, NoChildrenProp {
9
9
  mode: ComboBoxProps['mode'];
10
10
  /** Previous selection */
11
- values: string[] | string;
11
+ values: string[] | string | undefined;
12
12
  /** Current selected LHS */
13
13
  selectedField: T;
14
14
  /** Current selected comparator */
@@ -21,13 +21,15 @@ interface ValueSelectorProps<T extends {
21
21
  onChange: (selection: string[] | string) => void;
22
22
  /** Callback for blur */
23
23
  onBlur?: (selection?: string[] | string) => void;
24
+ /** Callback for clear */
25
+ onClear?: () => void;
24
26
  /** Used to indicate any errors on the control */
25
27
  status?: 'error';
26
28
  /** Placeholder text to display in empty control */
27
29
  placeholder?: ComboBoxProps['placeholder'];
28
30
  /** Custom label for input. Makes label visible if provided. */
29
31
  label?: ComboBoxProps['label'];
30
- /** Guidance text that apppears below the input. */
32
+ /** Guidance text that appears below the input. */
31
33
  info?: ComboBoxProps['info'];
32
34
  /** sets status and info */
33
35
  setApiError?: Dispatch<SetStateAction<string | null>>;
@@ -36,6 +38,6 @@ interface ValueSelectorProps<T extends {
36
38
  declare const ValueSelector: <F extends object & {
37
39
  id: string;
38
40
  possibleValues?: ValueSelection<F>;
39
- }>({ values, selectedField, comparator, rhs, onChange, onBlur, status, mode, parameters, placeholder, label, info, setApiError }: ValueSelectorProps<F>) => import("react/jsx-runtime").JSX.Element;
41
+ }>({ values, selectedField, comparator, rhs, onChange, onBlur, onClear, status, mode, parameters, placeholder, label, info, setApiError }: ValueSelectorProps<F>) => import("react/jsx-runtime").JSX.Element;
40
42
  export default ValueSelector;
41
43
  //# sourceMappingURL=ValueSelector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ValueSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/ValueSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAa,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAUnG,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAEd,cAAc,EAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,UAAU,kBAAkB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,CACvF,SAAQ,SAAS,EACf,cAAc;IAChB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,yBAAyB;IACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,2BAA2B;IAC3B,aAAa,EAAE,CAAC,CAAC;IACjB,kCAAkC;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,4BAA4B;IAC5B,GAAG,EAAE,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,oDAAoD;IACpD,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,2BAA2B;IAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,wBAAwB;IACxB,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,+DAA+D;IAC/D,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,mDAAmD;IACnD,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,2BAA2B;IAC3B,WAAW,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CACvD;AAgCD,6EAA6E;AAC7E,QAAA,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,EAAE,+HAc3F,kBAAkB,CAAC,CAAC,CAAC,4CA8NvB,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ValueSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/ValueSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAa,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAYnG,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAEd,cAAc,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,UAAU,kBAAkB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,CACvF,SAAQ,SAAS,EACf,cAAc;IAChB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5B,yBAAyB;IACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;IACtC,2BAA2B;IAC3B,aAAa,EAAE,CAAC,CAAC;IACjB,kCAAkC;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,4BAA4B;IAC5B,GAAG,EAAE,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,oDAAoD;IACpD,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,2BAA2B;IAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,wBAAwB;IACxB,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,+DAA+D;IAC/D,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,kDAAkD;IAClD,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,2BAA2B;IAC3B,WAAW,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CACvD;AAgCD,6EAA6E;AAC7E,QAAA,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,EAAE,wIAe3F,kBAAkB,CAAC,CAAC,CAAC,4CA+OvB,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useCallback, useEffect, useRef, useState } from 'react';
3
- import { ComboBox, createStringMatcher, hasProp, useI18n, usePrevious } from '@pega/cosmos-react-core';
3
+ import { ComboBox, createStringMatcher, hasProp, Icon, useI18n, usePrevious } from '@pega/cosmos-react-core';
4
+ import { StyledClearButton } from '@pega/cosmos-react-core/lib/components/CompositeInput/CompositeInput.styles';
4
5
  const CHUNK_SIZE = 10;
5
6
  const getFilteredOptions = (options, filterValue) => {
6
7
  const matcher = createStringMatcher(filterValue);
@@ -26,7 +27,7 @@ const getItems = (item, values) => {
26
27
  });
27
28
  };
28
29
  /** A control for selecting multiple values using checkboxes in an overlay */
29
- const ValueSelector = ({ values, selectedField, comparator, rhs, onChange, onBlur, status, mode, parameters, placeholder, label, info, setApiError }) => {
30
+ const ValueSelector = ({ values, selectedField, comparator, rhs, onChange, onBlur, onClear, status, mode, parameters, placeholder, label, info, setApiError }) => {
30
31
  const t = useI18n();
31
32
  const inputRef = useRef(null);
32
33
  const [filterValue, setFilterValue] = useState('');
@@ -37,13 +38,14 @@ const ValueSelector = ({ values, selectedField, comparator, rhs, onChange, onBlu
37
38
  const [items, setItems] = useState([]);
38
39
  const [selected, setSelected] = useState();
39
40
  const fetchPossibleValues = useCallback((isFirstChunkLoad, subscribed = true) => {
40
- if (isSelectedFieldPossibleValuesFunction && (isFirstChunkLoad || !loading)) {
41
+ const { possibleValues: fn } = selectedField;
42
+ if (typeof fn === 'function' && (isFirstChunkLoad || !loading)) {
41
43
  setLoading(true);
42
44
  if (isFirstChunkLoad) {
43
45
  setApiError?.(null);
44
46
  setItems([]);
45
47
  }
46
- selectedField.possibleValues({
48
+ fn({
47
49
  searchString: filterValue,
48
50
  comparator,
49
51
  lhs: selectedField,
@@ -66,15 +68,7 @@ const ValueSelector = ({ values, selectedField, comparator, rhs, onChange, onBlu
66
68
  }
67
69
  });
68
70
  }
69
- }, [
70
- isSelectedFieldPossibleValuesFunction,
71
- loading,
72
- items,
73
- selectedField,
74
- filterValue,
75
- comparator,
76
- values
77
- ]);
71
+ }, [loading, items, selectedField, filterValue, comparator, values]);
78
72
  useEffect(() => {
79
73
  let subscribed = true;
80
74
  if (hasProp(rhs, 'parameterId')) {
@@ -118,11 +112,16 @@ const ValueSelector = ({ values, selectedField, comparator, rhs, onChange, onBlu
118
112
  useEffect(() => {
119
113
  let subscribed = true;
120
114
  const handlePossibleValues = (ids, setSelectedFn) => {
115
+ const filteredIds = ids.filter(id => id !== '');
116
+ if (filteredIds.length === 0) {
117
+ setSelectedFn([]);
118
+ return;
119
+ }
121
120
  const { possibleValues } = selectedField;
122
121
  if (typeof possibleValues === 'function') {
123
122
  possibleValues({
124
123
  lhs: selectedField,
125
- ids
124
+ ids: filteredIds
126
125
  })
127
126
  .then(response => {
128
127
  if (subscribed) {
@@ -140,14 +139,14 @@ const ValueSelector = ({ values, selectedField, comparator, rhs, onChange, onBlu
140
139
  });
141
140
  }
142
141
  else if (Array.isArray(possibleValues)) {
143
- const options = ids.map(id => {
144
- const optionLabel = possibleValues.find(opt => typeof opt === 'object' && opt.id === id);
142
+ const options = filteredIds.map(id => {
143
+ const optionLabel = possibleValues.find((opt) => typeof opt === 'object' && opt.id === id);
145
144
  return { id, text: optionLabel?.primary ?? id };
146
145
  });
147
146
  setSelectedFn(options);
148
147
  }
149
148
  };
150
- if (typeof values === 'string') {
149
+ if (typeof values === 'string' && values) {
151
150
  if (hasProp(rhs, 'parameterId')) {
152
151
  const selectedItem = parameters.find(item => item.id === values);
153
152
  setSelected({
@@ -163,10 +162,10 @@ const ValueSelector = ({ values, selectedField, comparator, rhs, onChange, onBlu
163
162
  });
164
163
  }
165
164
  }
166
- else if (values.length > 0) {
165
+ else if (Array.isArray(values) && values.length > 0) {
167
166
  const onRemove = (value) => {
168
167
  onChange((() => {
169
- const current = values;
168
+ const current = Array.isArray(values) ? values : [];
170
169
  return current.filter(selection => selection !== value);
171
170
  })());
172
171
  };
@@ -209,17 +208,24 @@ const ValueSelector = ({ values, selectedField, comparator, rhs, onChange, onBlu
209
208
  }
210
209
  else {
211
210
  onChange((() => {
212
- const current = values;
211
+ const current = Array.isArray(values) ? values : [];
213
212
  return current.includes(id)
214
213
  ? current.filter(selection => selection !== id)
215
- : [...values, id];
214
+ : [...current, id];
216
215
  })());
217
216
  }
218
217
  },
219
218
  loading,
220
219
  loadMore: hasMore ? () => fetchPossibleValues(false) : undefined,
221
220
  accent: createStringMatcher(filterValue)
222
- }, onMenuOpen: () => fetchPossibleValues(true), selected: selected, status: status, info: info }));
221
+ }, onMenuOpen: () => fetchPossibleValues(true), selected: selected, status: status, info: info, actions: onClear && (_jsx(StyledClearButton, { icon: true, variant: 'simple', label: t('clear'), onClick: () => {
222
+ onChange(mode === 'single-select' ? '' : []);
223
+ onClear();
224
+ if (inputRef.current) {
225
+ const inputEl = inputRef.current.querySelector('input');
226
+ inputEl?.focus();
227
+ }
228
+ }, children: _jsx(Icon, { name: 'times' }) })) }));
223
229
  };
224
230
  export default ValueSelector;
225
231
  //# sourceMappingURL=ValueSelector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ValueSelector.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/ValueSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Dispatch, SetStateAction } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport type { BaseProps, ComboBoxProps, MenuProps, NoChildrenProp } from '@pega/cosmos-react-core';\nimport {\n ComboBox,\n createStringMatcher,\n hasProp,\n useI18n,\n usePrevious\n} from '@pega/cosmos-react-core';\nimport type { Selected } from '@pega/cosmos-react-core/lib/components/ComboBox/ComboBox.types';\n\nimport type {\n LeafCondition,\n ParameterValue,\n ReferenceValue,\n ValueSelection,\n ValueSelectionFunction\n} from '../ConditionBuilder.types';\nimport type { Comparator } from '../core/types';\n\nconst CHUNK_SIZE = 10;\n\ninterface ValueSelectorProps<T extends { id: string; possibleValues?: ValueSelection<T> }>\n extends BaseProps,\n NoChildrenProp {\n mode: ComboBoxProps['mode'];\n /** Previous selection */\n values: string[] | string;\n /** Current selected LHS */\n selectedField: T;\n /** Current selected comparator */\n comparator: Comparator;\n /** Rhs for the condition */\n rhs: NonNullable<LeafCondition['rhs']>;\n /** Passed Parameters array for Rhstype PARAMETER */\n parameters: ParameterValue[];\n /** Callback for changes */\n onChange: (selection: string[] | string) => void;\n /** Callback for blur */\n onBlur?: (selection?: string[] | string) => void;\n /** Used to indicate any errors on the control */\n status?: 'error';\n /** Placeholder text to display in empty control */\n placeholder?: ComboBoxProps['placeholder'];\n /** Custom label for input. Makes label visible if provided. */\n label?: ComboBoxProps['label'];\n /** Guidance text that apppears below the input. */\n info?: ComboBoxProps['info'];\n /** sets status and info */\n setApiError?: Dispatch<SetStateAction<string | null>>;\n}\n\nconst getFilteredOptions = (\n options: (string | ParameterValue | ReferenceValue)[],\n filterValue: string\n) => {\n const matcher = createStringMatcher(filterValue);\n return options.filter(option => {\n if (typeof option === 'object') return matcher.test(option.primary);\n return matcher.test(option);\n });\n};\n\nconst getItems = (\n item: (string | ParameterValue | ReferenceValue)[],\n values: string[] | string\n) => {\n return item.map(option => {\n if (typeof option === 'object') {\n return {\n ...option,\n selected: Array.isArray(values) ? values.includes(option.id) : values === option.id\n };\n }\n return {\n id: option,\n primary: option,\n selected: Array.isArray(values) ? values.includes(option) : values === option\n };\n });\n};\n\n/** A control for selecting multiple values using checkboxes in an overlay */\nconst ValueSelector = <F extends object & { id: string; possibleValues?: ValueSelection<F> }>({\n values,\n selectedField,\n comparator,\n rhs,\n onChange,\n onBlur,\n status,\n mode,\n parameters,\n placeholder,\n label,\n info,\n setApiError\n}: ValueSelectorProps<F>) => {\n const t = useI18n();\n\n const inputRef = useRef<HTMLDivElement>(null);\n\n const [filterValue, setFilterValue] = useState('');\n const prevFilterValue = usePrevious(filterValue);\n const [loading, setLoading] = useState(false);\n const isSelectedFieldPossibleValuesFunction =\n hasProp(selectedField, 'possibleValues') && typeof selectedField.possibleValues === 'function';\n const [hasMore, setHasMore] = useState(isSelectedFieldPossibleValuesFunction);\n const [items, setItems] = useState<MenuProps['items']>([]);\n const [selected, setSelected] = useState<ComboBoxProps['selected']>();\n\n const fetchPossibleValues = useCallback(\n (isFirstChunkLoad: boolean, subscribed: boolean = true) => {\n if (isSelectedFieldPossibleValuesFunction && (isFirstChunkLoad || !loading)) {\n setLoading(true);\n if (isFirstChunkLoad) {\n setApiError?.(null);\n setItems([]);\n }\n (selectedField.possibleValues as ValueSelectionFunction<F>)({\n searchString: filterValue,\n comparator,\n lhs: selectedField,\n pageNumber: isFirstChunkLoad ? 1 : Math.floor(items.length / CHUNK_SIZE) + 1,\n pageSize: CHUNK_SIZE\n })\n .then(response => {\n if (subscribed) {\n setApiError?.(null);\n setHasMore(response.length >= CHUNK_SIZE);\n const newItems = getItems(response, values);\n setItems(curr => (isFirstChunkLoad ? newItems : [...curr, ...newItems]));\n setLoading(false);\n }\n })\n .catch(err => {\n if (err && subscribed) {\n setApiError?.(t('condition_builder_possible_values_error'));\n setLoading(false);\n }\n });\n }\n },\n [\n isSelectedFieldPossibleValuesFunction,\n loading,\n items,\n selectedField,\n filterValue,\n comparator,\n values\n ]\n );\n\n useEffect(() => {\n let subscribed = true;\n\n if (hasProp(rhs, 'parameterId')) {\n setItems(getItems(getFilteredOptions(parameters, filterValue), values));\n } else if (hasProp(selectedField, 'possibleValues')) {\n const { possibleValues } = selectedField;\n if (typeof possibleValues === 'function') {\n if (prevFilterValue !== filterValue) {\n fetchPossibleValues(true, subscribed);\n } else {\n setItems(curr =>\n curr.map(i => ({\n ...i,\n selected: Array.isArray(values) ? values.includes(i.id) : values === i.id\n }))\n );\n }\n } else if (Array.isArray(possibleValues)) {\n setItems(getItems(getFilteredOptions(possibleValues, filterValue), values));\n } else {\n setItems([]);\n }\n }\n\n return () => {\n subscribed = false;\n };\n }, [\n rhs,\n parameters,\n filterValue,\n values,\n selectedField.id,\n selectedField.possibleValues,\n comparator\n ]);\n\n useEffect(() => {\n setFilterValue('');\n }, [selectedField, comparator]);\n\n useEffect(() => {\n let subscribed = true;\n\n const handlePossibleValues = (ids: string[], setSelectedFn: (options: Selected[]) => void) => {\n const { possibleValues } = selectedField;\n if (typeof possibleValues === 'function') {\n (possibleValues as ValueSelectionFunction<F>)({\n lhs: selectedField,\n ids\n })\n .then(response => {\n if (subscribed) {\n const options = response.map(option =>\n typeof option === 'object'\n ? { id: option.id, text: option.primary }\n : { id: option, text: option }\n );\n setSelectedFn(options);\n }\n })\n .catch(err => {\n if (err && subscribed) {\n setApiError?.(t('condition_builder_possible_values_error'));\n return [];\n }\n });\n } else if (Array.isArray(possibleValues)) {\n const options = ids.map(id => {\n const optionLabel = possibleValues.find(\n opt => typeof opt === 'object' && opt.id === id\n ) as ReferenceValue;\n return { id, text: optionLabel?.primary ?? id };\n });\n setSelectedFn(options);\n }\n };\n\n if (typeof values === 'string') {\n if (hasProp(rhs, 'parameterId')) {\n const selectedItem = parameters.find(item => item.id === values);\n setSelected({\n items: { id: values, text: selectedItem !== undefined ? selectedItem.primary : values }\n });\n } else if (hasProp(selectedField, 'possibleValues')) {\n handlePossibleValues([values], options => setSelected({ items: options[0] }));\n } else {\n setSelected({\n items: { id: values, text: values }\n });\n }\n } else if (values.length > 0) {\n const onRemove = (value: string) => {\n onChange(\n (() => {\n const current = values as string[];\n return current.filter(selection => selection !== value) as string | string[];\n })()\n );\n };\n if (hasProp(rhs, 'parameterId')) {\n setSelected({\n items: values.map(s => {\n const optionLabel = parameters.find(opt => typeof opt === 'object' && opt.id === s);\n return { id: s, text: optionLabel?.primary ?? s };\n }),\n onRemove\n });\n } else if (hasProp(selectedField, 'possibleValues')) {\n handlePossibleValues(values, options => setSelected({ items: options, onRemove }));\n } else {\n setSelected({ items: values.map(s => ({ id: s, text: s })), onRemove });\n }\n } else {\n setSelected(undefined);\n }\n\n return () => {\n subscribed = false;\n };\n }, [values, rhs, parameters, selectedField.id, selectedField.possibleValues]);\n\n return (\n <ComboBox\n ref={inputRef}\n mode={mode}\n label={label ?? t('condition_builder_possible_values_label')}\n placeholder={placeholder}\n value={filterValue}\n onChange={e => {\n setFilterValue(e.target.value);\n if (mode === 'single-select' && !e.target.value) onChange('');\n }}\n onBlur={() => {\n onBlur?.(values);\n setFilterValue('');\n }}\n menu={{\n items,\n onItemClick: id => {\n if (mode === 'single-select') {\n setFilterValue('');\n onChange(id);\n } else {\n onChange(\n (() => {\n const current = values as string[];\n return current.includes(id)\n ? current.filter(selection => selection !== id)\n : [...values, id];\n })()\n );\n }\n },\n loading,\n loadMore: hasMore ? () => fetchPossibleValues(false) : undefined,\n accent: createStringMatcher(filterValue)\n }}\n onMenuOpen={() => fetchPossibleValues(true)}\n selected={selected}\n status={status}\n info={info}\n />\n );\n};\n\nexport default ValueSelector;\n"]}
1
+ {"version":3,"file":"ValueSelector.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/ValueSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Dispatch, SetStateAction } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport type { BaseProps, ComboBoxProps, MenuProps, NoChildrenProp } from '@pega/cosmos-react-core';\nimport {\n ComboBox,\n createStringMatcher,\n hasProp,\n Icon,\n useI18n,\n usePrevious\n} from '@pega/cosmos-react-core';\nimport type { Selected } from '@pega/cosmos-react-core/lib/components/ComboBox/ComboBox.types';\nimport { StyledClearButton } from '@pega/cosmos-react-core/lib/components/CompositeInput/CompositeInput.styles';\n\nimport type {\n LeafCondition,\n ParameterValue,\n ReferenceValue,\n ValueSelection\n} from '../ConditionBuilder.types';\nimport type { Comparator } from '../core/types';\n\nconst CHUNK_SIZE = 10;\n\ninterface ValueSelectorProps<T extends { id: string; possibleValues?: ValueSelection<T> }>\n extends BaseProps,\n NoChildrenProp {\n mode: ComboBoxProps['mode'];\n /** Previous selection */\n values: string[] | string | undefined;\n /** Current selected LHS */\n selectedField: T;\n /** Current selected comparator */\n comparator: Comparator;\n /** Rhs for the condition */\n rhs: NonNullable<LeafCondition['rhs']>;\n /** Passed Parameters array for Rhstype PARAMETER */\n parameters: ParameterValue[];\n /** Callback for changes */\n onChange: (selection: string[] | string) => void;\n /** Callback for blur */\n onBlur?: (selection?: string[] | string) => void;\n /** Callback for clear */\n onClear?: () => void;\n /** Used to indicate any errors on the control */\n status?: 'error';\n /** Placeholder text to display in empty control */\n placeholder?: ComboBoxProps['placeholder'];\n /** Custom label for input. Makes label visible if provided. */\n label?: ComboBoxProps['label'];\n /** Guidance text that appears below the input. */\n info?: ComboBoxProps['info'];\n /** sets status and info */\n setApiError?: Dispatch<SetStateAction<string | null>>;\n}\n\nconst getFilteredOptions = (\n options: (string | ParameterValue | ReferenceValue)[],\n filterValue: string\n) => {\n const matcher = createStringMatcher(filterValue);\n return options.filter(option => {\n if (typeof option === 'object') return matcher.test(option.primary);\n return matcher.test(option);\n });\n};\n\nconst getItems = (\n item: (string | ParameterValue | ReferenceValue)[],\n values: string[] | string | undefined\n) => {\n return item.map(option => {\n if (typeof option === 'object') {\n return {\n ...option,\n selected: Array.isArray(values) ? values.includes(option.id) : values === option.id\n };\n }\n return {\n id: option,\n primary: option,\n selected: Array.isArray(values) ? values.includes(option) : values === option\n };\n });\n};\n\n/** A control for selecting multiple values using checkboxes in an overlay */\nconst ValueSelector = <F extends object & { id: string; possibleValues?: ValueSelection<F> }>({\n values,\n selectedField,\n comparator,\n rhs,\n onChange,\n onBlur,\n onClear,\n status,\n mode,\n parameters,\n placeholder,\n label,\n info,\n setApiError\n}: ValueSelectorProps<F>) => {\n const t = useI18n();\n\n const inputRef = useRef<HTMLDivElement>(null);\n\n const [filterValue, setFilterValue] = useState('');\n const prevFilterValue = usePrevious(filterValue);\n const [loading, setLoading] = useState(false);\n const isSelectedFieldPossibleValuesFunction =\n hasProp(selectedField, 'possibleValues') && typeof selectedField.possibleValues === 'function';\n const [hasMore, setHasMore] = useState(isSelectedFieldPossibleValuesFunction);\n const [items, setItems] = useState<MenuProps['items']>([]);\n const [selected, setSelected] = useState<ComboBoxProps['selected']>();\n\n const fetchPossibleValues = useCallback(\n (isFirstChunkLoad: boolean, subscribed: boolean = true) => {\n const { possibleValues: fn } = selectedField;\n if (typeof fn === 'function' && (isFirstChunkLoad || !loading)) {\n setLoading(true);\n if (isFirstChunkLoad) {\n setApiError?.(null);\n setItems([]);\n }\n fn({\n searchString: filterValue,\n comparator,\n lhs: selectedField,\n pageNumber: isFirstChunkLoad ? 1 : Math.floor(items.length / CHUNK_SIZE) + 1,\n pageSize: CHUNK_SIZE\n })\n .then(response => {\n if (subscribed) {\n setApiError?.(null);\n setHasMore(response.length >= CHUNK_SIZE);\n const newItems = getItems(response, values);\n setItems(curr => (isFirstChunkLoad ? newItems : [...curr, ...newItems]));\n setLoading(false);\n }\n })\n .catch(err => {\n if (err && subscribed) {\n setApiError?.(t('condition_builder_possible_values_error'));\n setLoading(false);\n }\n });\n }\n },\n [loading, items, selectedField, filterValue, comparator, values]\n );\n\n useEffect(() => {\n let subscribed = true;\n\n if (hasProp(rhs, 'parameterId')) {\n setItems(getItems(getFilteredOptions(parameters, filterValue), values));\n } else if (hasProp(selectedField, 'possibleValues')) {\n const { possibleValues } = selectedField;\n if (typeof possibleValues === 'function') {\n if (prevFilterValue !== filterValue) {\n fetchPossibleValues(true, subscribed);\n } else {\n setItems(curr =>\n curr.map(i => ({\n ...i,\n selected: Array.isArray(values) ? values.includes(i.id) : values === i.id\n }))\n );\n }\n } else if (Array.isArray(possibleValues)) {\n setItems(getItems(getFilteredOptions(possibleValues, filterValue), values));\n } else {\n setItems([]);\n }\n }\n\n return () => {\n subscribed = false;\n };\n }, [\n rhs,\n parameters,\n filterValue,\n values,\n selectedField.id,\n selectedField.possibleValues,\n comparator\n ]);\n\n useEffect(() => {\n setFilterValue('');\n }, [selectedField, comparator]);\n\n useEffect(() => {\n let subscribed = true;\n\n const handlePossibleValues = (ids: string[], setSelectedFn: (options: Selected[]) => void) => {\n const filteredIds = ids.filter(id => id !== '');\n if (filteredIds.length === 0) {\n setSelectedFn([]);\n return;\n }\n const { possibleValues } = selectedField;\n if (typeof possibleValues === 'function') {\n possibleValues({\n lhs: selectedField,\n ids: filteredIds\n })\n .then(response => {\n if (subscribed) {\n const options = response.map(option =>\n typeof option === 'object'\n ? { id: option.id, text: option.primary }\n : { id: option, text: option }\n );\n setSelectedFn(options);\n }\n })\n .catch(err => {\n if (err && subscribed) {\n setApiError?.(t('condition_builder_possible_values_error'));\n return [];\n }\n });\n } else if (Array.isArray(possibleValues)) {\n const options = filteredIds.map(id => {\n const optionLabel = possibleValues.find(\n (opt): opt is ReferenceValue => typeof opt === 'object' && opt.id === id\n );\n return { id, text: optionLabel?.primary ?? id };\n });\n setSelectedFn(options);\n }\n };\n\n if (typeof values === 'string' && values) {\n if (hasProp(rhs, 'parameterId')) {\n const selectedItem = parameters.find(item => item.id === values);\n setSelected({\n items: { id: values, text: selectedItem !== undefined ? selectedItem.primary : values }\n });\n } else if (hasProp(selectedField, 'possibleValues')) {\n handlePossibleValues([values], options => setSelected({ items: options[0] }));\n } else {\n setSelected({\n items: { id: values, text: values }\n });\n }\n } else if (Array.isArray(values) && values.length > 0) {\n const onRemove = (value: string) => {\n onChange(\n (() => {\n const current = Array.isArray(values) ? values : [];\n return current.filter(selection => selection !== value);\n })()\n );\n };\n if (hasProp(rhs, 'parameterId')) {\n setSelected({\n items: values.map(s => {\n const optionLabel = parameters.find(opt => typeof opt === 'object' && opt.id === s);\n return { id: s, text: optionLabel?.primary ?? s };\n }),\n onRemove\n });\n } else if (hasProp(selectedField, 'possibleValues')) {\n handlePossibleValues(values, options => setSelected({ items: options, onRemove }));\n } else {\n setSelected({ items: values.map(s => ({ id: s, text: s })), onRemove });\n }\n } else {\n setSelected(undefined);\n }\n\n return () => {\n subscribed = false;\n };\n }, [values, rhs, parameters, selectedField.id, selectedField.possibleValues]);\n\n return (\n <ComboBox\n ref={inputRef}\n mode={mode}\n label={label ?? t('condition_builder_possible_values_label')}\n placeholder={placeholder}\n value={filterValue}\n onChange={e => {\n setFilterValue(e.target.value);\n if (mode === 'single-select' && !e.target.value) onChange('');\n }}\n onBlur={() => {\n onBlur?.(values);\n setFilterValue('');\n }}\n menu={{\n items,\n onItemClick: id => {\n if (mode === 'single-select') {\n setFilterValue('');\n onChange(id);\n } else {\n onChange(\n (() => {\n const current = Array.isArray(values) ? values : [];\n return current.includes(id)\n ? current.filter(selection => selection !== id)\n : [...current, id];\n })()\n );\n }\n },\n loading,\n loadMore: hasMore ? () => fetchPossibleValues(false) : undefined,\n accent: createStringMatcher(filterValue)\n }}\n onMenuOpen={() => fetchPossibleValues(true)}\n selected={selected}\n status={status}\n info={info}\n actions={\n onClear && (\n <StyledClearButton\n icon\n variant='simple'\n label={t('clear')}\n onClick={() => {\n onChange(mode === 'single-select' ? '' : []);\n onClear();\n if (inputRef.current) {\n const inputEl = inputRef.current.querySelector('input');\n inputEl?.focus();\n }\n }}\n >\n <Icon name='times' />\n </StyledClearButton>\n )\n }\n />\n );\n};\n\nexport default ValueSelector;\n"]}
@@ -1,5 +1,5 @@
1
- import type { FunctionComponent, Ref } from 'react';
2
- import type { BaseProps, ForwardProps, HandleValue } from '@pega/cosmos-react-core';
1
+ import type { FunctionComponent } from 'react';
2
+ import type { BaseProps, ForwardProps } from '@pega/cosmos-react-core';
3
3
  import type { FieldType, Comparator, RHSType } from '../core/types';
4
4
  import type { LeafCondition, Field, DateFunctionsByType } from '../ConditionBuilder.types';
5
5
  /**
@@ -12,7 +12,7 @@ import type { LeafCondition, Field, DateFunctionsByType } from '../ConditionBuil
12
12
  export declare function isValidRhs(rhs: LeafCondition['rhs'], lhs: LeafCondition['lhs'], fields: Field[], fieldType?: FieldType, trimValues?: boolean): boolean;
13
13
  /** For a condition with the given comparator and lhs-field-type, determines an appropriate default value for the Rhs */
14
14
  export declare function getDefaultRhs(fieldType: FieldType, comparator: Comparator, validRhsTypes: Set<RHSType>, dateFunctions?: DateFunctionsByType): LeafCondition['rhs'];
15
- export declare function truncateISODateString(dateString: string, fieldType: FieldType): string;
15
+ export declare function truncateISODateString(dateString: string, fieldType: FieldType, withSeconds?: boolean): string;
16
16
  /** Type definition for the input props of RhsControls */
17
17
  interface RhsControlProps extends BaseProps {
18
18
  /** Lhs for the condition */
@@ -33,8 +33,8 @@ interface RhsControlProps extends BaseProps {
33
33
  validRhsTypes: Set<RHSType>;
34
34
  /** Passed to enable additional date controls on the RHS, when a DATE_TIME/DATE_ONLY field is selected on the LHS */
35
35
  dateFunctions?: DateFunctionsByType;
36
- /** Imperative handle */
37
- handle?: Ref<HandleValue>;
36
+ /** IANA timezone string used to initialize date/time pickers with the operator's timezone */
37
+ timeZone?: string;
38
38
  }
39
39
  /** A controlled component for controls on a Condition's RHS */
40
40
  declare const RhsControls: FunctionComponent<RhsControlProps & ForwardProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAe,GAAG,EAAE,MAAM,OAAO,CAAC;AAcjE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMpF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAyC3F;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,EACzB,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,EACzB,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,CAAC,EAAE,SAAS,EACrB,UAAU,GAAE,OAAe,GAC1B,OAAO,CAiGT;AAED,wHAAwH;AACxH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,EAC3B,aAAa,CAAC,EAAE,mBAAmB,GAClC,aAAa,CAAC,KAAK,CAAC,CAgDtB;AAID,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAkBtF;AAED,yDAAyD;AACzD,UAAU,eAAgB,SAAQ,SAAS;IACzC,4BAA4B;IAC5B,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1B,mCAAmC;IACnC,UAAU,EAAE,UAAU,CAAC;IAEvB,4BAA4B;IAC5B,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1B,4EAA4E;IAC5E,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhB,gDAAgD;IAChD,QAAQ,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAEhE,+DAA+D;IAC/D,cAAc,EAAE,OAAO,CAAC;IAExB,0BAA0B;IAC1B,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC;IAEhC,uDAAuD;IACvD,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAE5B,oHAAoH;IACpH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAEpC,wBAAwB;IACxB,MAAM,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CAC3B;AAED,+DAA+D;AAC/D,QAAA,MAAM,WAAW,EAAE,iBAAiB,CAAC,eAAe,GAAG,YAAY,CAoblE,CAAC;AACF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,OAAO,CAAC;AAa5D,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAMvE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AA2C3F;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,EACzB,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,EACzB,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,CAAC,EAAE,SAAS,EACrB,UAAU,GAAE,OAAe,GAC1B,OAAO,CA4GT;AAED,wHAAwH;AACxH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,EAC3B,aAAa,CAAC,EAAE,mBAAmB,GAClC,aAAa,CAAC,KAAK,CAAC,CAgDtB;AAID,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,WAAW,UAAQ,GAClB,MAAM,CAkBR;AAED,yDAAyD;AACzD,UAAU,eAAgB,SAAQ,SAAS;IACzC,4BAA4B;IAC5B,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1B,mCAAmC;IACnC,UAAU,EAAE,UAAU,CAAC;IAEvB,4BAA4B;IAC5B,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1B,4EAA4E;IAC5E,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhB,gDAAgD;IAChD,QAAQ,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAEhE,+DAA+D;IAC/D,cAAc,EAAE,OAAO,CAAC;IAExB,0BAA0B;IAC1B,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC;IAEhC,uDAAuD;IACvD,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAE5B,oHAAoH;IACpH,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAEpC,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,+DAA+D;AAC/D,QAAA,MAAM,WAAW,EAAE,iBAAiB,CAAC,eAAe,GAAG,YAAY,CA2alE,CAAC;AACF,eAAe,WAAW,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect, useMemo } from 'react';
3
- import { DateInput, DateTimeInput, Flex, Input, hasProp, TimeInput, useI18n, DateRangeInput, TimeRangeInput, NumberRangeInput } from '@pega/cosmos-react-core';
2
+ import { useState, useMemo } from 'react';
3
+ import { DateInput, DateTimeInput, Flex, Input, hasProp, TimeInput, useI18n, DateRangeInput, TimeRangeInput } from '@pega/cosmos-react-core';
4
4
  import { convertTimeValueToMs } from '../core/time-utils';
5
5
  import { getItem } from '../core/utils';
6
6
  import ValueSelector from './ValueSelector';
@@ -9,6 +9,8 @@ import RhsModeSwitch from './RhsModeSwitch';
9
9
  import TimePeriodInput from './TimePeriodInput';
10
10
  import TimePeriodMenu from './TimePeriodMenu';
11
11
  import NumericInput from './NumericInput';
12
+ import { NumericRangeInput } from './NumericRangeInput';
13
+ import { CSVInput } from './CSVInput';
12
14
  function isValidLiteralValue(value, fieldType, trimValues = false) {
13
15
  // Identify any invalid numbers (e.g. when `-` is entered)
14
16
  if (typeof value === 'number') {
@@ -102,15 +104,25 @@ export function isValidRhs(rhs, lhs, fields, fieldType, trimValues = false) {
102
104
  !isValidLiteralValue(rhs.end, fieldType, trimValues)) {
103
105
  return false;
104
106
  }
107
+ if (fieldType === 'DECIMAL' || fieldType === 'INTEGER') {
108
+ return (!Number.isNaN(Number(rhs.start)) &&
109
+ !Number.isNaN(Number(rhs.end)) &&
110
+ Number(rhs.start) < Number(rhs.end));
111
+ }
105
112
  if (fieldType === 'TIME_ONLY') {
113
+ // Equal range endpoints are valid because the transformer expands them
114
+ // to cover the unit implied by the input precision (HH:mm → whole minute,
115
+ // HH:mm:ss → whole second).
106
116
  if (typeof rhs.start === 'number' && typeof rhs.end === 'number')
107
- return rhs.start < rhs.end;
117
+ return rhs.start <= rhs.end;
108
118
  if (typeof rhs.start === 'string' && typeof rhs.end === 'string')
109
- return convertTimeValueToMs(rhs.start) < convertTimeValueToMs(rhs.end);
119
+ return convertTimeValueToMs(rhs.start) <= convertTimeValueToMs(rhs.end);
110
120
  }
111
121
  const startDate = new Date(rhs.start);
112
122
  const endDate = new Date(rhs.end);
113
- return !Number.isNaN(startDate) && !Number.isNaN(endDate) && startDate < endDate;
123
+ if (Number.isNaN(startDate.getTime()) || Number.isNaN(endDate.getTime()))
124
+ return false;
125
+ return startDate <= endDate;
114
126
  }
115
127
  return true;
116
128
  }
@@ -156,7 +168,7 @@ export function getDefaultRhs(fieldType, comparator, validRhsTypes, dateFunction
156
168
  }
157
169
  // Truncates output values from DateInput/DateTimeInput to return a wall time on the RHS
158
170
  // NOTE: This assumes that the input date is set up on the UTC timezone
159
- export function truncateISODateString(dateString, fieldType) {
171
+ export function truncateISODateString(dateString, fieldType, withSeconds = false) {
160
172
  const date = new Date(dateString);
161
173
  const YYYY = date.getUTCFullYear().toString().padStart(4, '0');
162
174
  const MM = (date.getUTCMonth() + 1).toString().padStart(2, '0');
@@ -168,14 +180,14 @@ export function truncateISODateString(dateString, fieldType) {
168
180
  const mm = date.getUTCMinutes().toString().padStart(2, '0');
169
181
  const ss = date.getUTCSeconds().toString().padStart(2, '0');
170
182
  if (fieldType === 'TIME_ONLY')
171
- return `${hh}:${mm}:${ss}`;
183
+ return withSeconds ? `${hh}:${mm}:${ss}` : `${hh}:${mm}`;
172
184
  // cspell:disable-next-line
173
185
  // For DATE_TIME fields, returning a YYYY-MM-DDTHH:mm format and discarding the time-zone etc. to be consistent with the previous spec which was returning a wall time
174
186
  return `${YYYY}-${MM}-${DD}T${hh}:${mm}`;
175
187
  }
176
188
  /** A controlled component for controls on a Condition's RHS */
177
189
  const RhsControls = (props) => {
178
- const { lhs, comparator, rhs, fields, onChange, indicateErrors, itemDirection, validRhsTypes, dateFunctions, handle } = props;
190
+ const { lhs, comparator, rhs, fields, onChange, indicateErrors, itemDirection, validRhsTypes, dateFunctions, timeZone } = props;
179
191
  const t = useI18n();
180
192
  const [apiError, setApiError] = useState(null);
181
193
  // Find the field corresponding to the LHS
@@ -203,15 +215,6 @@ const RhsControls = (props) => {
203
215
  };
204
216
  return findMatchingObjectType(fields, matchingField.type);
205
217
  }, [fields, lhs]);
206
- // Set up a CSV input for IN/NOT_IN comparators
207
- const [csvInput, setCsvInput] = useState(rhs && hasProp(rhs, 'values') ? rhs.values.join(', ') : '');
208
- useEffect(() => {
209
- // If moving away from the CSV-mode, clear the CSV Input.
210
- // This ensures that if a different `rhs.values` is passed (a new empty array can be passed when an applicable comparator is selected), the local state matches the new input.
211
- if (csvInput && (!rhs || !hasProp(rhs, 'values'))) {
212
- setCsvInput('');
213
- }
214
- }, [rhs]);
215
218
  // If a field is not selected or if the comparator doesn't need any RHS, don't render anything
216
219
  if (rhs === undefined) {
217
220
  return _jsx("div", {}); // Rendering a placeholder div to keep the layout consistent
@@ -222,6 +225,7 @@ const RhsControls = (props) => {
222
225
  return _jsx("div", {}); // Rendering a placeholder div to keep the layout consistent
223
226
  }
224
227
  const fieldType = matchingField.type;
228
+ const fieldUnit = matchingField.unit;
225
229
  const parameters = matchingField.parameters !== undefined ? matchingField.parameters : [];
226
230
  // If errors should be indicated inline, validate the current rhs
227
231
  let showError = false;
@@ -265,7 +269,7 @@ const RhsControls = (props) => {
265
269
  onChange({ value: valueAsTimestamp ?? '' }, 'error');
266
270
  return;
267
271
  }
268
- const truncatedValue = truncateISODateString(valueAsISOString, fieldType); // Truncate to return a wall time as per spec
272
+ const truncatedValue = truncateISODateString(valueAsISOString, fieldType, fieldType === 'TIME_ONLY');
269
273
  onChange({ value: truncatedValue });
270
274
  };
271
275
  const handleDateRangeValueChange = ({ start, end }) => {
@@ -282,8 +286,8 @@ const RhsControls = (props) => {
282
286
  return;
283
287
  }
284
288
  const [truncatedStartValue, truncatedEndValue] = [
285
- truncateISODateString(start.valueAsISOString, fieldType),
286
- truncateISODateString(end.valueAsISOString, fieldType)
289
+ truncateISODateString(start.valueAsISOString, fieldType, fieldType === 'TIME_ONLY'),
290
+ truncateISODateString(end.valueAsISOString, fieldType, fieldType === 'TIME_ONLY')
287
291
  ];
288
292
  const onChangeParam = {
289
293
  start: truncatedStartValue ?? '',
@@ -298,32 +302,20 @@ const RhsControls = (props) => {
298
302
  onChange(onChangeParam);
299
303
  };
300
304
  const handleNumberRangeValueChange = ({ start, end }) => {
301
- const startValue = start.trim();
302
- const endValue = end.trim();
305
+ const startValue = start;
306
+ const endValue = end;
307
+ const hasStartValue = startValue !== undefined;
308
+ const hasEndValue = endValue !== undefined;
303
309
  onChange({
304
- start: startValue ? Number(start) : '',
305
- end: endValue ? Number(end) : ''
310
+ start: hasStartValue ? Number(start) : '',
311
+ end: hasEndValue ? Number(end) : ''
306
312
  },
307
313
  // checking one of values is empty, but not both
308
- ((!startValue || !endValue) && (startValue || endValue)) ||
309
- (startValue && endValue && startValue > endValue)
314
+ ((!hasStartValue || !hasEndValue) && (hasStartValue || hasEndValue)) ||
315
+ (hasStartValue && hasEndValue && startValue > endValue)
310
316
  ? 'error'
311
317
  : undefined);
312
318
  };
313
- // Handle changes from a CSV-input
314
- const handleCSVChange = (e) => {
315
- // Update the controlled input
316
- setCsvInput(e.target.value);
317
- // Submit a new RHS
318
- let newValues = e.target.value
319
- .split(',')
320
- .map(v => v.trim())
321
- .filter(v => v.length > 0); // Ignore empty strings
322
- if (fieldType === 'DECIMAL' || fieldType === 'INTEGER') {
323
- newValues = newValues.map(v => Number(v)); // This can set up some NaN values. Those are used to show an appropriate feedback when the submit button is hit
324
- }
325
- onChange({ values: newValues });
326
- };
327
319
  // Render the menu directly if in a vertical layout
328
320
  const TimePeriodComp = itemDirection === 'column' ? TimePeriodMenu : TimePeriodInput;
329
321
  const alignItems = showError ? 'center' : 'end';
@@ -332,11 +324,11 @@ const RhsControls = (props) => {
332
324
  alignItems: itemDirection === 'column' ? 'stretch' : alignItems,
333
325
  justify: 'between',
334
326
  gap: 0.5
335
- }, children: [_jsx(RhsModeSwitch, { parameters: parameters, fieldType: fieldType, comparator: comparator, rhs: rhs, onChange: onChange, mode: itemDirection === 'column' ? 'combo-box' : 'menu-button', validRhsTypes: validRhsTypes, dateFunctions: dateFunctions }), hasProp(rhs, 'field') && (_jsx(Flex, { item: { grow: 1 }, children: _jsx(FieldSelector, { value: rhs.field, onChange: handleFieldChange, fields: fieldOptions, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_no_selection') : undefined, label: t('condition_builder_compare_with_another_field') }) })), hasProp(rhs, 'parameterId') && (_jsxs(Flex, { item: { grow: 1 }, children: [parameters.length === 1 && (_jsx(Input, { value: parameters[0].primary.toString(), status: showError ? 'error' : undefined, info: showError ? t('condition_builder_empty_value_text') : undefined, name: 'rhs-text-parameter-input', label: t('condition_builder_value_label'), readOnly: true })), parameters.length > 1 && (_jsx(ValueSelector, { parameters: parameters, mode: 'single-select', values: rhs.parameterId.toString(), selectedField: matchingField, rhs: rhs, comparator: comparator, onChange: handleValueSelection, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_empty_selection_error_text') : undefined, label: t('condition_builder_value_label'), placeholder: t('condition_builder_single_selection_placeholder') }))] })), hasProp(rhs, 'value') && !hasProp(rhs, 'dateFunction') && (_jsxs(Flex, { item: { grow: 1 }, children: [fieldType === 'TEXT' && useValueSelector && (_jsx(ValueSelector, { parameters: parameters, mode: 'single-select', values: rhs.value.toString(), selectedField: matchingField, comparator: comparator, rhs: rhs, onChange: handleValueSelection, status: showError || apiError ? 'error' : undefined, info: showError ? t('condition_builder_no_selection') : apiError, setApiError: setApiError, label: t('condition_builder_value_label'), placeholder: t('condition_builder_single_selection_placeholder') })), fieldType === 'TEXT' && !useValueSelector && (_jsx(Input, { value: rhs.value.toString(), onChange: handleValueChange, status: showError ? 'error' : undefined, info: showError ? t('empty_value') : undefined, name: 'rhs-text-literal-input', label: t('condition_builder_value_label') })), (fieldType === 'DECIMAL' || fieldType === 'INTEGER') && (_jsx(NumericInput, { rhs: rhs, onChange: onChange, allowDecimal: fieldType !== 'INTEGER', status: showError ? 'error' : undefined })), fieldType === 'TIME_ONLY' && (_jsx(TimeInput, { value: rhs.value === '' ? undefined : rhs.value, withSeconds: true, onChange: handleDateValueChange, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_time') : '', label: t('condition_builder_value_label') })), fieldType === 'DATE_ONLY' && (_jsx(DateInput, { value: rhs.value, onChange: handleDateValueChange, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_date') : '', label: t('condition_builder_value_label') })), fieldType === 'DATE_TIME' && (_jsx(DateTimeInput, { value: rhs.value !== '' ? rhs.value : undefined, onChange: handleDateValueChange, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_date') : '', label: t('condition_builder_value_label') }))] })), (fieldType === 'DATE_ONLY' || fieldType === 'DATE_TIME') &&
336
- (hasProp(rhs, 'relativeDate') || hasProp(rhs, 'dateFunction')) && (_jsx(Flex, { item: { grow: 1 }, children: _jsx(TimePeriodComp, { rhs: rhs, fieldType: fieldType, onChange: onChange, dateFunctionsList: dateFunctions ? dateFunctions[fieldType] : [], status: showError ? 'error' : undefined }) })), hasProp(rhs, 'values') && (_jsxs(Flex, { item: { grow: 1 }, children: [useValueSelector && (_jsx(ValueSelector, { parameters: parameters, mode: 'multi-select', values: rhs.values.map(String), selectedField: matchingField, comparator: comparator, rhs: rhs, onChange: handleValueSelection, status: showError || apiError ? 'error' : undefined, info: showError ? t('condition_builder_no_selection') : apiError, setApiError: setApiError, label: t('condition_builder_value_label'), placeholder: t('condition_builder_multi_selection_placeholder') })), !useValueSelector && (_jsx(Input, { value: csvInput, onChange: handleCSVChange, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_values') : undefined, label: t('condition_builder_value_label'), placeholder: t('condition_builder_enter_csv_placeholder') }))] })), hasProp(rhs, 'start') && (_jsxs(Flex, { item: { grow: 1 }, children: [(fieldType === 'DECIMAL' || fieldType === 'INTEGER') && (_jsx(NumberRangeInput, { value: { start: rhs.start.toString(), end: rhs.end.toString() }, onChange: handleNumberRangeValueChange, status: showError ? 'error' : undefined, label: t('condition_builder_value_label'), info: showError ? t('condition_builder_invalid_number_range') : undefined, handle: handle, numberOfDecimals: fieldType === 'INTEGER' ? 0 : undefined })), fieldType === 'DATE_ONLY' && (_jsx(DateRangeInput, { value: { start: rhs.start, end: rhs.end }, onChange: handleDateRangeValueChange, label: t('condition_builder_value_label'), status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_date_range') : '' })), fieldType === 'TIME_ONLY' && (_jsx(TimeRangeInput, { mode: 'time', value: {
327
+ }, children: [_jsx(RhsModeSwitch, { parameters: parameters, fieldType: fieldType, comparator: comparator, rhs: rhs, onChange: onChange, mode: itemDirection === 'column' ? 'combo-box' : 'menu-button', validRhsTypes: validRhsTypes, dateFunctions: dateFunctions }), hasProp(rhs, 'field') && (_jsx(Flex, { item: { grow: 1 }, children: _jsx(FieldSelector, { value: rhs.field, onChange: handleFieldChange, fields: fieldOptions, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_no_selection') : undefined, label: t('condition_builder_compare_with_another_field') }) })), hasProp(rhs, 'parameterId') && (_jsxs(Flex, { item: { grow: 1 }, children: [parameters.length === 1 && (_jsx(Input, { value: parameters[0].primary.toString(), status: showError ? 'error' : undefined, info: showError ? t('condition_builder_empty_value_text') : undefined, name: 'rhs-text-parameter-input', label: t('condition_builder_value_label'), readOnly: true })), parameters.length > 1 && (_jsx(ValueSelector, { parameters: parameters, mode: 'single-select', values: rhs.parameterId.toString(), selectedField: matchingField, rhs: rhs, comparator: comparator, onChange: handleValueSelection, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_empty_selection_error_text') : undefined, label: t('condition_builder_value_label'), placeholder: t('condition_builder_single_selection_placeholder') }))] })), hasProp(rhs, 'value') && !hasProp(rhs, 'dateFunction') && (_jsxs(Flex, { item: { grow: 1 }, children: [fieldType === 'TEXT' && useValueSelector && (_jsx(ValueSelector, { parameters: parameters, mode: 'single-select', values: rhs.value.toString(), selectedField: matchingField, comparator: comparator, rhs: rhs, onChange: handleValueSelection, status: showError || apiError ? 'error' : undefined, info: showError ? t('condition_builder_no_selection') : apiError, setApiError: setApiError, label: t('condition_builder_value_label'), placeholder: t('condition_builder_single_selection_placeholder') })), fieldType === 'TEXT' && !useValueSelector && (_jsx(Input, { value: rhs.value.toString(), onChange: handleValueChange, status: showError ? 'error' : undefined, info: showError ? t('empty_value') : undefined, name: 'rhs-text-literal-input', label: t('condition_builder_value_label') })), (fieldType === 'DECIMAL' || fieldType === 'INTEGER') && (_jsx(NumericInput, { rhs: rhs, onChange: onChange, allowDecimal: fieldType !== 'INTEGER', status: showError ? 'error' : undefined, unit: fieldUnit })), fieldType === 'TIME_ONLY' && (_jsx(TimeInput, { value: rhs.value === '' ? undefined : rhs.value, withSeconds: true, onChange: handleDateValueChange, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_time') : '', label: t('condition_builder_value_label') })), fieldType === 'DATE_ONLY' && (_jsx(DateInput, { value: rhs.value, onChange: handleDateValueChange, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_date') : '', label: t('condition_builder_value_label'), timeZone: timeZone })), fieldType === 'DATE_TIME' && (_jsx(DateTimeInput, { value: rhs.value !== '' ? rhs.value : undefined, onChange: handleDateValueChange, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_date') : '', label: t('condition_builder_value_label'), timeZone: timeZone }))] })), (fieldType === 'DATE_ONLY' || fieldType === 'DATE_TIME') &&
328
+ (hasProp(rhs, 'relativeDate') || hasProp(rhs, 'dateFunction')) && (_jsx(Flex, { item: { grow: 1 }, children: _jsx(TimePeriodComp, { rhs: rhs, fieldType: fieldType, onChange: onChange, dateFunctionsList: dateFunctions ? dateFunctions[fieldType] : [], status: showError ? 'error' : undefined }) })), hasProp(rhs, 'values') && (_jsxs(Flex, { item: { grow: 1 }, children: [useValueSelector && (_jsx(ValueSelector, { parameters: parameters, mode: 'multi-select', values: rhs.values.map(String), selectedField: matchingField, comparator: comparator, rhs: rhs, onChange: handleValueSelection, status: showError || apiError ? 'error' : undefined, info: showError ? t('condition_builder_no_selection') : apiError, setApiError: setApiError, label: t('condition_builder_value_label'), placeholder: t('condition_builder_multi_selection_placeholder') })), !useValueSelector && (_jsx(CSVInput, { rhs: rhs, field: matchingField, onChange: onChange, status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_values') : undefined, label: t('condition_builder_value_label'), placeholder: t('condition_builder_enter_csv_placeholder') }))] })), hasProp(rhs, 'start') && (_jsxs(Flex, { item: { grow: 1 }, children: [(fieldType === 'DECIMAL' || fieldType === 'INTEGER') && (_jsx(NumericRangeInput, { label: t('condition_builder_value_label'), rhs: { start: rhs.start.toString(), end: rhs.end.toString() }, onChange: handleNumberRangeValueChange, status: showError ? 'error' : undefined, allowDecimal: fieldType !== 'INTEGER', unit: fieldUnit })), fieldType === 'DATE_ONLY' && (_jsx(DateRangeInput, { value: { start: rhs.start, end: rhs.end }, onChange: handleDateRangeValueChange, label: t('condition_builder_value_label'), status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_date_range') : '', timeZone: timeZone })), fieldType === 'TIME_ONLY' && (_jsx(TimeRangeInput, { mode: 'time', value: {
337
329
  start: rhs.start === '' ? undefined : rhs.start,
338
330
  end: rhs.end === '' ? undefined : rhs.end
339
- }, withSeconds: true, onChange: handleDateRangeValueChange, label: t('condition_builder_value_label'), status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_time_range') : '' })), fieldType === 'DATE_TIME' && (_jsx(TimeRangeInput, { mode: 'datetime', value: { start: rhs.start, end: rhs.end }, onChange: handleDateRangeValueChange, label: t('condition_builder_value_label'), status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_date_range') : '' }))] }))] }));
331
+ }, withSeconds: true, onChange: handleDateRangeValueChange, label: t('condition_builder_value_label'), status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_time_range') : '' })), fieldType === 'DATE_TIME' && (_jsx(TimeRangeInput, { mode: 'datetime', value: { start: rhs.start, end: rhs.end }, onChange: handleDateRangeValueChange, label: t('condition_builder_value_label'), status: showError ? 'error' : undefined, info: showError ? t('condition_builder_invalid_date_range') : '', timeZone: timeZone }))] }))] }));
340
332
  };
341
333
  export default RhsControls;
342
334
  //# sourceMappingURL=index.js.map