@pega/cosmos-react-condition-builder 3.0.0-dev.17.0 → 3.0.0-dev.18.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 (47) hide show
  1. package/lib/components/ConditionBuilder/AtomicCondition.d.ts +2 -2
  2. package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
  3. package/lib/components/ConditionBuilder/AtomicCondition.js +22 -14
  4. package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
  5. package/lib/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
  6. package/lib/components/ConditionBuilder/ConditionBuilder.js +2 -30
  7. package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
  8. package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts +5 -0
  9. package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts.map +1 -0
  10. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js +44 -0
  11. package/lib/components/ConditionBuilder/ConditionBuilder.styles.js.map +1 -0
  12. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +10 -3
  13. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
  14. package/lib/components/ConditionBuilder/ConditionBuilder.types.js.map +1 -1
  15. package/lib/components/ConditionBuilder/FieldCondition.js +1 -1
  16. package/lib/components/ConditionBuilder/FieldCondition.js.map +1 -1
  17. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.d.ts.map +1 -1
  18. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js +3 -2
  19. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js.map +1 -1
  20. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.d.ts +5 -3
  21. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.d.ts.map +1 -1
  22. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js +33 -8
  23. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js.map +1 -1
  24. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts +5 -1
  25. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts.map +1 -1
  26. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js +47 -22
  27. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js.map +1 -1
  28. package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
  29. package/lib/components/ConditionBuilder/RhsControls/index.js +23 -15
  30. package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
  31. package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
  32. package/lib/components/ConditionBuilder/core/evaluator.js +3 -0
  33. package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
  34. package/lib/components/ConditionBuilder/core/formatter.d.ts +1 -0
  35. package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
  36. package/lib/components/ConditionBuilder/core/formatter.js +59 -25
  37. package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
  38. package/lib/components/ConditionBuilder/core/types.d.ts +1 -1
  39. package/lib/components/ConditionBuilder/core/types.d.ts.map +1 -1
  40. package/lib/components/ConditionBuilder/core/types.js.map +1 -1
  41. package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -1
  42. package/lib/components/ConditionInput/ConditionInput.js +50 -22
  43. package/lib/components/ConditionInput/ConditionInput.js.map +1 -1
  44. package/lib/components/ConditionInput/ConditionInput.types.d.ts +1 -1
  45. package/lib/components/ConditionInput/ConditionInput.types.d.ts.map +1 -1
  46. package/lib/components/ConditionInput/ConditionInput.types.js.map +1 -1
  47. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { forwardRef, useState, useEffect } from 'react';
3
3
  import styled, { css } from 'styled-components';
4
- import { CompositeInput, defaultThemeProp, hasProp, Input, NumberInput, RadioButton, RadioButtonGroup, StyledGrid, useI18n, FieldGroup, StyledFieldGroupLegend, StyledButton } from '@pega/cosmos-react-core';
4
+ import { CompositeInput, defaultThemeProp, hasProp, Input, NumberInput, RadioButton, RadioButtonGroup, StyledGrid, useI18n, FieldGroup, StyledFieldGroupLegend, StyledButton, DateInput, TimeInput, DateTimeInput, useConfiguration } from '@pega/cosmos-react-core';
5
5
  import AtomicCondition, { getInitConditionForLhs } from '../ConditionBuilder/AtomicCondition';
6
6
  import formatCondition from '../ConditionBuilder/core/formatter';
7
7
  const defaultComparators = {
@@ -13,7 +13,10 @@ const defaultComparators = {
13
13
  DECIMAL: 'EQ',
14
14
  PERCENTAGE: 'EQ',
15
15
  CURRENCY: 'EQ',
16
- BOOLEAN: 'IS_TRUE'
16
+ BOOLEAN: 'IS_TRUE',
17
+ DATE_ONLY: 'LT',
18
+ TIME_ONLY: 'LT',
19
+ DATE_TIME: 'LT'
17
20
  };
18
21
  const basicFieldMap = {
19
22
  EMAIL: 'TEXT',
@@ -24,7 +27,10 @@ const basicFieldMap = {
24
27
  PERCENTAGE: 'NUMBER',
25
28
  CURRENCY: 'NUMBER',
26
29
  TEXT: 'TEXT',
27
- BOOLEAN: 'BOOLEAN'
30
+ BOOLEAN: 'BOOLEAN',
31
+ DATE_ONLY: 'DATE_ONLY',
32
+ TIME_ONLY: 'TIME_ONLY',
33
+ DATE_TIME: 'DATE_TIME'
28
34
  };
29
35
  const StyledConditionRadioGroup = styled(RadioButtonGroup) `
30
36
  ${StyledGrid} {
@@ -32,24 +38,26 @@ const StyledConditionRadioGroup = styled(RadioButtonGroup) `
32
38
  } ;
33
39
  `;
34
40
  StyledConditionRadioGroup.defaultProps = defaultThemeProp;
35
- const StyledFieldGroup = styled(FieldGroup)(({ theme: { base: { palette } } }) => {
41
+ const StyledFieldGroupLegendFn = ({ theme: { base: { palette } } }) => {
36
42
  return css `
37
- margin-block-start: 0;
43
+ ${StyledFieldGroupLegend} {
44
+ border-block-start: 0.0625rem solid ${palette['border-line']};
45
+ padding-block-start: 0.625rem;
38
46
 
39
- ${StyledFieldGroupLegend} {
40
- border-block-start: 0.0625rem solid ${palette['border-line']};
41
- padding-block-start: 0.625rem;
42
-
43
- ${StyledButton} {
44
- border-color: transparent;
45
- font-weight: initial;
46
- }
47
+ ${StyledButton} {
48
+ border-color: transparent;
49
+ font-weight: initial;
47
50
  }
48
- `;
49
- });
51
+ }
52
+ `;
53
+ };
54
+ const StyledFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);
50
55
  StyledFieldGroup.defaultProps = defaultThemeProp;
56
+ const StyledAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);
57
+ StyledAtomicCondition.defaultProps = defaultThemeProp;
51
58
  const ConditionInput = forwardRef(({ fieldName, fieldType, condition: conditionProp, fieldLabel, mode, onChange, flat = false }, ref) => {
52
59
  const t = useI18n();
60
+ const { locale } = useConfiguration();
53
61
  const basicType = basicFieldMap[fieldType] ?? fieldType;
54
62
  const fields = [
55
63
  { id: fieldName, type: basicType, primary: fieldLabel || fieldName }
@@ -89,19 +97,34 @@ const ConditionInput = forwardRef(({ fieldName, fieldType, condition: conditionP
89
97
  case 'DECIMAL':
90
98
  case 'PERCENTAGE':
91
99
  case 'CURRENCY':
92
- defaultControl = (_jsx(NumberInput, { label: fieldLabel, ref: ref, value: inputValue, onChange: setInputValue, onBlur: value => {
100
+ defaultControl = (_jsx(NumberInput, { label: fieldLabel, labelHidden: flat, ref: ref, value: inputValue, onChange: setInputValue, onBlur: value => {
93
101
  onChange(createConditionForDefaultMode(value));
94
102
  }, numberOfDecimals: fieldType === 'INTEGER' ? 0 : undefined }));
95
103
  break;
96
104
  case 'BOOLEAN':
97
- defaultControl = (_jsxs(StyledConditionRadioGroup, { ref: ref, label: fieldLabel, name: fieldName, inline: true, children: [_jsx(RadioButton, { label: t('show_all'), checked: condition === undefined, onChange: () => onRadioButtonChange() }), _jsx(RadioButton, { label: t('boolean_display_true_label'), checked: condition?.comparator === 'IS_TRUE', onChange: () => onRadioButtonChange(true) }), _jsx(RadioButton, { label: t('boolean_display_false_label'), checked: condition?.comparator === 'IS_FALSE', onChange: () => onRadioButtonChange(false) })] }));
105
+ defaultControl = (_jsxs(StyledConditionRadioGroup, { ref: ref, label: fieldLabel, labelHidden: flat, name: fieldName, inline: true, children: [_jsx(RadioButton, { label: t('show_all'), checked: condition === undefined, onChange: () => onRadioButtonChange() }), _jsx(RadioButton, { label: t('boolean_display_true_label'), checked: condition?.comparator === 'IS_TRUE', onChange: () => onRadioButtonChange(true) }), _jsx(RadioButton, { label: t('boolean_display_false_label'), checked: condition?.comparator === 'IS_FALSE', onChange: () => onRadioButtonChange(false) })] }));
106
+ break;
107
+ case 'DATE_ONLY':
108
+ defaultControl = (_jsx(DateInput, { label: fieldLabel, ref: ref, value: inputValue, onChange: ({ valueAsISOString }) => setInputValue(valueAsISOString), onBlur: ({ valueAsISOString }) => {
109
+ onChange(createConditionForDefaultMode(valueAsISOString));
110
+ } }));
111
+ break;
112
+ case 'TIME_ONLY':
113
+ defaultControl = (_jsx(TimeInput, { label: fieldLabel, ref: ref, value: inputValue || undefined, onChange: ({ valueAsISOString }) => setInputValue(valueAsISOString), onBlur: ({ valueAsISOString }) => {
114
+ onChange(createConditionForDefaultMode(valueAsISOString));
115
+ } }));
116
+ break;
117
+ case 'DATE_TIME':
118
+ defaultControl = (_jsx(DateTimeInput, { label: fieldLabel, ref: ref, value: inputValue, onChange: ({ valueAsISOString }) => setInputValue(valueAsISOString), onBlur: ({ valueAsISOString }) => {
119
+ onChange(createConditionForDefaultMode(valueAsISOString));
120
+ } }));
98
121
  break;
99
122
  case 'TEXT':
100
123
  case 'EMAIL':
101
124
  case 'URL':
102
125
  case 'PHONE':
103
126
  default:
104
- defaultControl = (_jsx(Input, { label: fieldLabel, ref: ref, value: inputValue, onChange: (e) => setInputValue(e.target.value), onBlur: (e) => onChange(createConditionForDefaultMode(e.target.value)) }));
127
+ defaultControl = (_jsx(Input, { label: fieldLabel, labelHidden: flat, ref: ref, value: inputValue, onChange: (e) => setInputValue(e.target.value), onBlur: (e) => onChange(createConditionForDefaultMode(e.target.value)) }));
105
128
  break;
106
129
  }
107
130
  }
@@ -117,7 +140,7 @@ const ConditionInput = forwardRef(({ fieldName, fieldType, condition: conditionP
117
140
  fields,
118
141
  onChange: setNewCondition,
119
142
  itemDirection: 'column',
120
- showLhsAsLabel: true,
143
+ lhsMode: 'hidden',
121
144
  validRhsTypes: new Set(['LITERAL']),
122
145
  indicateErrors: false
123
146
  },
@@ -135,11 +158,16 @@ const ConditionInput = forwardRef(({ fieldName, fieldType, condition: conditionP
135
158
  setNewCondition(condition);
136
159
  };
137
160
  if (flat) {
138
- return (_jsx(StyledFieldGroup, { name: fieldLabel, collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: onClear }], children: showAdvanced ? (_jsx(AtomicCondition, { condition: newCondition ??
139
- getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])), onChange: onChange, fields: fields, itemDirection: 'column', showLhsAsLabel: true, validRhsTypes: new Set(['LITERAL']), indicateErrors: false })) : (defaultControl) }));
161
+ return showAdvanced ? (_jsx(StyledAtomicCondition, { collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: onClear }], condition: newCondition ??
162
+ getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])), onChange: onChange, fields: fields, itemDirection: 'column', lhsMode: 'label', validRhsTypes: new Set(['LITERAL']), indicateErrors: false })) : (_jsx(StyledFieldGroup, { name: fieldLabel, collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: onClear }], children: defaultControl }));
140
163
  }
141
164
  if (showAdvanced) {
142
- return (_jsx(CompositeInput, { dialog: dialog, label: fieldLabel, onClear: onClear, value: conditionProp ? formatCondition({ condition: conditionProp }, fields, t) : undefined, placeholder: t('all'), ref: ref }));
165
+ return (_jsx(CompositeInput, { dialog: dialog, label: fieldLabel, onClear: onClear, value: conditionProp
166
+ ? formatCondition({ condition: conditionProp }, fields, t, {
167
+ locale,
168
+ omitLhs: true
169
+ })
170
+ : undefined, placeholder: t('all'), ref: ref }));
143
171
  }
144
172
  return defaultControl;
145
173
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useEffect\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n CompositeInput,\n CompositeInputProps,\n defaultThemeProp,\n ForwardProps,\n hasProp,\n Input,\n NumberInput,\n RadioButton,\n RadioButtonGroup,\n StyledGrid,\n useI18n,\n FieldGroup,\n StyledFieldGroupLegend,\n StyledButton\n} from '@pega/cosmos-react-core';\n\nimport type { Comparator, FieldType } from '../ConditionBuilder/core/types';\nimport AtomicCondition, {\n AtomicConditionProps,\n getInitConditionForLhs\n} from '../ConditionBuilder/AtomicCondition';\nimport formatCondition from '../ConditionBuilder/core/formatter';\nimport type { LeafCondition } from '../ConditionBuilder/ConditionBuilder.types';\n\nimport { ConditionFieldType, ConditionInputProps } from './ConditionInput.types';\n\nconst defaultComparators: Record<ConditionFieldType, Comparator> = {\n TEXT: 'CONTAINS',\n EMAIL: 'CONTAINS',\n URL: 'CONTAINS',\n PHONE: 'CONTAINS',\n INTEGER: 'EQ',\n DECIMAL: 'EQ',\n PERCENTAGE: 'EQ',\n CURRENCY: 'EQ',\n BOOLEAN: 'IS_TRUE'\n} as const;\n\nconst basicFieldMap: Record<ConditionFieldType, FieldType> = {\n EMAIL: 'TEXT',\n URL: 'TEXT',\n PHONE: 'TEXT',\n INTEGER: 'NUMBER',\n DECIMAL: 'NUMBER',\n PERCENTAGE: 'NUMBER',\n CURRENCY: 'NUMBER',\n TEXT: 'TEXT',\n BOOLEAN: 'BOOLEAN'\n} as const;\n\nconst StyledConditionRadioGroup = styled(RadioButtonGroup)`\n ${StyledGrid} {\n display: inline-flex;\n } ;\n`;\n\nStyledConditionRadioGroup.defaultProps = defaultThemeProp;\n\nconst StyledFieldGroup = styled(FieldGroup)(\n ({\n theme: {\n base: { palette }\n }\n }) => {\n return css`\n margin-block-start: 0;\n\n ${StyledFieldGroupLegend} {\n border-block-start: 0.0625rem solid ${palette['border-line']};\n padding-block-start: 0.625rem;\n\n ${StyledButton} {\n border-color: transparent;\n font-weight: initial;\n }\n }\n `;\n }\n);\n\nStyledFieldGroup.defaultProps = defaultThemeProp;\n\nconst ConditionInput: FunctionComponent<ConditionInputProps & ForwardProps> = forwardRef(\n (\n {\n fieldName,\n fieldType,\n condition: conditionProp,\n fieldLabel,\n mode,\n onChange,\n flat = false\n }: PropsWithoutRef<ConditionInputProps>,\n ref: ConditionInputProps['ref']\n ) => {\n const t = useI18n();\n\n const basicType = basicFieldMap[fieldType] ?? fieldType;\n\n const fields: AtomicConditionProps['fields'] = [\n { id: fieldName, type: basicType, primary: fieldLabel || fieldName }\n ];\n\n const condition =\n conditionProp ??\n (fieldType === 'BOOLEAN'\n ? undefined\n : getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])));\n\n const onRadioButtonChange = (value?: boolean) => {\n const updatedCondition: LeafCondition | undefined =\n value === undefined\n ? undefined\n : {\n lhs: { field: fieldName },\n comparator: value ? 'IS_TRUE' : 'IS_FALSE'\n };\n onChange(updatedCondition);\n };\n\n const createConditionForDefaultMode = (value: string) => {\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: { value: basicType === 'NUMBER' ? Number(value) : value }\n };\n };\n\n const rhsValue =\n condition?.rhs && hasProp(condition.rhs, 'value')\n ? condition.rhs.value.toString()\n : undefined;\n\n const [inputValue, setInputValue] = useState(rhsValue);\n\n useEffect(() => {\n setInputValue(rhsValue);\n }, [conditionProp]);\n\n const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN';\n\n let defaultControl: JSX.Element | null = null;\n\n if (!showAdvanced) {\n switch (fieldType) {\n case 'INTEGER':\n case 'DECIMAL':\n case 'PERCENTAGE':\n case 'CURRENCY':\n defaultControl = (\n <NumberInput\n label={fieldLabel}\n ref={ref}\n value={inputValue}\n onChange={setInputValue}\n onBlur={value => {\n onChange(createConditionForDefaultMode(value));\n }}\n numberOfDecimals={fieldType === 'INTEGER' ? 0 : undefined}\n />\n );\n break;\n case 'BOOLEAN':\n defaultControl = (\n <StyledConditionRadioGroup ref={ref} label={fieldLabel} name={fieldName} inline>\n <RadioButton\n label={t('show_all')}\n checked={condition === undefined}\n onChange={() => onRadioButtonChange()}\n />\n <RadioButton\n label={t('boolean_display_true_label')}\n checked={condition?.comparator === 'IS_TRUE'}\n onChange={() => onRadioButtonChange(true)}\n />\n <RadioButton\n label={t('boolean_display_false_label')}\n checked={condition?.comparator === 'IS_FALSE'}\n onChange={() => onRadioButtonChange(false)}\n />\n </StyledConditionRadioGroup>\n );\n break;\n case 'TEXT':\n case 'EMAIL':\n case 'URL':\n case 'PHONE':\n default:\n defaultControl = (\n <Input\n label={fieldLabel}\n ref={ref}\n value={inputValue}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setInputValue(e.target.value)}\n onBlur={(e: ChangeEvent<HTMLInputElement>) =>\n onChange(createConditionForDefaultMode(e.target.value))\n }\n />\n );\n break;\n }\n }\n\n const [newCondition, setNewCondition] = useState<LeafCondition | undefined>(condition);\n\n useEffect(() => {\n setNewCondition(condition);\n }, [conditionProp]);\n\n const dialog: CompositeInputProps<AtomicConditionProps & ForwardProps>['dialog'] = {\n renderer: AtomicCondition,\n rendererProps: {\n condition:\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])),\n fields,\n onChange: setNewCondition,\n itemDirection: 'column',\n showLhsAsLabel: true,\n validRhsTypes: new Set(['LITERAL']),\n indicateErrors: false\n },\n onCancel: ({ close }) => {\n setNewCondition(condition);\n close();\n },\n onApply: ({ close }) => {\n onChange(newCondition);\n close();\n }\n };\n\n const onClear = () => {\n onChange(undefined);\n setNewCondition(condition);\n };\n\n if (flat) {\n return (\n <StyledFieldGroup\n name={fieldLabel}\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n >\n {showAdvanced ? (\n <AtomicCondition\n condition={\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']))\n }\n onChange={onChange}\n fields={fields}\n itemDirection='column'\n showLhsAsLabel\n validRhsTypes={new Set(['LITERAL'])}\n indicateErrors={false}\n />\n ) : (\n defaultControl\n )}\n </StyledFieldGroup>\n );\n }\n if (showAdvanced) {\n return (\n <CompositeInput\n dialog={dialog}\n label={fieldLabel}\n onClear={onClear}\n value={\n conditionProp ? formatCondition({ condition: conditionProp }, fields, t) : undefined\n }\n placeholder={t('all')}\n ref={ref}\n />\n );\n }\n return defaultControl;\n }\n);\n\nexport default ConditionInput;\n"]}
1
+ {"version":3,"file":"ConditionInput.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useEffect\n} from 'react';\nimport styled, { css, DefaultTheme, ThemeProps } from 'styled-components';\n\nimport {\n CompositeInput,\n CompositeInputProps,\n defaultThemeProp,\n ForwardProps,\n hasProp,\n Input,\n NumberInput,\n RadioButton,\n RadioButtonGroup,\n StyledGrid,\n useI18n,\n FieldGroup,\n StyledFieldGroupLegend,\n StyledButton,\n DateInput,\n TimeInput,\n DateTimeInput,\n useConfiguration\n} from '@pega/cosmos-react-core';\n\nimport type { Comparator, FieldType } from '../ConditionBuilder/core/types';\nimport AtomicCondition, {\n AtomicConditionProps,\n getInitConditionForLhs\n} from '../ConditionBuilder/AtomicCondition';\nimport formatCondition from '../ConditionBuilder/core/formatter';\nimport type { LeafCondition } from '../ConditionBuilder/ConditionBuilder.types';\n\nimport { ConditionFieldType, ConditionInputProps } from './ConditionInput.types';\n\nconst defaultComparators: Record<ConditionFieldType, Comparator> = {\n TEXT: 'CONTAINS',\n EMAIL: 'CONTAINS',\n URL: 'CONTAINS',\n PHONE: 'CONTAINS',\n INTEGER: 'EQ',\n DECIMAL: 'EQ',\n PERCENTAGE: 'EQ',\n CURRENCY: 'EQ',\n BOOLEAN: 'IS_TRUE',\n DATE_ONLY: 'LT',\n TIME_ONLY: 'LT',\n DATE_TIME: 'LT'\n} as const;\n\nconst basicFieldMap: Record<ConditionFieldType, FieldType> = {\n EMAIL: 'TEXT',\n URL: 'TEXT',\n PHONE: 'TEXT',\n INTEGER: 'NUMBER',\n DECIMAL: 'NUMBER',\n PERCENTAGE: 'NUMBER',\n CURRENCY: 'NUMBER',\n TEXT: 'TEXT',\n BOOLEAN: 'BOOLEAN',\n DATE_ONLY: 'DATE_ONLY',\n TIME_ONLY: 'TIME_ONLY',\n DATE_TIME: 'DATE_TIME'\n} as const;\n\nconst StyledConditionRadioGroup = styled(RadioButtonGroup)`\n ${StyledGrid} {\n display: inline-flex;\n } ;\n`;\n\nStyledConditionRadioGroup.defaultProps = defaultThemeProp;\n\nconst StyledFieldGroupLegendFn = ({\n theme: {\n base: { palette }\n }\n}: ThemeProps<DefaultTheme>) => {\n return css`\n ${StyledFieldGroupLegend} {\n border-block-start: 0.0625rem solid ${palette['border-line']};\n padding-block-start: 0.625rem;\n\n ${StyledButton} {\n border-color: transparent;\n font-weight: initial;\n }\n }\n `;\n};\n\nconst StyledFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);\n\nStyledFieldGroup.defaultProps = defaultThemeProp;\n\nconst StyledAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);\n\nStyledAtomicCondition.defaultProps = defaultThemeProp;\n\nconst ConditionInput: FunctionComponent<ConditionInputProps & ForwardProps> = forwardRef(\n (\n {\n fieldName,\n fieldType,\n condition: conditionProp,\n fieldLabel,\n mode,\n onChange,\n flat = false\n }: PropsWithoutRef<ConditionInputProps>,\n ref: ConditionInputProps['ref']\n ) => {\n const t = useI18n();\n const { locale } = useConfiguration();\n\n const basicType = basicFieldMap[fieldType] ?? fieldType;\n\n const fields: AtomicConditionProps['fields'] = [\n { id: fieldName, type: basicType, primary: fieldLabel || fieldName }\n ];\n\n const condition =\n conditionProp ??\n (fieldType === 'BOOLEAN'\n ? undefined\n : getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])));\n\n const onRadioButtonChange = (value?: boolean) => {\n const updatedCondition: LeafCondition | undefined =\n value === undefined\n ? undefined\n : {\n lhs: { field: fieldName },\n comparator: value ? 'IS_TRUE' : 'IS_FALSE'\n };\n onChange(updatedCondition);\n };\n\n const createConditionForDefaultMode = (value: string) => {\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: { value: basicType === 'NUMBER' ? Number(value) : value }\n };\n };\n\n const rhsValue =\n condition?.rhs && hasProp(condition.rhs, 'value')\n ? condition.rhs.value.toString()\n : undefined;\n\n const [inputValue, setInputValue] = useState(rhsValue);\n\n useEffect(() => {\n setInputValue(rhsValue);\n }, [conditionProp]);\n\n const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN';\n\n let defaultControl: JSX.Element | null = null;\n\n if (!showAdvanced) {\n switch (fieldType) {\n case 'INTEGER':\n case 'DECIMAL':\n case 'PERCENTAGE':\n case 'CURRENCY':\n defaultControl = (\n <NumberInput\n label={fieldLabel}\n labelHidden={flat}\n ref={ref}\n value={inputValue}\n onChange={setInputValue}\n onBlur={value => {\n onChange(createConditionForDefaultMode(value));\n }}\n numberOfDecimals={fieldType === 'INTEGER' ? 0 : undefined}\n />\n );\n break;\n case 'BOOLEAN':\n defaultControl = (\n <StyledConditionRadioGroup\n ref={ref}\n label={fieldLabel}\n labelHidden={flat}\n name={fieldName}\n inline\n >\n <RadioButton\n label={t('show_all')}\n checked={condition === undefined}\n onChange={() => onRadioButtonChange()}\n />\n <RadioButton\n label={t('boolean_display_true_label')}\n checked={condition?.comparator === 'IS_TRUE'}\n onChange={() => onRadioButtonChange(true)}\n />\n <RadioButton\n label={t('boolean_display_false_label')}\n checked={condition?.comparator === 'IS_FALSE'}\n onChange={() => onRadioButtonChange(false)}\n />\n </StyledConditionRadioGroup>\n );\n break;\n case 'DATE_ONLY':\n defaultControl = (\n <DateInput\n label={fieldLabel}\n ref={ref}\n value={inputValue}\n onChange={({ valueAsISOString }) => setInputValue(valueAsISOString)}\n onBlur={({ valueAsISOString }) => {\n onChange(createConditionForDefaultMode(valueAsISOString));\n }}\n />\n );\n break;\n case 'TIME_ONLY':\n defaultControl = (\n <TimeInput\n label={fieldLabel}\n ref={ref}\n value={inputValue || undefined}\n onChange={({ valueAsISOString }) => setInputValue(valueAsISOString)}\n onBlur={({ valueAsISOString }) => {\n onChange(createConditionForDefaultMode(valueAsISOString));\n }}\n />\n );\n break;\n case 'DATE_TIME':\n defaultControl = (\n <DateTimeInput\n label={fieldLabel}\n ref={ref}\n value={inputValue}\n onChange={({ valueAsISOString }) => setInputValue(valueAsISOString)}\n onBlur={({ valueAsISOString }) => {\n onChange(createConditionForDefaultMode(valueAsISOString));\n }}\n />\n );\n break;\n case 'TEXT':\n case 'EMAIL':\n case 'URL':\n case 'PHONE':\n default:\n defaultControl = (\n <Input\n label={fieldLabel}\n labelHidden={flat}\n ref={ref}\n value={inputValue}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setInputValue(e.target.value)}\n onBlur={(e: ChangeEvent<HTMLInputElement>) =>\n onChange(createConditionForDefaultMode(e.target.value))\n }\n />\n );\n break;\n }\n }\n\n const [newCondition, setNewCondition] = useState<LeafCondition | undefined>(condition);\n\n useEffect(() => {\n setNewCondition(condition);\n }, [conditionProp]);\n\n const dialog: CompositeInputProps<AtomicConditionProps & ForwardProps>['dialog'] = {\n renderer: AtomicCondition,\n rendererProps: {\n condition:\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])),\n fields,\n onChange: setNewCondition,\n itemDirection: 'column',\n lhsMode: 'hidden',\n validRhsTypes: new Set(['LITERAL']),\n indicateErrors: false\n },\n onCancel: ({ close }) => {\n setNewCondition(condition);\n close();\n },\n onApply: ({ close }) => {\n onChange(newCondition);\n close();\n }\n };\n\n const onClear = () => {\n onChange(undefined);\n setNewCondition(condition);\n };\n\n if (flat) {\n return showAdvanced ? (\n <StyledAtomicCondition\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n condition={\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']))\n }\n onChange={onChange}\n fields={fields}\n itemDirection='column'\n lhsMode='label'\n validRhsTypes={new Set(['LITERAL'])}\n indicateErrors={false}\n />\n ) : (\n <StyledFieldGroup\n name={fieldLabel}\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n >\n {defaultControl}\n </StyledFieldGroup>\n );\n }\n if (showAdvanced) {\n return (\n <CompositeInput\n dialog={dialog}\n label={fieldLabel}\n onClear={onClear}\n value={\n conditionProp\n ? formatCondition({ condition: conditionProp }, fields, t, {\n locale,\n omitLhs: true\n })\n : undefined\n }\n placeholder={t('all')}\n ref={ref}\n />\n );\n }\n return defaultControl;\n }\n);\n\nexport default ConditionInput;\n"]}
@@ -1,6 +1,6 @@
1
1
  import { Ref } from 'react';
2
2
  import { LeafCondition } from '../ConditionBuilder';
3
- export declare type ConditionFieldType = 'TEXT' | 'EMAIL' | 'URL' | 'PHONE' | 'INTEGER' | 'DECIMAL' | 'PERCENTAGE' | 'BOOLEAN' | 'CURRENCY';
3
+ export declare type ConditionFieldType = 'TEXT' | 'EMAIL' | 'URL' | 'PHONE' | 'INTEGER' | 'DECIMAL' | 'PERCENTAGE' | 'BOOLEAN' | 'CURRENCY' | 'DATE_ONLY' | 'TIME_ONLY' | 'DATE_TIME';
4
4
  export declare type ConditionInputMode = 'default' | 'advanced';
5
5
  export interface ConditionInputProps {
6
6
  /** Name of the field the condition is created for. */
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.types.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oBAAY,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,GACT,UAAU,CAAC;AAEf,oBAAY,kBAAkB,GAAG,SAAS,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,SAAS,EAAE,kBAAkB,CAAC;IAC9B,wEAAwE;IACxE,IAAI,EAAE,kBAAkB,CAAC;IACzB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,sCAAsC;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,qEAAqE;IACrE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
1
+ {"version":3,"file":"ConditionInput.types.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oBAAY,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,CAAC;AAEhB,oBAAY,kBAAkB,GAAG,SAAS,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,SAAS,EAAE,kBAAkB,CAAC;IAC9B,wEAAwE;IACxE,IAAI,EAAE,kBAAkB,CAAC;IACzB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,sCAAsC;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,qEAAqE;IACrE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.types.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport { LeafCondition } from '../ConditionBuilder';\n\nexport type ConditionFieldType =\n | 'TEXT'\n | 'EMAIL'\n | 'URL'\n | 'PHONE'\n | 'INTEGER'\n | 'DECIMAL'\n | 'PERCENTAGE'\n | 'BOOLEAN'\n | 'CURRENCY';\n\nexport type ConditionInputMode = 'default' | 'advanced';\n\nexport interface ConditionInputProps {\n /** Name of the field the condition is created for. */\n fieldName: string;\n /** Type of the field the condition is created for. */\n fieldType: ConditionFieldType;\n /** Display mode. Either with default comparator or the full-fledged. */\n mode: ConditionInputMode;\n /** Label for the input. */\n fieldLabel?: string;\n /** Condition value. */\n condition?: LeafCondition;\n /** Callback invoked when user changes the condition. */\n onChange: (condition?: LeafCondition) => void;\n /** Reference to the input element. */\n ref?: Ref<HTMLInputElement>;\n /** Whether advanced view should be wrapped in popup or just flat. */\n flat?: boolean;\n}\n"]}
1
+ {"version":3,"file":"ConditionInput.types.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport { LeafCondition } from '../ConditionBuilder';\n\nexport type ConditionFieldType =\n | 'TEXT'\n | 'EMAIL'\n | 'URL'\n | 'PHONE'\n | 'INTEGER'\n | 'DECIMAL'\n | 'PERCENTAGE'\n | 'BOOLEAN'\n | 'CURRENCY'\n | 'DATE_ONLY'\n | 'TIME_ONLY'\n | 'DATE_TIME';\n\nexport type ConditionInputMode = 'default' | 'advanced';\n\nexport interface ConditionInputProps {\n /** Name of the field the condition is created for. */\n fieldName: string;\n /** Type of the field the condition is created for. */\n fieldType: ConditionFieldType;\n /** Display mode. Either with default comparator or the full-fledged. */\n mode: ConditionInputMode;\n /** Label for the input. */\n fieldLabel?: string;\n /** Condition value. */\n condition?: LeafCondition;\n /** Callback invoked when user changes the condition. */\n onChange: (condition?: LeafCondition) => void;\n /** Reference to the input element. */\n ref?: Ref<HTMLInputElement>;\n /** Whether advanced view should be wrapped in popup or just flat. */\n flat?: boolean;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pega/cosmos-react-condition-builder",
3
- "version": "3.0.0-dev.17.0",
3
+ "version": "3.0.0-dev.18.0",
4
4
  "author": "Pegasystems",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {
@@ -23,7 +23,7 @@
23
23
  "build": "tsc -b"
24
24
  },
25
25
  "dependencies": {
26
- "@pega/cosmos-react-core": "3.0.0-dev.17.0",
26
+ "@pega/cosmos-react-core": "3.0.0-dev.18.0",
27
27
  "@types/react": "^16.14.24 || ^17.0.38",
28
28
  "@types/react-dom": "^16.9.14 || ^17.0.11",
29
29
  "@types/styled-components": "^5.1.7",