@pega/cosmos-react-condition-builder 4.1.1 → 5.0.0-dev.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/lib/components/ConditionBuilder/AtomicCondition.d.ts +4 -4
  2. package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
  3. package/lib/components/ConditionBuilder/AtomicCondition.js +4 -1
  4. package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
  5. package/lib/components/ConditionBuilder/ConditionBuilder.d.ts +3 -3
  6. package/lib/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
  7. package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
  8. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js.map +1 -1
  9. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +2 -2
  10. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
  11. package/lib/components/ConditionBuilder/ConditionBuilder.types.js.map +1 -1
  12. package/lib/components/ConditionBuilder/FieldCondition.d.ts +3 -3
  13. package/lib/components/ConditionBuilder/FieldCondition.d.ts.map +1 -1
  14. package/lib/components/ConditionBuilder/FieldCondition.js.map +1 -1
  15. package/lib/components/ConditionBuilder/FieldCondition.types.d.ts +4 -4
  16. package/lib/components/ConditionBuilder/FieldCondition.types.d.ts.map +1 -1
  17. package/lib/components/ConditionBuilder/FieldCondition.types.js.map +1 -1
  18. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.d.ts +4 -4
  19. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.d.ts.map +1 -1
  20. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.js +49 -8
  21. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.js.map +1 -1
  22. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.d.ts +3 -3
  23. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.d.ts.map +1 -1
  24. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js.map +1 -1
  25. package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts +2 -2
  26. package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts.map +1 -1
  27. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js.map +1 -1
  28. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.d.ts +4 -4
  29. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.d.ts.map +1 -1
  30. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.js.map +1 -1
  31. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.d.ts +4 -4
  32. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.d.ts.map +1 -1
  33. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js +8 -16
  34. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js.map +1 -1
  35. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.d.ts +3 -3
  36. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.d.ts.map +1 -1
  37. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js.map +1 -1
  38. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.d.ts +4 -4
  39. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.d.ts.map +1 -1
  40. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.js.map +1 -1
  41. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts +4 -4
  42. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts.map +1 -1
  43. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js +1 -1
  44. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js.map +1 -1
  45. package/lib/components/ConditionBuilder/RhsControls/index.d.ts +4 -4
  46. package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
  47. package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
  48. package/lib/components/ConditionBuilder/core/comparators.d.ts +1 -1
  49. package/lib/components/ConditionBuilder/core/comparators.d.ts.map +1 -1
  50. package/lib/components/ConditionBuilder/core/comparators.js +4 -4
  51. package/lib/components/ConditionBuilder/core/comparators.js.map +1 -1
  52. package/lib/components/ConditionBuilder/core/evaluator.d.ts +7 -4
  53. package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
  54. package/lib/components/ConditionBuilder/core/evaluator.js +61 -17
  55. package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
  56. package/lib/components/ConditionBuilder/core/formatter.d.ts +4 -4
  57. package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
  58. package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
  59. package/lib/components/ConditionBuilder/core/rows-reducer.d.ts +1 -1
  60. package/lib/components/ConditionBuilder/core/rows-reducer.d.ts.map +1 -1
  61. package/lib/components/ConditionBuilder/core/rows-reducer.js.map +1 -1
  62. package/lib/components/ConditionBuilder/core/transformer.d.ts +1 -1
  63. package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -1
  64. package/lib/components/ConditionBuilder/core/transformer.js +3 -2
  65. package/lib/components/ConditionBuilder/core/transformer.js.map +1 -1
  66. package/lib/components/ConditionBuilder/core/utils.d.ts +1 -1
  67. package/lib/components/ConditionBuilder/core/utils.d.ts.map +1 -1
  68. package/lib/components/ConditionBuilder/core/utils.js.map +1 -1
  69. package/lib/components/ConditionInput/ConditionInput.d.ts +2 -2
  70. package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -1
  71. package/lib/components/ConditionInput/ConditionInput.js.map +1 -1
  72. package/lib/components/ConditionInput/ConditionInput.styles.d.ts +1 -1
  73. package/lib/components/ConditionInput/ConditionInput.styles.d.ts.map +1 -1
  74. package/lib/components/ConditionInput/ConditionInput.styles.js.map +1 -1
  75. package/lib/components/ConditionInput/ConditionInput.types.d.ts +2 -2
  76. package/lib/components/ConditionInput/ConditionInput.types.d.ts.map +1 -1
  77. package/lib/components/ConditionInput/ConditionInput.types.js.map +1 -1
  78. package/lib/components/ConditionInput/utils.d.ts +1 -1
  79. package/lib/components/ConditionInput/utils.d.ts.map +1 -1
  80. package/lib/components/ConditionInput/utils.js.map +1 -1
  81. package/lib/components/PromotedFilters/ConditionSelector.d.ts +4 -4
  82. package/lib/components/PromotedFilters/ConditionSelector.d.ts.map +1 -1
  83. package/lib/components/PromotedFilters/ConditionSelector.js.map +1 -1
  84. package/lib/components/PromotedFilters/PromotedFilters.d.ts +4 -4
  85. package/lib/components/PromotedFilters/PromotedFilters.d.ts.map +1 -1
  86. package/lib/components/PromotedFilters/PromotedFilters.js.map +1 -1
  87. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts +2 -2
  88. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts.map +1 -1
  89. package/lib/components/PromotedFilters/PromotedFilters.types.js.map +1 -1
  90. package/package.json +11 -18
@@ -1 +1 @@
1
- {"version":3,"file":"ValueSelector.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/ValueSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useState,\n useEffect,\n useRef,\n Dispatch,\n SetStateAction,\n useCallback,\n Ref,\n useImperativeHandle\n} from 'react';\n\nimport {\n useI18n,\n BaseProps,\n ComboBox,\n createStringMatcher,\n useAfterInitialEffect,\n NoChildrenProp,\n ComboBoxProps,\n hasProp,\n Button,\n Icon,\n MenuProps,\n HandleValue\n} from '@pega/cosmos-react-core';\n\nimport {\n LeafCondition,\n ParameterValue,\n ReferenceValue,\n ValueSelection\n} from '../ConditionBuilder.types';\nimport { Comparator } from '../core/types';\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 /** 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 apppears below the input. */\n info?: ComboBoxProps['info'];\n /** sets status and info */\n setApiError?: Dispatch<SetStateAction<string | null>>;\n /** Imperative handle */\n handle?: Ref<HandleValue>;\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 handle\n}: ValueSelectorProps<F>) => {\n const t = useI18n();\n\n const inputRef = useRef<HTMLDivElement>(null);\n\n const [selections, setSelections] = useState<string[] | string>(values);\n const [filterValue, setFilterValue] = useState('');\n const [options, setOptions] = useState<(string | ParameterValue | ReferenceValue)[]>([]);\n const [filterOptions, setFilterOptions] = useState<(string | ParameterValue | ReferenceValue)[]>(\n []\n );\n const [loading, setLoading] = useState(false);\n const [hasMore, setHasMore] = useState(true);\n const [items, setItems] = useState<MenuProps['items']>([]);\n\n const itemsToRender = (item: (string | ParameterValue | ReferenceValue)[]) => {\n return item.map(option => {\n if (typeof option === 'object') {\n return {\n ...option,\n selected: Array.isArray(selections)\n ? selections.includes(option.id)\n : selections === option.id\n };\n }\n return {\n id: option,\n primary: option,\n selected: Array.isArray(selections) ? selections.includes(option) : selections === option\n };\n });\n };\n\n useEffect(() => {\n const updatedItems = items.map(item => {\n const result = Array.isArray(selections)\n ? selections.includes(item.id)\n : selections === item.id;\n return { ...item, selected: result };\n });\n setItems(updatedItems);\n }, [selections]);\n\n useEffect(() => {\n const matcher = createStringMatcher(filterValue);\n setFilterOptions(\n options.filter(option => {\n if (typeof option === 'object') return matcher.test(option.primary);\n return matcher.test(option);\n })\n );\n }, [filterValue, options]);\n\n useAfterInitialEffect(() => {\n onChange(selections);\n }, [selections]);\n\n useEffect(() => {\n if (!selectedField) {\n return;\n }\n let subscribed = true;\n\n if (hasProp(rhs, 'parameterId')) {\n setOptions(parameters);\n } else if (hasProp(selectedField, 'possibleValues')) {\n const { possibleValues } = selectedField;\n if (typeof possibleValues === 'function') {\n setLoading(true);\n setOptions([]);\n possibleValues({ searchString: filterValue, comparator, lhs: selectedField })\n .then(response => {\n if (!subscribed) return;\n setOptions(response);\n setLoading(false);\n })\n .catch(err => {\n if (err && subscribed) {\n setApiError?.(t('condition_builder_possible_values_error'));\n setOptions([]);\n setLoading(false);\n }\n });\n } else if (Array.isArray(possibleValues)) {\n setOptions(possibleValues);\n } else {\n setOptions([]);\n }\n }\n\n return () => {\n subscribed = false;\n setApiError?.(null);\n };\n }, [filterValue, selectedField.id, comparator]);\n\n useEffect(() => setFilterValue(''), [selectedField, comparator]);\n\n const getSelections = () => {\n if (typeof selections === 'string') {\n let itemLabel;\n if (hasProp(rhs, 'parameterId')) {\n const selectedItem = parameters.find(item => item.id === selections);\n itemLabel = selectedItem !== undefined ? selectedItem.primary : selections;\n } else itemLabel = selections;\n\n return {\n items: { id: selections, text: itemLabel }\n };\n }\n if (selections.length > 0) {\n return {\n items: selections.map(s => {\n const optionLabel = options.find(opt => typeof opt === 'object' && opt.id === s) as\n | ParameterValue\n | ReferenceValue\n | undefined;\n return { id: s, text: optionLabel?.primary ?? s };\n }),\n onRemove: (value: string) => {\n setSelections(cur => {\n const current = cur as string[];\n return current.filter(selection => selection !== value);\n });\n }\n };\n }\n\n return undefined;\n };\n\n useEffect(() => {\n if (filterValue !== '') {\n setItems(itemsToRender(filterOptions.slice(0, 10)));\n } else {\n setItems(itemsToRender(options.slice(0, 10)));\n }\n }, [options, filterOptions]);\n\n const loadMore = useCallback(() => {\n if (!loading) {\n setLoading(true);\n\n let totalItem: (string | ParameterValue | ReferenceValue)[];\n if (filterOptions.length > 0) totalItem = filterOptions;\n else totalItem = options;\n\n const remItems = totalItem.length - items.length;\n let newItemsLength = 10;\n if (remItems <= newItemsLength) {\n setHasMore(false);\n newItemsLength = remItems;\n }\n\n setLoading(false);\n setItems(prev => {\n return [\n ...prev,\n ...itemsToRender(totalItem.slice(items.length, items.length + newItemsLength))\n ];\n });\n }\n }, [options, loading, filterOptions, items, hasMore]);\n\n useImperativeHandle(\n handle,\n () => ({\n clear: () => {\n setSelections([]);\n }\n }),\n []\n );\n\n return (\n <ComboBox\n ref={inputRef}\n mode={mode}\n label={label ?? t('condition_builder_possible_values_label')}\n placeholder={\n placeholder ??\n (mode === 'single-select'\n ? t('condition_builder_single_selection_text_default')\n : t('condition_builder_multi_selection_text_default'))\n }\n value={filterValue}\n onChange={e => {\n setFilterValue(e.target.value);\n setHasMore(true);\n }}\n onBlur={() => {\n onBlur?.(selections);\n setFilterValue('');\n }}\n menu={{\n items,\n onItemClick: id => {\n setFilterValue('');\n if (mode === 'single-select') {\n setSelections(id);\n } else {\n setSelections(cur => {\n const current = cur as string[];\n return current.includes(id)\n ? current.filter(selection => selection !== id)\n : [...cur, id];\n });\n }\n },\n loading,\n loadMore: hasMore ? loadMore : undefined\n }}\n selected={getSelections()}\n status={status}\n info={info}\n actions={\n onClear &&\n selections.length > 0 && (\n <Button\n icon\n variant='simple'\n label={t('clear')}\n onClick={() => {\n setSelections([]);\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 ValueSelector;\n"]}
1
+ {"version":3,"file":"ValueSelector.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/ValueSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useRef, useCallback, useImperativeHandle } from 'react';\nimport type { Dispatch, SetStateAction, Ref } from 'react';\n\nimport {\n useI18n,\n ComboBox,\n createStringMatcher,\n useAfterInitialEffect,\n hasProp,\n Button,\n Icon\n} from '@pega/cosmos-react-core';\nimport type {\n BaseProps,\n NoChildrenProp,\n ComboBoxProps,\n MenuProps,\n HandleValue\n} from '@pega/cosmos-react-core';\n\nimport type {\n LeafCondition,\n ParameterValue,\n ReferenceValue,\n ValueSelection\n} from '../ConditionBuilder.types';\nimport type { Comparator } from '../core/types';\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 /** 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 apppears below the input. */\n info?: ComboBoxProps['info'];\n /** sets status and info */\n setApiError?: Dispatch<SetStateAction<string | null>>;\n /** Imperative handle */\n handle?: Ref<HandleValue>;\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 handle\n}: ValueSelectorProps<F>) => {\n const t = useI18n();\n\n const inputRef = useRef<HTMLDivElement>(null);\n\n const [selections, setSelections] = useState<string[] | string>(values);\n const [filterValue, setFilterValue] = useState('');\n const [options, setOptions] = useState<(string | ParameterValue | ReferenceValue)[]>([]);\n const [filterOptions, setFilterOptions] = useState<(string | ParameterValue | ReferenceValue)[]>(\n []\n );\n const [loading, setLoading] = useState(false);\n const [hasMore, setHasMore] = useState(true);\n const [items, setItems] = useState<MenuProps['items']>([]);\n\n const itemsToRender = (item: (string | ParameterValue | ReferenceValue)[]) => {\n return item.map(option => {\n if (typeof option === 'object') {\n return {\n ...option,\n selected: Array.isArray(selections)\n ? selections.includes(option.id)\n : selections === option.id\n };\n }\n return {\n id: option,\n primary: option,\n selected: Array.isArray(selections) ? selections.includes(option) : selections === option\n };\n });\n };\n\n useEffect(() => {\n const updatedItems = items.map(item => {\n const result = Array.isArray(selections)\n ? selections.includes(item.id)\n : selections === item.id;\n return { ...item, selected: result };\n });\n setItems(updatedItems);\n }, [selections]);\n\n useEffect(() => {\n const matcher = createStringMatcher(filterValue);\n setFilterOptions(\n options.filter(option => {\n if (typeof option === 'object') return matcher.test(option.primary);\n return matcher.test(option);\n })\n );\n }, [filterValue, options]);\n\n useAfterInitialEffect(() => {\n onChange(selections);\n }, [selections]);\n\n useEffect(() => {\n if (!selectedField) {\n return;\n }\n let subscribed = true;\n\n if (hasProp(rhs, 'parameterId')) {\n setOptions(parameters);\n } else if (hasProp(selectedField, 'possibleValues')) {\n const { possibleValues } = selectedField;\n if (typeof possibleValues === 'function') {\n setLoading(true);\n setOptions([]);\n possibleValues({ searchString: filterValue, comparator, lhs: selectedField })\n .then(response => {\n if (!subscribed) return;\n setOptions(response);\n setLoading(false);\n })\n .catch(err => {\n if (err && subscribed) {\n setApiError?.(t('condition_builder_possible_values_error'));\n setOptions([]);\n setLoading(false);\n }\n });\n } else if (Array.isArray(possibleValues)) {\n setOptions(possibleValues);\n } else {\n setOptions([]);\n }\n }\n\n return () => {\n subscribed = false;\n setApiError?.(null);\n };\n }, [filterValue, selectedField.id, comparator]);\n\n useEffect(() => setFilterValue(''), [selectedField, comparator]);\n\n const getSelections = () => {\n if (typeof selections === 'string') {\n let itemLabel;\n if (hasProp(rhs, 'parameterId')) {\n const selectedItem = parameters.find(item => item.id === selections);\n itemLabel = selectedItem !== undefined ? selectedItem.primary : selections;\n } else itemLabel = selections;\n\n return {\n items: { id: selections, text: itemLabel }\n };\n }\n if (selections.length > 0) {\n return {\n items: selections.map(s => {\n const optionLabel = options.find(opt => typeof opt === 'object' && opt.id === s) as\n | ParameterValue\n | ReferenceValue\n | undefined;\n return { id: s, text: optionLabel?.primary ?? s };\n }),\n onRemove: (value: string) => {\n setSelections(cur => {\n const current = cur as string[];\n return current.filter(selection => selection !== value);\n });\n }\n };\n }\n\n return undefined;\n };\n\n useEffect(() => {\n if (filterValue !== '') {\n setItems(itemsToRender(filterOptions.slice(0, 10)));\n } else {\n setItems(itemsToRender(options.slice(0, 10)));\n }\n }, [options, filterOptions]);\n\n const loadMore = useCallback(() => {\n if (!loading) {\n setLoading(true);\n\n let totalItem: (string | ParameterValue | ReferenceValue)[];\n if (filterOptions.length > 0) totalItem = filterOptions;\n else totalItem = options;\n\n const remItems = totalItem.length - items.length;\n let newItemsLength = 10;\n if (remItems <= newItemsLength) {\n setHasMore(false);\n newItemsLength = remItems;\n }\n\n setLoading(false);\n setItems(prev => {\n return [\n ...prev,\n ...itemsToRender(totalItem.slice(items.length, items.length + newItemsLength))\n ];\n });\n }\n }, [options, loading, filterOptions, items, hasMore]);\n\n useImperativeHandle(\n handle,\n () => ({\n clear: () => {\n setSelections([]);\n }\n }),\n []\n );\n\n return (\n <ComboBox\n ref={inputRef}\n mode={mode}\n label={label ?? t('condition_builder_possible_values_label')}\n placeholder={\n placeholder ??\n (mode === 'single-select'\n ? t('condition_builder_single_selection_text_default')\n : t('condition_builder_multi_selection_text_default'))\n }\n value={filterValue}\n onChange={e => {\n setFilterValue(e.target.value);\n setHasMore(true);\n }}\n onBlur={() => {\n onBlur?.(selections);\n setFilterValue('');\n }}\n menu={{\n items,\n onItemClick: id => {\n if (mode === 'single-select') {\n setFilterValue('');\n setSelections(id);\n } else {\n setSelections(cur => {\n const current = cur as string[];\n return current.includes(id)\n ? current.filter(selection => selection !== id)\n : [...cur, id];\n });\n }\n },\n loading,\n loadMore: hasMore ? loadMore : undefined\n }}\n selected={getSelections()}\n status={status}\n info={info}\n actions={\n onClear &&\n selections.length > 0 && (\n <Button\n icon\n variant='simple'\n label={t('clear')}\n onClick={() => {\n setSelections([]);\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 ValueSelector;\n"]}
@@ -1,7 +1,7 @@
1
- import { FunctionComponent, Ref } from 'react';
2
- import { BaseProps, ForwardProps, HandleValue } from '@pega/cosmos-react-core';
3
- import { FieldType, Comparator, RHSType } from '../core/types';
4
- import { LeafCondition, Field, DateFunctionsByType } from '../ConditionBuilder.types';
1
+ import type { FunctionComponent, Ref } from 'react';
2
+ import type { BaseProps, ForwardProps, HandleValue } from '@pega/cosmos-react-core';
3
+ import type { FieldType, Comparator, RHSType } from '../core/types';
4
+ import type { LeafCondition, Field, DateFunctionsByType } from '../ConditionBuilder.types';
5
5
  /**
6
6
  * Verifies if the condition has all valid values.
7
7
  * NOTES:
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6C,GAAG,EAAE,MAAM,OAAO,CAAC;AAE1F,OAAO,EAML,SAAS,EACT,YAAY,EAMZ,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAyCtF;;;;;;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,CA4FT;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,CAgalE,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,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,CA4FT;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,CAgalE,CAAC;AACF,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FunctionComponent, ChangeEvent, useState, useEffect, useMemo, Ref } from 'react';\n\nimport {\n DateInput,\n DateTimeInput,\n Flex,\n Input,\n hasProp,\n BaseProps,\n ForwardProps,\n TimeInput,\n useI18n,\n DateRangeInput,\n TimeRangeInput,\n NumberRangeInput,\n HandleValue\n} from '@pega/cosmos-react-core';\nimport type {\n DateTimeCallbackParameter,\n DateRangeCallbackParameter\n} from '@pega/cosmos-react-core/lib/components/DateTime/DateTime.types';\n\nimport { FieldType, Comparator, RHSType } from '../core/types';\nimport { LeafCondition, Field, DateFunctionsByType } from '../ConditionBuilder.types';\nimport { convertTimeValueToMs, convertMsToTimeValue } from '../core/time-utils';\nimport { getItem } from '../core/utils';\n\nimport ValueSelector from './ValueSelector';\nimport FieldSelector from './FieldSelector';\nimport RhsModeSwitch from './RhsModeSwitch';\nimport TimePeriodInput from './TimePeriodInput';\nimport TimePeriodMenu from './TimePeriodMenu';\nimport NumericInput from './NumericInput';\n\nfunction isValidLiteralValue(\n value: string | number,\n fieldType?: FieldType,\n trimValues: boolean = false\n): boolean {\n // Identify any invalid numbers (e.g. when `-` is entered)\n if (typeof value === 'number') {\n return !Number.isNaN(value);\n }\n\n // NOTE: Not trimming the value in the change-handler so that users can freely type spaces between words\n if (trimValues) {\n value = value.trim();\n }\n\n // Can be empty on init and on clearing the value\n if (value.trim() === '') {\n return false;\n }\n\n // This check is needed to eliminate invalid dates like `Feb 31` (02/31/2020), which the input allows\n // eslint-disable-next-line sonarjs/prefer-single-boolean-return\n if (\n (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY') &&\n Number.isNaN(new Date(value).getTime())\n ) {\n return false;\n }\n return true;\n}\n/**\n * Verifies if the condition has all valid values.\n * NOTES:\n * - This is intended to be used only on conditions emitted by the components in this package.\n * - If a condition is manually constructed outside these components, this utility could miss some malformed conditions.\n * - Also, this does not try to validate if the given `rhs` matches the `lhs`/`comparator`/`validRhsTypes`. Instead, it assumes that the appropriate LHS/Comparator/validRhsTypes must have been already in place for this rhs to be generated.\n */\nexport function isValidRhs(\n rhs: LeafCondition['rhs'],\n lhs: LeafCondition['lhs'],\n fields: Field[],\n fieldType?: FieldType,\n trimValues: boolean = false\n): boolean {\n // Find the field corresponding to the LHS\n const matchingField = getItem(fields, lhs.field);\n\n if (matchingField === undefined || !hasProp(matchingField, 'type')) {\n // Check if the RHS has no defined values to select\n return false;\n }\n\n // A ValueSelector in single/multiple mode is possible when these criteria are met\n const isValueSelectorPossible =\n fieldType === 'TEXT' && matchingField.possibleValues !== undefined;\n\n // RHS would be `undefined` when no RHS is needed. Treat it as a valid value\n if (rhs === undefined) {\n return true;\n }\n\n // Field-selector on the RHS\n if (hasProp(rhs, 'field')) {\n // RHS is invalid if no field is selected\n return rhs.field !== '';\n }\n\n // rhs of Parameter type\n if (hasProp(rhs, 'parameterId')) {\n // RHS is invalid if no id is returned\n return !!rhs.parameterId;\n }\n\n // List-input cases\n if (hasProp(rhs, 'values')) {\n // RHS is invalid if the list is empty\n if (rhs.values.length === 0) {\n return false;\n }\n // For numeric fields, RHS is invalid if any NaN values are present in the list\n if (fieldType === 'NUMBER' && (rhs.values as number[]).some(v => Number.isNaN(v))) {\n return false;\n }\n }\n\n if (hasProp(rhs, 'value')) {\n // Identify any invalid numbers (e.g. when `-` is entered)\n if (typeof rhs.value === 'number') {\n return !Number.isNaN(rhs.value);\n }\n\n // NOTE: Not trimming the value in the change-handler so that users can freely type spaces between words\n if (trimValues && !isValueSelectorPossible) {\n rhs.value = rhs.value.trim();\n }\n\n // Can be empty on init and on clearing the value\n if (rhs.value.trim() === '') {\n return false;\n }\n\n // This check is needed to eliminate invalid dates like `Feb 31` (02/31/2020), which the input allows\n if (\n (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY') &&\n Number.isNaN(new Date(rhs.value).getTime())\n ) {\n return false;\n }\n }\n\n if (\n hasProp(rhs, 'relativeDate') &&\n ((rhs.relativeDate.timePeriod === 'CURRENT' && rhs.relativeDate.interval) ||\n (rhs.relativeDate.timePeriod !== 'CURRENT' &&\n (!rhs.relativeDate.interval || rhs.relativeDate.interval <= 0)))\n ) {\n return false;\n }\n\n if (hasProp(rhs, 'start')) {\n if (\n !isValidLiteralValue(rhs.start, fieldType, trimValues) ||\n !isValidLiteralValue(rhs.end, fieldType, trimValues)\n ) {\n return false;\n }\n if (typeof rhs.start === 'number' && typeof rhs.end === 'number') {\n return rhs.start < rhs.end;\n }\n const startDate = new Date(rhs.start);\n const endDate = new Date(rhs.end);\n return !Number.isNaN(startDate) && !Number.isNaN(endDate) && startDate < endDate;\n }\n\n return true;\n}\n\n/** For a condition with the given comparator and lhs-field-type, determines an appropriate default value for the Rhs */\nexport function getDefaultRhs(\n fieldType: FieldType,\n comparator: Comparator,\n validRhsTypes: Set<RHSType>,\n dateFunctions?: DateFunctionsByType\n): LeafCondition['rhs'] {\n switch (comparator) {\n case 'IS_TRUE':\n case 'IS_FALSE':\n case 'IS_NULL':\n case 'IS_NOT_NULL':\n return undefined; // These comparators do not have an Rhs\n\n case 'IN':\n case 'NOT_IN':\n return { values: [] };\n\n case 'BTW':\n case 'NOT_BTW':\n return { start: '', end: '' };\n\n default: {\n if (fieldType === 'BOOLEAN' && (comparator === 'EQ' || comparator === 'NEQ')) {\n // For booleans, these comparators can only be used for comparing with other fields\n return { field: '' };\n }\n\n if (validRhsTypes.has('LITERAL')) return { value: '' };\n\n if (validRhsTypes.has('PARAMETER')) return { parameterId: '' };\n\n if (\n validRhsTypes.has('DATE_FUNCTION') &&\n dateFunctions &&\n (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY')\n )\n return { value: '', dateFunction: dateFunctions[fieldType][0] };\n\n if (\n validRhsTypes.has('RELATIVE_DATE') &&\n (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY')\n ) {\n return {\n relativeDate: {\n timePeriod: 'CURRENT',\n datePart: 'DAYS'\n }\n };\n }\n\n return { field: '' };\n }\n }\n}\n\n// Truncates output values from DateInput/DateTimeInput to return a wall time on the RHS\n// NOTE: This assumes that the input date is set up on the UTC timezone\nexport function truncateISODateString(dateString: string, fieldType: FieldType): string {\n const date = new Date(dateString);\n const YYYY = date.getUTCFullYear().toString().padStart(4, '0');\n const MM = (date.getUTCMonth() + 1).toString().padStart(2, '0');\n const DD = date.getUTCDate().toString().padStart(2, '0');\n\n // For DATE_ONLY fields, returning a YYYY-MM-DD format as per spec\n if (fieldType === 'DATE_ONLY') return `${YYYY}-${MM}-${DD}`;\n\n const hh = date.getUTCHours().toString().padStart(2, '0');\n const mm = date.getUTCMinutes().toString().padStart(2, '0');\n const ss = date.getUTCSeconds().toString().padStart(2, '0');\n\n if (fieldType === 'TIME_ONLY') return `${hh}:${mm}:${ss}`;\n\n // cspell:disable-next-line\n // 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\n return `${YYYY}-${MM}-${DD}T${hh}:${mm}`;\n}\n\n/** Type definition for the input props of RhsControls */\ninterface RhsControlProps extends BaseProps {\n /** Lhs for the condition */\n lhs: LeafCondition['lhs'];\n\n /** Comparator for the condition */\n comparator: Comparator;\n\n /** Rhs for the condition */\n rhs: LeafCondition['rhs'];\n\n /** Metadata (data-model) for the Fields to use in the RHS field-selector */\n fields: Field[];\n\n /** Callback for any modifications to the Rhs */\n onChange: (rhs: LeafCondition['rhs'], status?: 'error') => void;\n\n /** Used to enable inline error indicators on invalid inputs */\n indicateErrors: boolean;\n\n /** Item flow direction */\n itemDirection: 'row' | 'column';\n\n /** Restricts RHS values to only specified RHS types */\n validRhsTypes: Set<RHSType>;\n\n /** Passed to enable additional date controls on the RHS, when a DATE_TIME/DATE_ONLY field is selected on the LHS */\n dateFunctions?: DateFunctionsByType;\n\n /** Imperative handle */\n handle?: Ref<HandleValue>;\n}\n\n/** A controlled component for controls on a Condition's RHS */\nconst RhsControls: FunctionComponent<RhsControlProps & ForwardProps> = (props: RhsControlProps) => {\n const {\n lhs,\n comparator,\n rhs,\n fields,\n onChange,\n indicateErrors,\n itemDirection,\n validRhsTypes,\n dateFunctions,\n handle\n } = props;\n\n const t = useI18n();\n\n const [apiError, setApiError] = useState<string | null>(null);\n\n // Find the field corresponding to the LHS\n const matchingField = getItem(fields, lhs.field);\n\n // Options for the Field-selector (if applicable)\n const fieldOptions = useMemo(() => {\n if (!matchingField || !hasProp(matchingField, 'type')) return [];\n // Show all other fields of the same data type as the LHS\n return fields.filter(\n f => hasProp(f, 'type') && f.type === matchingField.type && f.id !== lhs.field\n );\n }, [fields, lhs]);\n\n // Set up a CSV input for IN/NOT_IN comparators\n const [csvInput, setCsvInput] = useState(\n rhs && hasProp(rhs, 'values') ? rhs.values.join(', ') : ''\n );\n\n useEffect(() => {\n // If moving away from the CSV-mode, clear the CSV Input.\n // 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.\n if (csvInput && (!rhs || !hasProp(rhs, 'values'))) {\n setCsvInput('');\n }\n }, [rhs]);\n\n // If a field is not selected or if the comparator doesn't need any RHS, don't render anything\n if (rhs === undefined) {\n return <div />; // Rendering a placeholder div to keep the layout consistent\n }\n\n if (matchingField === undefined || !hasProp(matchingField, 'type')) {\n // For safety against any rare cases where the LHS from an input condition is not present in the input fields to the ConditionBuilder\n // In those cases, don't render an RHS and wait for a valid value to be picked on LHS\n return <div />; // Rendering a placeholder div to keep the layout consistent\n }\n const fieldType = matchingField.type;\n\n const parameters = matchingField.parameters !== undefined ? matchingField.parameters : [];\n\n // If errors should be indicated inline, validate the current rhs\n let showError = false;\n if (indicateErrors) {\n showError = !isValidRhs(rhs, lhs, fields, fieldType, false);\n }\n\n const isValueSelectorPossible =\n fieldType === 'TEXT' &&\n matchingField.possibleValues !== undefined &&\n ['EQ', 'NEQ', 'IN', 'NOT_IN'].includes(comparator); // A ValueSelector in single/multiple mode is possible when these criteria are met\n const useValueSelector = isValueSelectorPossible && !hasProp(rhs, 'field'); // Use the ValueSelector component if it is applicable and if not in ANOTHER_FIELD mode and if RHS is not PARAMETER type\n // Handle changes from the Value-selector\n\n const handleValueSelection = (selection: string | string[]) => {\n if (typeof selection === 'string') {\n if (hasProp(rhs, 'parameterId')) onChange({ parameterId: selection });\n else onChange({ value: selection }); // Submit a new RHS\n } else {\n onChange({ values: selection }); // Submit a new RHS\n }\n };\n\n // Handle changes from the Field-selector\n const handleFieldChange = (id: string) => {\n onChange({ field: id }); // Submit a new RHS\n };\n\n // Handle changes from a Value-input\n const handleValueChange = (e: ChangeEvent<HTMLInputElement>) => {\n // NOTE: Not trimming the value here so that users can freely type spaces between words. Trimming is done on Submit, via the isValidRhs call\n onChange({ value: e.target.value }); // Submit a new RHS\n };\n\n // Handle changes from a DateInput\n const handleDateValueChange = ({ valueAsISOString, state }: DateTimeCallbackParameter) => {\n // NOTE: Not relying fully on `state` since in some cases state and valueAsTimestamp as both undefined\n if (valueAsISOString === undefined) {\n onChange({ value: '' });\n return;\n }\n\n if (state) {\n // sending empty value marked as 'error' to allow clearing condition\n onChange({ value: '' }, 'error');\n return;\n }\n\n const truncatedValue = truncateISODateString(valueAsISOString, fieldType); // Truncate to return a wall time as per spec\n onChange({\n value: fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedValue) : truncatedValue\n });\n };\n\n const handleDateRangeValueChange = ({ start, end }: DateRangeCallbackParameter) => {\n if (start.valueAsTimestamp === undefined && end.valueAsTimestamp === undefined) {\n onChange({ start: '', end: '' });\n return;\n }\n\n if (\n start.valueAsISOString === undefined ||\n end.valueAsISOString === undefined ||\n start.state ||\n end.state\n ) {\n // sending empty value marked as 'error' to allow clearing condition\n onChange({ start: '', end: '' }, 'error');\n return;\n }\n\n const [truncatedStartValue, truncatedEndValue] = [\n truncateISODateString(start.valueAsISOString, fieldType),\n truncateISODateString(end.valueAsISOString, fieldType)\n ];\n\n const onChangeParam = {\n start:\n fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedStartValue) : truncatedStartValue,\n end: fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedEndValue) : truncatedEndValue\n };\n\n if (\n start.valueAsTimestamp &&\n end.valueAsTimestamp &&\n start.valueAsTimestamp > end.valueAsTimestamp\n ) {\n onChange(onChangeParam, 'error');\n return;\n }\n\n onChange(onChangeParam);\n };\n\n const handleNumberRangeValueChange = ({ start, end }: { start: string; end: string }) => {\n const startValue = start.trim();\n const endValue = end.trim();\n\n onChange(\n {\n start: startValue ? Number(start) : '',\n end: endValue ? Number(end) : ''\n },\n // checking one of values is empty, but not both\n ((!startValue || !endValue) && (startValue || endValue)) ||\n (startValue && endValue && startValue > endValue)\n ? 'error'\n : undefined\n );\n };\n\n // Handle changes from a CSV-input\n const handleCSVChange = (e: ChangeEvent<HTMLInputElement>) => {\n // Update the controlled input\n setCsvInput(e.target.value);\n\n // Submit a new RHS\n let newValues: string[] | number[] = e.target.value\n .split(',')\n .map(v => v.trim())\n .filter(v => v.length > 0); // Ignore empty strings\n if (fieldType === 'NUMBER') {\n 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\n }\n onChange({ values: newValues });\n };\n\n // Render the menu directly if in a vertical layout\n const TimePeriodComp = itemDirection === 'column' ? TimePeriodMenu : TimePeriodInput;\n const alignItems = showError ? 'center' : 'end';\n return (\n <Flex\n container={{\n direction: itemDirection,\n alignItems: itemDirection === 'column' ? 'stretch' : alignItems,\n justify: 'between',\n gap: 0.5\n }}\n >\n {/* Gear MenuButton */}\n <RhsModeSwitch\n parameters={parameters}\n fieldType={fieldType}\n comparator={comparator}\n rhs={rhs}\n onChange={onChange}\n mode={itemDirection === 'column' ? 'combo-box' : 'menu-button'}\n validRhsTypes={validRhsTypes}\n dateFunctions={dateFunctions}\n />\n {/* Field-selector */}\n {hasProp(rhs, 'field') && (\n <Flex item={{ grow: 1 }}>\n <FieldSelector\n value={rhs.field}\n onChange={handleFieldChange}\n fields={fieldOptions}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_no_selection') : undefined}\n label={t('condition_builder_value_label')}\n />\n </Flex>\n )}\n\n {/* Parameter input */}\n {hasProp(rhs, 'parameterId') && (\n <Flex item={{ grow: 1 }}>\n {parameters.length === 1 && (\n <Input\n value={parameters[0].primary.toString()}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_empty_value_text') : undefined}\n name='rhs-text-parameter-input'\n label={t('condition_builder_value_label')}\n readOnly\n />\n )}\n\n {parameters.length > 1 && (\n <ValueSelector\n parameters={parameters}\n mode='single-select'\n values={rhs.parameterId.toString()}\n selectedField={matchingField}\n rhs={rhs}\n comparator={comparator}\n onChange={handleValueSelection}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_empty_selection_error_text') : undefined}\n handle={handle}\n label={t('condition_builder_value_label')}\n />\n )}\n </Flex>\n )}\n\n {/* Value input */}\n {hasProp(rhs, 'value') && !hasProp(rhs, 'dateFunction') && (\n <Flex item={{ grow: 1 }}>\n {fieldType === 'TEXT' && useValueSelector && (\n <ValueSelector\n parameters={parameters}\n mode='single-select'\n values={rhs.value.toString()}\n selectedField={matchingField}\n comparator={comparator}\n rhs={rhs}\n onChange={handleValueSelection}\n status={showError || apiError ? 'error' : undefined}\n info={showError ? t('condition_builder_no_selection') : apiError}\n setApiError={setApiError}\n handle={handle}\n label={t('condition_builder_value_label')}\n />\n )}\n\n {fieldType === 'TEXT' && !useValueSelector && (\n <Input\n value={rhs.value.toString()}\n onChange={handleValueChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('empty_value') : undefined}\n name='rhs-text-literal-input'\n label={t('condition_builder_value_label')}\n />\n )}\n\n {fieldType === 'NUMBER' && (\n <NumericInput rhs={rhs} onChange={onChange} status={showError ? 'error' : undefined} />\n )}\n {fieldType === 'TIME_ONLY' && (\n <TimeInput\n value={rhs.value !== '' ? convertMsToTimeValue(Number(rhs.value)) : undefined}\n withSeconds\n onChange={handleDateValueChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_time') : ''} // NOTE: Using empty quotes to disable the default info which indicates the format\n label={t('condition_builder_value_label')}\n handle={handle}\n />\n )}\n {fieldType === 'DATE_ONLY' && (\n <DateInput\n value={rhs.value}\n onChange={handleDateValueChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_date') : ''}\n label={t('condition_builder_value_label')}\n handle={handle}\n />\n )}\n {fieldType === 'DATE_TIME' && (\n <DateTimeInput\n value={rhs.value !== '' ? rhs.value : undefined}\n onChange={handleDateValueChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_date') : ''}\n label={t('condition_builder_value_label')}\n handle={handle}\n />\n )}\n </Flex>\n )}\n\n {(fieldType === 'DATE_ONLY' || fieldType === 'DATE_TIME') &&\n (hasProp(rhs, 'relativeDate') || hasProp(rhs, 'dateFunction')) && (\n <Flex item={{ grow: 1 }}>\n <TimePeriodComp\n rhs={rhs}\n fieldType={fieldType}\n onChange={onChange}\n dateFunctionsList={dateFunctions ? dateFunctions[fieldType] : []}\n status={showError ? 'error' : undefined}\n />\n </Flex>\n )}\n\n {/* Multiple-values input */}\n {hasProp(rhs, 'values') && (\n <Flex item={{ grow: 1 }}>\n {useValueSelector && (\n <ValueSelector\n parameters={parameters}\n mode='multi-select'\n values={rhs.values.map(String)}\n selectedField={matchingField}\n comparator={comparator}\n rhs={rhs}\n onChange={handleValueSelection}\n status={showError || apiError ? 'error' : undefined}\n info={showError ? t('condition_builder_no_selection') : apiError}\n setApiError={setApiError}\n handle={handle}\n label={t('condition_builder_value_label')}\n />\n )}\n {!useValueSelector && (\n <Input\n value={csvInput}\n onChange={handleCSVChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_values') : undefined}\n label={t('condition_builder_value_label')}\n placeholder={t('condition_builder_enter_csv_placeholder')}\n />\n )}\n </Flex>\n )}\n\n {hasProp(rhs, 'start') && (\n <Flex item={{ grow: 1 }}>\n {fieldType === 'NUMBER' && (\n <NumberRangeInput\n value={{ start: rhs.start.toString(), end: rhs.end.toString() }}\n onChange={handleNumberRangeValueChange}\n status={showError ? 'error' : undefined}\n label={t('condition_builder_value_label')}\n info={showError ? t('condition_builder_invalid_number_range') : undefined}\n handle={handle}\n />\n )}\n\n {fieldType === 'DATE_ONLY' && (\n <DateRangeInput\n value={{ start: rhs.start || undefined, end: rhs.end || undefined }}\n onChange={handleDateRangeValueChange}\n label={t('condition_builder_value_label')}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_date_range') : ''} // NOTE: Using empty quotes to disable the default info which indicates the format\n handle={handle}\n />\n )}\n\n {fieldType === 'TIME_ONLY' && (\n <TimeRangeInput\n mode='time'\n value={{ start: rhs.start || undefined, end: rhs.end || undefined }}\n onChange={handleDateRangeValueChange}\n label={t('condition_builder_value_label')}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_time_range') : ''} // NOTE: Using empty quotes to disable the default info which indicates the format\n handle={handle}\n />\n )}\n\n {fieldType === 'DATE_TIME' && (\n <TimeRangeInput\n mode='datetime'\n value={{ start: rhs.start || undefined, end: rhs.end || undefined }}\n onChange={handleDateRangeValueChange}\n label={t('condition_builder_value_label')}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_date_range') : ''} // NOTE: Using empty quotes to disable the default info which indicates the format\n handle={handle}\n />\n )}\n </Flex>\n )}\n </Flex>\n );\n};\nexport default RhsControls;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport type { FunctionComponent, ChangeEvent, Ref } from 'react';\n\nimport {\n DateInput,\n DateTimeInput,\n Flex,\n Input,\n hasProp,\n TimeInput,\n useI18n,\n DateRangeInput,\n TimeRangeInput,\n NumberRangeInput\n} from '@pega/cosmos-react-core';\nimport type { BaseProps, ForwardProps, HandleValue } from '@pega/cosmos-react-core';\nimport type {\n DateTimeCallbackParameter,\n DateRangeCallbackParameter\n} from '@pega/cosmos-react-core/lib/components/DateTime/DateTime.types';\n\nimport type { FieldType, Comparator, RHSType } from '../core/types';\nimport type { LeafCondition, Field, DateFunctionsByType } from '../ConditionBuilder.types';\nimport { convertTimeValueToMs, convertMsToTimeValue } from '../core/time-utils';\nimport { getItem } from '../core/utils';\n\nimport ValueSelector from './ValueSelector';\nimport FieldSelector from './FieldSelector';\nimport RhsModeSwitch from './RhsModeSwitch';\nimport TimePeriodInput from './TimePeriodInput';\nimport TimePeriodMenu from './TimePeriodMenu';\nimport NumericInput from './NumericInput';\n\nfunction isValidLiteralValue(\n value: string | number,\n fieldType?: FieldType,\n trimValues: boolean = false\n): boolean {\n // Identify any invalid numbers (e.g. when `-` is entered)\n if (typeof value === 'number') {\n return !Number.isNaN(value);\n }\n\n // NOTE: Not trimming the value in the change-handler so that users can freely type spaces between words\n if (trimValues) {\n value = value.trim();\n }\n\n // Can be empty on init and on clearing the value\n if (value.trim() === '') {\n return false;\n }\n\n // This check is needed to eliminate invalid dates like `Feb 31` (02/31/2020), which the input allows\n // eslint-disable-next-line sonarjs/prefer-single-boolean-return\n if (\n (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY') &&\n Number.isNaN(new Date(value).getTime())\n ) {\n return false;\n }\n return true;\n}\n/**\n * Verifies if the condition has all valid values.\n * NOTES:\n * - This is intended to be used only on conditions emitted by the components in this package.\n * - If a condition is manually constructed outside these components, this utility could miss some malformed conditions.\n * - Also, this does not try to validate if the given `rhs` matches the `lhs`/`comparator`/`validRhsTypes`. Instead, it assumes that the appropriate LHS/Comparator/validRhsTypes must have been already in place for this rhs to be generated.\n */\nexport function isValidRhs(\n rhs: LeafCondition['rhs'],\n lhs: LeafCondition['lhs'],\n fields: Field[],\n fieldType?: FieldType,\n trimValues: boolean = false\n): boolean {\n // Find the field corresponding to the LHS\n const matchingField = getItem(fields, lhs.field);\n\n if (matchingField === undefined || !hasProp(matchingField, 'type')) {\n // Check if the RHS has no defined values to select\n return false;\n }\n\n // A ValueSelector in single/multiple mode is possible when these criteria are met\n const isValueSelectorPossible =\n fieldType === 'TEXT' && matchingField.possibleValues !== undefined;\n\n // RHS would be `undefined` when no RHS is needed. Treat it as a valid value\n if (rhs === undefined) {\n return true;\n }\n\n // Field-selector on the RHS\n if (hasProp(rhs, 'field')) {\n // RHS is invalid if no field is selected\n return rhs.field !== '';\n }\n\n // rhs of Parameter type\n if (hasProp(rhs, 'parameterId')) {\n // RHS is invalid if no id is returned\n return !!rhs.parameterId;\n }\n\n // List-input cases\n if (hasProp(rhs, 'values')) {\n // RHS is invalid if the list is empty\n if (rhs.values.length === 0) {\n return false;\n }\n // For numeric fields, RHS is invalid if any NaN values are present in the list\n if (fieldType === 'NUMBER' && (rhs.values as number[]).some(v => Number.isNaN(v))) {\n return false;\n }\n }\n\n if (hasProp(rhs, 'value')) {\n // Identify any invalid numbers (e.g. when `-` is entered)\n if (typeof rhs.value === 'number') {\n return !Number.isNaN(rhs.value);\n }\n\n // NOTE: Not trimming the value in the change-handler so that users can freely type spaces between words\n if (trimValues && !isValueSelectorPossible) {\n rhs.value = rhs.value.trim();\n }\n\n // Can be empty on init and on clearing the value\n if (rhs.value.trim() === '') {\n return false;\n }\n\n // This check is needed to eliminate invalid dates like `Feb 31` (02/31/2020), which the input allows\n if (\n (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY') &&\n Number.isNaN(new Date(rhs.value).getTime())\n ) {\n return false;\n }\n }\n\n if (\n hasProp(rhs, 'relativeDate') &&\n ((rhs.relativeDate.timePeriod === 'CURRENT' && rhs.relativeDate.interval) ||\n (rhs.relativeDate.timePeriod !== 'CURRENT' &&\n (!rhs.relativeDate.interval || rhs.relativeDate.interval <= 0)))\n ) {\n return false;\n }\n\n if (hasProp(rhs, 'start')) {\n if (\n !isValidLiteralValue(rhs.start, fieldType, trimValues) ||\n !isValidLiteralValue(rhs.end, fieldType, trimValues)\n ) {\n return false;\n }\n if (typeof rhs.start === 'number' && typeof rhs.end === 'number') {\n return rhs.start < rhs.end;\n }\n const startDate = new Date(rhs.start);\n const endDate = new Date(rhs.end);\n return !Number.isNaN(startDate) && !Number.isNaN(endDate) && startDate < endDate;\n }\n\n return true;\n}\n\n/** For a condition with the given comparator and lhs-field-type, determines an appropriate default value for the Rhs */\nexport function getDefaultRhs(\n fieldType: FieldType,\n comparator: Comparator,\n validRhsTypes: Set<RHSType>,\n dateFunctions?: DateFunctionsByType\n): LeafCondition['rhs'] {\n switch (comparator) {\n case 'IS_TRUE':\n case 'IS_FALSE':\n case 'IS_NULL':\n case 'IS_NOT_NULL':\n return undefined; // These comparators do not have an Rhs\n\n case 'IN':\n case 'NOT_IN':\n return { values: [] };\n\n case 'BTW':\n case 'NOT_BTW':\n return { start: '', end: '' };\n\n default: {\n if (fieldType === 'BOOLEAN' && (comparator === 'EQ' || comparator === 'NEQ')) {\n // For booleans, these comparators can only be used for comparing with other fields\n return { field: '' };\n }\n\n if (validRhsTypes.has('LITERAL')) return { value: '' };\n\n if (validRhsTypes.has('PARAMETER')) return { parameterId: '' };\n\n if (\n validRhsTypes.has('DATE_FUNCTION') &&\n dateFunctions &&\n (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY')\n )\n return { value: '', dateFunction: dateFunctions[fieldType][0] };\n\n if (\n validRhsTypes.has('RELATIVE_DATE') &&\n (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY')\n ) {\n return {\n relativeDate: {\n timePeriod: 'CURRENT',\n datePart: 'DAYS'\n }\n };\n }\n\n return { field: '' };\n }\n }\n}\n\n// Truncates output values from DateInput/DateTimeInput to return a wall time on the RHS\n// NOTE: This assumes that the input date is set up on the UTC timezone\nexport function truncateISODateString(dateString: string, fieldType: FieldType): string {\n const date = new Date(dateString);\n const YYYY = date.getUTCFullYear().toString().padStart(4, '0');\n const MM = (date.getUTCMonth() + 1).toString().padStart(2, '0');\n const DD = date.getUTCDate().toString().padStart(2, '0');\n\n // For DATE_ONLY fields, returning a YYYY-MM-DD format as per spec\n if (fieldType === 'DATE_ONLY') return `${YYYY}-${MM}-${DD}`;\n\n const hh = date.getUTCHours().toString().padStart(2, '0');\n const mm = date.getUTCMinutes().toString().padStart(2, '0');\n const ss = date.getUTCSeconds().toString().padStart(2, '0');\n\n if (fieldType === 'TIME_ONLY') return `${hh}:${mm}:${ss}`;\n\n // cspell:disable-next-line\n // 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\n return `${YYYY}-${MM}-${DD}T${hh}:${mm}`;\n}\n\n/** Type definition for the input props of RhsControls */\ninterface RhsControlProps extends BaseProps {\n /** Lhs for the condition */\n lhs: LeafCondition['lhs'];\n\n /** Comparator for the condition */\n comparator: Comparator;\n\n /** Rhs for the condition */\n rhs: LeafCondition['rhs'];\n\n /** Metadata (data-model) for the Fields to use in the RHS field-selector */\n fields: Field[];\n\n /** Callback for any modifications to the Rhs */\n onChange: (rhs: LeafCondition['rhs'], status?: 'error') => void;\n\n /** Used to enable inline error indicators on invalid inputs */\n indicateErrors: boolean;\n\n /** Item flow direction */\n itemDirection: 'row' | 'column';\n\n /** Restricts RHS values to only specified RHS types */\n validRhsTypes: Set<RHSType>;\n\n /** Passed to enable additional date controls on the RHS, when a DATE_TIME/DATE_ONLY field is selected on the LHS */\n dateFunctions?: DateFunctionsByType;\n\n /** Imperative handle */\n handle?: Ref<HandleValue>;\n}\n\n/** A controlled component for controls on a Condition's RHS */\nconst RhsControls: FunctionComponent<RhsControlProps & ForwardProps> = (props: RhsControlProps) => {\n const {\n lhs,\n comparator,\n rhs,\n fields,\n onChange,\n indicateErrors,\n itemDirection,\n validRhsTypes,\n dateFunctions,\n handle\n } = props;\n\n const t = useI18n();\n\n const [apiError, setApiError] = useState<string | null>(null);\n\n // Find the field corresponding to the LHS\n const matchingField = getItem(fields, lhs.field);\n\n // Options for the Field-selector (if applicable)\n const fieldOptions = useMemo(() => {\n if (!matchingField || !hasProp(matchingField, 'type')) return [];\n // Show all other fields of the same data type as the LHS\n return fields.filter(\n f => hasProp(f, 'type') && f.type === matchingField.type && f.id !== lhs.field\n );\n }, [fields, lhs]);\n\n // Set up a CSV input for IN/NOT_IN comparators\n const [csvInput, setCsvInput] = useState(\n rhs && hasProp(rhs, 'values') ? rhs.values.join(', ') : ''\n );\n\n useEffect(() => {\n // If moving away from the CSV-mode, clear the CSV Input.\n // 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.\n if (csvInput && (!rhs || !hasProp(rhs, 'values'))) {\n setCsvInput('');\n }\n }, [rhs]);\n\n // If a field is not selected or if the comparator doesn't need any RHS, don't render anything\n if (rhs === undefined) {\n return <div />; // Rendering a placeholder div to keep the layout consistent\n }\n\n if (matchingField === undefined || !hasProp(matchingField, 'type')) {\n // For safety against any rare cases where the LHS from an input condition is not present in the input fields to the ConditionBuilder\n // In those cases, don't render an RHS and wait for a valid value to be picked on LHS\n return <div />; // Rendering a placeholder div to keep the layout consistent\n }\n const fieldType = matchingField.type;\n\n const parameters = matchingField.parameters !== undefined ? matchingField.parameters : [];\n\n // If errors should be indicated inline, validate the current rhs\n let showError = false;\n if (indicateErrors) {\n showError = !isValidRhs(rhs, lhs, fields, fieldType, false);\n }\n\n const isValueSelectorPossible =\n fieldType === 'TEXT' &&\n matchingField.possibleValues !== undefined &&\n ['EQ', 'NEQ', 'IN', 'NOT_IN'].includes(comparator); // A ValueSelector in single/multiple mode is possible when these criteria are met\n const useValueSelector = isValueSelectorPossible && !hasProp(rhs, 'field'); // Use the ValueSelector component if it is applicable and if not in ANOTHER_FIELD mode and if RHS is not PARAMETER type\n // Handle changes from the Value-selector\n\n const handleValueSelection = (selection: string | string[]) => {\n if (typeof selection === 'string') {\n if (hasProp(rhs, 'parameterId')) onChange({ parameterId: selection });\n else onChange({ value: selection }); // Submit a new RHS\n } else {\n onChange({ values: selection }); // Submit a new RHS\n }\n };\n\n // Handle changes from the Field-selector\n const handleFieldChange = (id: string) => {\n onChange({ field: id }); // Submit a new RHS\n };\n\n // Handle changes from a Value-input\n const handleValueChange = (e: ChangeEvent<HTMLInputElement>) => {\n // NOTE: Not trimming the value here so that users can freely type spaces between words. Trimming is done on Submit, via the isValidRhs call\n onChange({ value: e.target.value }); // Submit a new RHS\n };\n\n // Handle changes from a DateInput\n const handleDateValueChange = ({ valueAsISOString, state }: DateTimeCallbackParameter) => {\n // NOTE: Not relying fully on `state` since in some cases state and valueAsTimestamp as both undefined\n if (valueAsISOString === undefined) {\n onChange({ value: '' });\n return;\n }\n\n if (state) {\n // sending empty value marked as 'error' to allow clearing condition\n onChange({ value: '' }, 'error');\n return;\n }\n\n const truncatedValue = truncateISODateString(valueAsISOString, fieldType); // Truncate to return a wall time as per spec\n onChange({\n value: fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedValue) : truncatedValue\n });\n };\n\n const handleDateRangeValueChange = ({ start, end }: DateRangeCallbackParameter) => {\n if (start.valueAsTimestamp === undefined && end.valueAsTimestamp === undefined) {\n onChange({ start: '', end: '' });\n return;\n }\n\n if (\n start.valueAsISOString === undefined ||\n end.valueAsISOString === undefined ||\n start.state ||\n end.state\n ) {\n // sending empty value marked as 'error' to allow clearing condition\n onChange({ start: '', end: '' }, 'error');\n return;\n }\n\n const [truncatedStartValue, truncatedEndValue] = [\n truncateISODateString(start.valueAsISOString, fieldType),\n truncateISODateString(end.valueAsISOString, fieldType)\n ];\n\n const onChangeParam = {\n start:\n fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedStartValue) : truncatedStartValue,\n end: fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedEndValue) : truncatedEndValue\n };\n\n if (\n start.valueAsTimestamp &&\n end.valueAsTimestamp &&\n start.valueAsTimestamp > end.valueAsTimestamp\n ) {\n onChange(onChangeParam, 'error');\n return;\n }\n\n onChange(onChangeParam);\n };\n\n const handleNumberRangeValueChange = ({ start, end }: { start: string; end: string }) => {\n const startValue = start.trim();\n const endValue = end.trim();\n\n onChange(\n {\n start: startValue ? Number(start) : '',\n end: endValue ? Number(end) : ''\n },\n // checking one of values is empty, but not both\n ((!startValue || !endValue) && (startValue || endValue)) ||\n (startValue && endValue && startValue > endValue)\n ? 'error'\n : undefined\n );\n };\n\n // Handle changes from a CSV-input\n const handleCSVChange = (e: ChangeEvent<HTMLInputElement>) => {\n // Update the controlled input\n setCsvInput(e.target.value);\n\n // Submit a new RHS\n let newValues: string[] | number[] = e.target.value\n .split(',')\n .map(v => v.trim())\n .filter(v => v.length > 0); // Ignore empty strings\n if (fieldType === 'NUMBER') {\n 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\n }\n onChange({ values: newValues });\n };\n\n // Render the menu directly if in a vertical layout\n const TimePeriodComp = itemDirection === 'column' ? TimePeriodMenu : TimePeriodInput;\n const alignItems = showError ? 'center' : 'end';\n return (\n <Flex\n container={{\n direction: itemDirection,\n alignItems: itemDirection === 'column' ? 'stretch' : alignItems,\n justify: 'between',\n gap: 0.5\n }}\n >\n {/* Gear MenuButton */}\n <RhsModeSwitch\n parameters={parameters}\n fieldType={fieldType}\n comparator={comparator}\n rhs={rhs}\n onChange={onChange}\n mode={itemDirection === 'column' ? 'combo-box' : 'menu-button'}\n validRhsTypes={validRhsTypes}\n dateFunctions={dateFunctions}\n />\n {/* Field-selector */}\n {hasProp(rhs, 'field') && (\n <Flex item={{ grow: 1 }}>\n <FieldSelector\n value={rhs.field}\n onChange={handleFieldChange}\n fields={fieldOptions}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_no_selection') : undefined}\n label={t('condition_builder_value_label')}\n />\n </Flex>\n )}\n\n {/* Parameter input */}\n {hasProp(rhs, 'parameterId') && (\n <Flex item={{ grow: 1 }}>\n {parameters.length === 1 && (\n <Input\n value={parameters[0].primary.toString()}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_empty_value_text') : undefined}\n name='rhs-text-parameter-input'\n label={t('condition_builder_value_label')}\n readOnly\n />\n )}\n\n {parameters.length > 1 && (\n <ValueSelector\n parameters={parameters}\n mode='single-select'\n values={rhs.parameterId.toString()}\n selectedField={matchingField}\n rhs={rhs}\n comparator={comparator}\n onChange={handleValueSelection}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_empty_selection_error_text') : undefined}\n handle={handle}\n label={t('condition_builder_value_label')}\n />\n )}\n </Flex>\n )}\n\n {/* Value input */}\n {hasProp(rhs, 'value') && !hasProp(rhs, 'dateFunction') && (\n <Flex item={{ grow: 1 }}>\n {fieldType === 'TEXT' && useValueSelector && (\n <ValueSelector\n parameters={parameters}\n mode='single-select'\n values={rhs.value.toString()}\n selectedField={matchingField}\n comparator={comparator}\n rhs={rhs}\n onChange={handleValueSelection}\n status={showError || apiError ? 'error' : undefined}\n info={showError ? t('condition_builder_no_selection') : apiError}\n setApiError={setApiError}\n handle={handle}\n label={t('condition_builder_value_label')}\n />\n )}\n\n {fieldType === 'TEXT' && !useValueSelector && (\n <Input\n value={rhs.value.toString()}\n onChange={handleValueChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('empty_value') : undefined}\n name='rhs-text-literal-input'\n label={t('condition_builder_value_label')}\n />\n )}\n\n {fieldType === 'NUMBER' && (\n <NumericInput rhs={rhs} onChange={onChange} status={showError ? 'error' : undefined} />\n )}\n {fieldType === 'TIME_ONLY' && (\n <TimeInput\n value={rhs.value !== '' ? convertMsToTimeValue(Number(rhs.value)) : undefined}\n withSeconds\n onChange={handleDateValueChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_time') : ''} // NOTE: Using empty quotes to disable the default info which indicates the format\n label={t('condition_builder_value_label')}\n handle={handle}\n />\n )}\n {fieldType === 'DATE_ONLY' && (\n <DateInput\n value={rhs.value}\n onChange={handleDateValueChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_date') : ''}\n label={t('condition_builder_value_label')}\n handle={handle}\n />\n )}\n {fieldType === 'DATE_TIME' && (\n <DateTimeInput\n value={rhs.value !== '' ? rhs.value : undefined}\n onChange={handleDateValueChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_date') : ''}\n label={t('condition_builder_value_label')}\n handle={handle}\n />\n )}\n </Flex>\n )}\n\n {(fieldType === 'DATE_ONLY' || fieldType === 'DATE_TIME') &&\n (hasProp(rhs, 'relativeDate') || hasProp(rhs, 'dateFunction')) && (\n <Flex item={{ grow: 1 }}>\n <TimePeriodComp\n rhs={rhs}\n fieldType={fieldType}\n onChange={onChange}\n dateFunctionsList={dateFunctions ? dateFunctions[fieldType] : []}\n status={showError ? 'error' : undefined}\n />\n </Flex>\n )}\n\n {/* Multiple-values input */}\n {hasProp(rhs, 'values') && (\n <Flex item={{ grow: 1 }}>\n {useValueSelector && (\n <ValueSelector\n parameters={parameters}\n mode='multi-select'\n values={rhs.values.map(String)}\n selectedField={matchingField}\n comparator={comparator}\n rhs={rhs}\n onChange={handleValueSelection}\n status={showError || apiError ? 'error' : undefined}\n info={showError ? t('condition_builder_no_selection') : apiError}\n setApiError={setApiError}\n handle={handle}\n label={t('condition_builder_value_label')}\n />\n )}\n {!useValueSelector && (\n <Input\n value={csvInput}\n onChange={handleCSVChange}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_values') : undefined}\n label={t('condition_builder_value_label')}\n placeholder={t('condition_builder_enter_csv_placeholder')}\n />\n )}\n </Flex>\n )}\n\n {hasProp(rhs, 'start') && (\n <Flex item={{ grow: 1 }}>\n {fieldType === 'NUMBER' && (\n <NumberRangeInput\n value={{ start: rhs.start.toString(), end: rhs.end.toString() }}\n onChange={handleNumberRangeValueChange}\n status={showError ? 'error' : undefined}\n label={t('condition_builder_value_label')}\n info={showError ? t('condition_builder_invalid_number_range') : undefined}\n handle={handle}\n />\n )}\n\n {fieldType === 'DATE_ONLY' && (\n <DateRangeInput\n value={{ start: rhs.start || undefined, end: rhs.end || undefined }}\n onChange={handleDateRangeValueChange}\n label={t('condition_builder_value_label')}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_date_range') : ''} // NOTE: Using empty quotes to disable the default info which indicates the format\n handle={handle}\n />\n )}\n\n {fieldType === 'TIME_ONLY' && (\n <TimeRangeInput\n mode='time'\n value={{ start: rhs.start || undefined, end: rhs.end || undefined }}\n onChange={handleDateRangeValueChange}\n label={t('condition_builder_value_label')}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_time_range') : ''} // NOTE: Using empty quotes to disable the default info which indicates the format\n handle={handle}\n />\n )}\n\n {fieldType === 'DATE_TIME' && (\n <TimeRangeInput\n mode='datetime'\n value={{ start: rhs.start || undefined, end: rhs.end || undefined }}\n onChange={handleDateRangeValueChange}\n label={t('condition_builder_value_label')}\n status={showError ? 'error' : undefined}\n info={showError ? t('condition_builder_invalid_date_range') : ''} // NOTE: Using empty quotes to disable the default info which indicates the format\n handle={handle}\n />\n )}\n </Flex>\n )}\n </Flex>\n );\n};\nexport default RhsControls;\n"]}
@@ -1,4 +1,4 @@
1
- import { FieldType, Comparator, ComparatorsByType } from './types';
1
+ import type { FieldType, Comparator, ComparatorsByType } from './types';
2
2
  interface ComparatorOption {
3
3
  id: Comparator;
4
4
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/comparators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE,UAAU,gBAAgB;IACxB,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAmED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,SAAS,EAAE,SAAS,EACpB,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,GACrC,gBAAgB,EAAE,CAapB"}
1
+ {"version":3,"file":"comparators.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/comparators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAExE,UAAU,gBAAgB;IACxB,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAmED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,SAAS,EAAE,SAAS,EACpB,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,GACrC,gBAAgB,EAAE,CAapB"}
@@ -24,6 +24,8 @@ const textFieldOptions = [
24
24
  ];
25
25
  // FIXME: TR
26
26
  const numericFieldOptions = [
27
+ { id: 'BTW', label: 'between' },
28
+ { id: 'NOT_BTW', label: 'not between' },
27
29
  { id: 'EQ', label: 'is equal to' },
28
30
  { id: 'NEQ', label: 'is not equal to' },
29
31
  { id: 'IN', label: 'is in list' },
@@ -32,21 +34,19 @@ const numericFieldOptions = [
32
34
  { id: 'GTE', label: 'greater than or equals' },
33
35
  { id: 'LT', label: 'lower than' },
34
36
  { id: 'LTE', label: 'lower than or equals' },
35
- { id: 'BTW', label: 'between' },
36
- { id: 'NOT_BTW', label: 'not between' },
37
37
  { id: 'IS_NULL', label: 'is null' },
38
38
  { id: 'IS_NOT_NULL', label: 'is not null' }
39
39
  ];
40
40
  // FIXME: TR
41
41
  const dateTimeFieldOptions = [
42
+ { id: 'BTW', label: 'between' },
43
+ { id: 'NOT_BTW', label: 'not between' },
42
44
  { id: 'EQ', label: 'is equal to' },
43
45
  { id: 'NEQ', label: 'is not equal to' },
44
46
  { id: 'GT', label: 'after' },
45
47
  { id: 'GTE', label: 'on or after' },
46
48
  { id: 'LT', label: 'before' },
47
49
  { id: 'LTE', label: 'on or before' },
48
- { id: 'BTW', label: 'between' },
49
- { id: 'NOT_BTW', label: 'not between' },
50
50
  { id: 'IS_NULL', label: 'is null' },
51
51
  { id: 'IS_NOT_NULL', label: 'is not null' }
52
52
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"comparators.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/comparators.ts"],"names":[],"mappings":"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","sourcesContent":["import { FieldType, Comparator, ComparatorsByType } from './types';\n\ninterface ComparatorOption {\n id: Comparator;\n label: string;\n}\n\n// FIXME: TR\nconst boolFieldOptions: ComparatorOption[] = [\n { id: 'IS_TRUE', label: 'is true' },\n { id: 'IS_FALSE', label: 'is false' },\n { id: 'EQ', label: 'is equal to' },\n { id: 'NEQ', label: 'is not equal to' },\n { id: 'IS_NULL', label: 'is null' },\n { id: 'IS_NOT_NULL', label: 'is not null' }\n];\n\n// FIXME: TR\nconst textFieldOptions: ComparatorOption[] = [\n { id: 'EQ', label: 'is equal to' },\n { id: 'NEQ', label: 'is not equal to' },\n { id: 'IN', label: 'is in list' },\n { id: 'NOT_IN', label: 'is not in list' },\n { id: 'STARTS_WITH', label: 'starts with' },\n { id: 'NOT_STARTS_WITH', label: 'not starts with' },\n { id: 'ENDS_WITH', label: 'ends with' },\n { id: 'NOT_ENDS_WITH', label: 'not ends with' },\n { id: 'CONTAINS', label: 'contains' },\n { id: 'NOT_CONTAINS', label: 'not contains' },\n { id: 'IS_NULL', label: 'is null' },\n { id: 'IS_NOT_NULL', label: 'is not null' }\n];\n\n// FIXME: TR\nconst numericFieldOptions: ComparatorOption[] = [\n { id: 'EQ', label: 'is equal to' },\n { id: 'NEQ', label: 'is not equal to' },\n { id: 'IN', label: 'is in list' },\n { id: 'NOT_IN', label: 'is not in list' },\n { id: 'GT', label: 'greater than' },\n { id: 'GTE', label: 'greater than or equals' },\n { id: 'LT', label: 'lower than' },\n { id: 'LTE', label: 'lower than or equals' },\n { id: 'BTW', label: 'between' },\n { id: 'NOT_BTW', label: 'not between' },\n { id: 'IS_NULL', label: 'is null' },\n { id: 'IS_NOT_NULL', label: 'is not null' }\n];\n\n// FIXME: TR\nconst dateTimeFieldOptions: ComparatorOption[] = [\n { id: 'EQ', label: 'is equal to' },\n { id: 'NEQ', label: 'is not equal to' },\n { id: 'GT', label: 'after' },\n { id: 'GTE', label: 'on or after' },\n { id: 'LT', label: 'before' },\n { id: 'LTE', label: 'on or before' },\n { id: 'BTW', label: 'between' },\n { id: 'NOT_BTW', label: 'not between' },\n { id: 'IS_NULL', label: 'is null' },\n { id: 'IS_NOT_NULL', label: 'is not null' }\n];\n\nconst typeWiseComparators: Record<FieldType, ComparatorOption[]> = {\n BOOLEAN: boolFieldOptions,\n TEXT: textFieldOptions,\n NUMBER: numericFieldOptions,\n DATE_TIME: dateTimeFieldOptions,\n DATE_ONLY: dateTimeFieldOptions,\n TIME_ONLY: dateTimeFieldOptions\n};\n\n/**\n * Returns Comparator-options applicable to the input fieldType\n * If `validComparators` is passed, limits the options based on that\n */\nexport default function getComparatorOptions(\n fieldType: FieldType,\n validComparators?: ComparatorsByType[]\n): ComparatorOption[] {\n // Identify the options by fieldType\n const options = typeWiseComparators[fieldType];\n\n // If a limited set of comparators is provided for the current fieldType, use those\n if (validComparators !== undefined) {\n const applicableGroup = validComparators.find(group => group.type === fieldType);\n if (applicableGroup !== undefined) {\n const comparators = new Set(applicableGroup.comparators);\n return options.filter(o => comparators.has(o.id));\n }\n }\n return options;\n}\n"]}
1
+ {"version":3,"file":"comparators.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/comparators.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FieldType, Comparator, ComparatorsByType } from './types';\n\ninterface ComparatorOption {\n id: Comparator;\n label: string;\n}\n\n// FIXME: TR\nconst boolFieldOptions: ComparatorOption[] = [\n { id: 'IS_TRUE', label: 'is true' },\n { id: 'IS_FALSE', label: 'is false' },\n { id: 'EQ', label: 'is equal to' },\n { id: 'NEQ', label: 'is not equal to' },\n { id: 'IS_NULL', label: 'is null' },\n { id: 'IS_NOT_NULL', label: 'is not null' }\n];\n\n// FIXME: TR\nconst textFieldOptions: ComparatorOption[] = [\n { id: 'EQ', label: 'is equal to' },\n { id: 'NEQ', label: 'is not equal to' },\n { id: 'IN', label: 'is in list' },\n { id: 'NOT_IN', label: 'is not in list' },\n { id: 'STARTS_WITH', label: 'starts with' },\n { id: 'NOT_STARTS_WITH', label: 'not starts with' },\n { id: 'ENDS_WITH', label: 'ends with' },\n { id: 'NOT_ENDS_WITH', label: 'not ends with' },\n { id: 'CONTAINS', label: 'contains' },\n { id: 'NOT_CONTAINS', label: 'not contains' },\n { id: 'IS_NULL', label: 'is null' },\n { id: 'IS_NOT_NULL', label: 'is not null' }\n];\n\n// FIXME: TR\nconst numericFieldOptions: ComparatorOption[] = [\n { id: 'BTW', label: 'between' },\n { id: 'NOT_BTW', label: 'not between' },\n { id: 'EQ', label: 'is equal to' },\n { id: 'NEQ', label: 'is not equal to' },\n { id: 'IN', label: 'is in list' },\n { id: 'NOT_IN', label: 'is not in list' },\n { id: 'GT', label: 'greater than' },\n { id: 'GTE', label: 'greater than or equals' },\n { id: 'LT', label: 'lower than' },\n { id: 'LTE', label: 'lower than or equals' },\n { id: 'IS_NULL', label: 'is null' },\n { id: 'IS_NOT_NULL', label: 'is not null' }\n];\n\n// FIXME: TR\nconst dateTimeFieldOptions: ComparatorOption[] = [\n { id: 'BTW', label: 'between' },\n { id: 'NOT_BTW', label: 'not between' },\n { id: 'EQ', label: 'is equal to' },\n { id: 'NEQ', label: 'is not equal to' },\n { id: 'GT', label: 'after' },\n { id: 'GTE', label: 'on or after' },\n { id: 'LT', label: 'before' },\n { id: 'LTE', label: 'on or before' },\n { id: 'IS_NULL', label: 'is null' },\n { id: 'IS_NOT_NULL', label: 'is not null' }\n];\n\nconst typeWiseComparators: Record<FieldType, ComparatorOption[]> = {\n BOOLEAN: boolFieldOptions,\n TEXT: textFieldOptions,\n NUMBER: numericFieldOptions,\n DATE_TIME: dateTimeFieldOptions,\n DATE_ONLY: dateTimeFieldOptions,\n TIME_ONLY: dateTimeFieldOptions\n};\n\n/**\n * Returns Comparator-options applicable to the input fieldType\n * If `validComparators` is passed, limits the options based on that\n */\nexport default function getComparatorOptions(\n fieldType: FieldType,\n validComparators?: ComparatorsByType[]\n): ComparatorOption[] {\n // Identify the options by fieldType\n const options = typeWiseComparators[fieldType];\n\n // If a limited set of comparators is provided for the current fieldType, use those\n if (validComparators !== undefined) {\n const applicableGroup = validComparators.find(group => group.type === fieldType);\n if (applicableGroup !== undefined) {\n const comparators = new Set(applicableGroup.comparators);\n return options.filter(o => comparators.has(o.id));\n }\n }\n return options;\n}\n"]}
@@ -1,4 +1,8 @@
1
- import { Condition, Field } from '../ConditionBuilder.types';
1
+ import type { Condition, Field } from '../ConditionBuilder.types';
2
+ type EvaluatorData = string | number | boolean | bigint | null | undefined | Date | EvaluateDataObj | EvaluatorData[];
3
+ type EvaluateDataObj = {
4
+ [key: string]: EvaluatorData;
5
+ };
2
6
  /**
3
7
  * Evaluates a condition tree for the given data document
4
8
  * NOTE: The output is nondeterministic if:
@@ -8,7 +12,6 @@ import { Condition, Field } from '../ConditionBuilder.types';
8
12
  * - non-ISO strings are passed for DATE_TIME/DATE_ONLY fields
9
13
  * - TIME_ONLY data values are not passed as `number of milliseconds since the start of day`
10
14
  */
11
- export default function evaluateCondition(condition: Condition, data: {
12
- [fieldName: string]: any;
13
- }, fields: Field[]): boolean;
15
+ export default function evaluateCondition(condition: Condition, data: EvaluateDataObj, fields: Field[], delimiter?: string): boolean;
16
+ export {};
14
17
  //# sourceMappingURL=evaluator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/evaluator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAiB,KAAK,EAAuB,MAAM,2BAA2B,CAAC;AAwSjG;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAClC,MAAM,EAAE,KAAK,EAAE,GACd,OAAO,CAoBT"}
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/evaluator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EAET,KAAK,EAEN,MAAM,2BAA2B,CAAC;AAMnC,KAAK,aAAa,GACd,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,IAAI,GACJ,SAAS,GACT,IAAI,GACJ,eAAe,GACf,aAAa,EAAE,CAAC;AACpB,KAAK,eAAe,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC;AA4VxD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,KAAK,EAAE,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAoBT"}
@@ -1,7 +1,20 @@
1
1
  // cspell:words YYYYQQ, YYYYMM, YYYYMMDD, YYYYMMDDHH
2
- import { hasProp } from '@pega/cosmos-react-core';
2
+ import { deepGet, hasProp } from '@pega/cosmos-react-core';
3
3
  import { getItem } from './utils';
4
4
  import transformComplexCondition from './transformer';
5
+ const isStringArray = (value) => {
6
+ if (!Array.isArray(value))
7
+ return false;
8
+ return value.every(item => typeof item === 'string');
9
+ };
10
+ const isNumberArray = (value) => {
11
+ if (!Array.isArray(value))
12
+ return false;
13
+ return value.every(item => typeof item === 'number');
14
+ };
15
+ const isDateInputParam = (value) => {
16
+ return typeof value === 'string' || typeof value === 'number' || value instanceof Date;
17
+ };
5
18
  const QUOTE = '"';
6
19
  /** Evaluates leaf conditions with BOOLEAN fields */
7
20
  function evaluateBoolCondition(lhsValue, comparator, rhsValue // undefined for IS_TRUE/IS_FALSE comparators
@@ -99,6 +112,13 @@ function getDateParts(date) {
99
112
  ss: date.getSeconds().toString().padStart(2, '0')
100
113
  };
101
114
  }
115
+ /** Returns the value of a given field from data obj */
116
+ function resolveValueFromData(path, data, delimiter) {
117
+ if (!delimiter || !path.includes(delimiter)) {
118
+ return data[path];
119
+ }
120
+ return deepGet(data, path.split(delimiter));
121
+ }
102
122
  /** Evaluates leaf conditions with Date-functions */
103
123
  function evaluateDateFuncCondition(lhsValue, fieldType, comparator, rhs) {
104
124
  if (fieldType === 'DATE_ONLY')
@@ -177,16 +197,16 @@ function evaluateDateFuncCondition(lhsValue, fieldType, comparator, rhs) {
177
197
  return evaluateNumericCondition(lhsNumVal, comparator, rhsNumVal);
178
198
  }
179
199
  /** Evaluates a leaf node in a condition tree for the given data document */
180
- function evaluateLeafCondition(leaf, data, fields) {
200
+ function evaluateLeafCondition(leaf, data, fields, delimiter) {
181
201
  // For safety against any malformed nodes or unexpected types/formats in data-values
182
202
  try {
183
203
  const { lhs, comparator, rhs } = leaf;
184
204
  // Determine LHS and RHS values
185
- const lhsValue = data[lhs.field];
205
+ const lhsValue = resolveValueFromData(lhs.field, data, delimiter);
186
206
  let rhsValue;
187
207
  if (rhs) {
188
208
  if (hasProp(rhs, 'field')) {
189
- rhsValue = data[rhs.field]; // If RHS is another field
209
+ rhsValue = resolveValueFromData(rhs.field, data, delimiter); // If RHS is another field
190
210
  }
191
211
  else if (hasProp(rhs, 'value')) {
192
212
  rhsValue = rhs.value; // If RHS is a single value
@@ -195,7 +215,7 @@ function evaluateLeafCondition(leaf, data, fields) {
195
215
  rhsValue = true; // TODO: When we transform relative dates to LT/GT statements, we won't need this.
196
216
  }
197
217
  else if (hasProp(rhs, 'parameterId')) {
198
- rhsValue = data[rhs.parameterId]; // If RHS is of type PARAMETER
218
+ rhsValue = resolveValueFromData(rhs.parameterId, data, delimiter); // If RHS is of type PARAMETER
199
219
  }
200
220
  else if (hasProp(rhs, 'values')) {
201
221
  rhsValue = rhs.values; // If RHS is a list of values
@@ -219,24 +239,48 @@ function evaluateLeafCondition(leaf, data, fields) {
219
239
  }
220
240
  switch (field.type) {
221
241
  case 'BOOLEAN':
222
- return evaluateBoolCondition(lhsValue, comparator, rhsValue);
242
+ return typeof lhsValue === 'boolean' &&
243
+ (rhsValue === undefined || typeof rhsValue === 'boolean')
244
+ ? evaluateBoolCondition(lhsValue, comparator, rhsValue)
245
+ : false;
223
246
  case 'TEXT':
224
- return evaluateTextCondition(lhsValue, comparator, rhsValue);
247
+ return typeof lhsValue === 'string' &&
248
+ (typeof rhsValue === 'string' || isStringArray(rhsValue))
249
+ ? evaluateTextCondition(lhsValue, comparator, rhsValue)
250
+ : false;
225
251
  case 'NUMBER':
226
252
  case 'TIME_ONLY':
227
- return evaluateNumericCondition(lhsValue, comparator, rhsValue);
253
+ return typeof lhsValue === 'number' &&
254
+ (typeof rhsValue === 'number' || isNumberArray(rhsValue))
255
+ ? evaluateNumericCondition(lhsValue, comparator, rhsValue)
256
+ : false;
228
257
  case 'DATE_TIME':
229
258
  case 'DATE_ONLY': {
230
259
  if (rhs && hasProp(rhs, 'dateFunction')) {
231
- return evaluateDateFuncCondition(lhsValue, field.type, comparator, rhs);
260
+ return typeof lhsValue === 'string'
261
+ ? evaluateDateFuncCondition(lhsValue, field.type, comparator, rhs)
262
+ : false;
232
263
  }
233
264
  if (rhs && hasProp(rhs, 'relativeDate')) {
234
265
  return true; // TODO: When we transform relative dates to LT/GT statements, we won't need this.
235
266
  }
236
267
  // Both the values are expected to be in an ISO-8601 format
237
- const lhsAsTicks = new Date(lhsValue).getTime();
238
- const rhsAsTicks = new Date(rhsValue).getTime();
239
- return evaluateNumericCondition(lhsAsTicks, comparator, rhsAsTicks);
268
+ if (isDateInputParam(lhsValue) && isDateInputParam(rhsValue)) {
269
+ const lhsDate = new Date(lhsValue);
270
+ const rhsDate = rhsValue instanceof Date ? rhsValue.toISOString() : rhsValue.toString();
271
+ const [, timePart] = rhsDate.split('T');
272
+ if (timePart) {
273
+ const [, , seconds] = timePart.split(':');
274
+ if (!seconds) {
275
+ lhsDate.setSeconds(0, 0);
276
+ }
277
+ else if (!seconds.includes('.')) {
278
+ lhsDate.setMilliseconds(0);
279
+ }
280
+ }
281
+ return evaluateNumericCondition(lhsDate.getTime(), comparator, new Date(rhsValue).getTime());
282
+ }
283
+ return false;
240
284
  }
241
285
  default:
242
286
  return false; // Not needed
@@ -255,23 +299,23 @@ function evaluateLeafCondition(leaf, data, fields) {
255
299
  * - non-ISO strings are passed for DATE_TIME/DATE_ONLY fields
256
300
  * - TIME_ONLY data values are not passed as `number of milliseconds since the start of day`
257
301
  */
258
- export default function evaluateCondition(condition, data, fields) {
302
+ export default function evaluateCondition(condition, data, fields, delimiter) {
259
303
  // For safety against any malformed trees
260
304
  try {
261
305
  // Update relative date conditions to be LT/GT date range conditions
262
306
  const updatedCondition = transformComplexCondition(condition, fields);
263
307
  if (hasProp(updatedCondition, 'AND')) {
264
308
  // Return true if all the child nodes are true
265
- return updatedCondition.AND.every(child => evaluateCondition(child, data, fields));
309
+ return updatedCondition.AND.every(child => evaluateCondition(child, data, fields, delimiter));
266
310
  }
267
311
  if (hasProp(updatedCondition, 'OR')) {
268
312
  // Return true if any one of the child nodes is true
269
- return updatedCondition.OR.some(child => evaluateCondition(child, data, fields));
313
+ return updatedCondition.OR.some(child => evaluateCondition(child, data, fields, delimiter));
270
314
  }
271
315
  if (hasProp(updatedCondition, 'NOT')) {
272
- return !evaluateCondition(updatedCondition.NOT, data, fields);
316
+ return !evaluateCondition(updatedCondition.NOT, data, fields, delimiter);
273
317
  }
274
- return evaluateLeafCondition(updatedCondition.condition, data, fields);
318
+ return evaluateLeafCondition(updatedCondition.condition, data, fields, delimiter);
275
319
  }
276
320
  catch {
277
321
  return false;