@pega/cosmos-react-condition-builder 2.0.0-dev.9.2 → 2.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
  2. package/lib/components/ConditionBuilder/AtomicCondition.js +10 -16
  3. package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
  4. package/lib/components/ConditionBuilder/ConditionBuilder.js +4 -12
  5. package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
  6. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +15 -4
  7. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
  8. package/lib/components/ConditionBuilder/ConditionBuilder.types.js.map +1 -1
  9. package/lib/components/ConditionBuilder/FieldCondition.js +1 -2
  10. package/lib/components/ConditionBuilder/FieldCondition.js.map +1 -1
  11. package/lib/components/ConditionBuilder/HelpButton.js +1 -2
  12. package/lib/components/ConditionBuilder/HelpButton.js.map +1 -1
  13. package/lib/components/ConditionBuilder/{TimePeriodMenu.d.ts → RhsControls/DateFunctionMenu.d.ts} +7 -7
  14. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.d.ts.map +1 -0
  15. package/lib/components/ConditionBuilder/{TimePeriodMenu.js → RhsControls/DateFunctionMenu.js} +36 -14
  16. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.js.map +1 -0
  17. package/lib/components/ConditionBuilder/{FieldSelector.d.ts → RhsControls/FieldSelector.d.ts} +3 -3
  18. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.d.ts.map +1 -0
  19. package/lib/components/ConditionBuilder/{FieldSelector.js → RhsControls/FieldSelector.js} +2 -3
  20. package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js.map +1 -0
  21. package/lib/components/ConditionBuilder/{MultiValueSelector.d.ts → RhsControls/MultiValueSelector.d.ts} +2 -3
  22. package/lib/components/ConditionBuilder/RhsControls/MultiValueSelector.d.ts.map +1 -0
  23. package/lib/components/ConditionBuilder/RhsControls/MultiValueSelector.js +43 -0
  24. package/lib/components/ConditionBuilder/RhsControls/MultiValueSelector.js.map +1 -0
  25. package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts +18 -0
  26. package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts.map +1 -0
  27. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js +19 -0
  28. package/lib/components/ConditionBuilder/RhsControls/NumericInput.js.map +1 -0
  29. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.d.ts +18 -0
  30. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.d.ts.map +1 -0
  31. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.js +109 -0
  32. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.js.map +1 -0
  33. package/lib/components/ConditionBuilder/{RhsModeSwitch.d.ts → RhsControls/RhsModeSwitch.d.ts} +4 -4
  34. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.d.ts.map +1 -0
  35. package/lib/components/ConditionBuilder/{RhsModeSwitch.js → RhsControls/RhsModeSwitch.js} +35 -13
  36. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js.map +1 -0
  37. package/lib/components/ConditionBuilder/{TimePeriodInput.d.ts → RhsControls/TimePeriodInput.d.ts} +1 -0
  38. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.d.ts.map +1 -0
  39. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js +89 -0
  40. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js.map +1 -0
  41. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.d.ts +20 -0
  42. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.d.ts.map +1 -0
  43. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.js +11 -0
  44. package/lib/components/ConditionBuilder/RhsControls/TimePeriodMenu.js.map +1 -0
  45. package/lib/components/ConditionBuilder/{RhsControls.d.ts → RhsControls/index.d.ts} +3 -3
  46. package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -0
  47. package/lib/components/ConditionBuilder/{RhsControls.js → RhsControls/index.js} +29 -35
  48. package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -0
  49. package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
  50. package/lib/components/ConditionBuilder/core/evaluator.js +50 -12
  51. package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
  52. package/lib/components/ConditionBuilder/core/extendDayJs.d.ts +2 -0
  53. package/lib/components/ConditionBuilder/core/extendDayJs.d.ts.map +1 -0
  54. package/lib/components/ConditionBuilder/core/extendDayJs.js +4 -0
  55. package/lib/components/ConditionBuilder/core/extendDayJs.js.map +1 -0
  56. package/lib/components/ConditionBuilder/core/formatter.d.ts +5 -1
  57. package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
  58. package/lib/components/ConditionBuilder/core/formatter.js +42 -12
  59. package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
  60. package/lib/components/ConditionBuilder/core/transformer.d.ts +7 -0
  61. package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -0
  62. package/lib/components/ConditionBuilder/core/transformer.js +154 -0
  63. package/lib/components/ConditionBuilder/core/transformer.js.map +1 -0
  64. package/lib/components/ConditionBuilder/core/types.d.ts +6 -2
  65. package/lib/components/ConditionBuilder/core/types.d.ts.map +1 -1
  66. package/lib/components/ConditionBuilder/core/types.js.map +1 -1
  67. package/lib/components/ConditionBuilder/core/utils.d.ts.map +1 -1
  68. package/lib/components/ConditionBuilder/core/utils.js +4 -8
  69. package/lib/components/ConditionBuilder/core/utils.js.map +1 -1
  70. package/lib/components/ConditionBuilder/index.d.ts +2 -1
  71. package/lib/components/ConditionBuilder/index.d.ts.map +1 -1
  72. package/lib/components/ConditionBuilder/index.js +2 -1
  73. package/lib/components/ConditionBuilder/index.js.map +1 -1
  74. package/package.json +15 -13
  75. package/lib/components/ConditionBuilder/FieldSelector.d.ts.map +0 -1
  76. package/lib/components/ConditionBuilder/FieldSelector.js.map +0 -1
  77. package/lib/components/ConditionBuilder/MultiValueSelector.d.ts.map +0 -1
  78. package/lib/components/ConditionBuilder/MultiValueSelector.js +0 -72
  79. package/lib/components/ConditionBuilder/MultiValueSelector.js.map +0 -1
  80. package/lib/components/ConditionBuilder/RhsControls.d.ts.map +0 -1
  81. package/lib/components/ConditionBuilder/RhsControls.js.map +0 -1
  82. package/lib/components/ConditionBuilder/RhsModeSwitch.d.ts.map +0 -1
  83. package/lib/components/ConditionBuilder/RhsModeSwitch.js.map +0 -1
  84. package/lib/components/ConditionBuilder/TimePeriodInput.d.ts.map +0 -1
  85. package/lib/components/ConditionBuilder/TimePeriodInput.js +0 -72
  86. package/lib/components/ConditionBuilder/TimePeriodInput.js.map +0 -1
  87. package/lib/components/ConditionBuilder/TimePeriodMenu.d.ts.map +0 -1
  88. package/lib/components/ConditionBuilder/TimePeriodMenu.js.map +0 -1
@@ -1,16 +1,16 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  // cspell:ignore words DDTHH
3
3
  import { useMemo } from 'react';
4
- import { Flex, Select, Option, MonthInput, WeekInput, DateInput, DateTimeInput, NumberInput, DayOfWeekInput, useI18n } from '@pega/cosmos-react-core';
4
+ import { Select, Option, MonthInput, WeekInput, DateInput, DateTimeInput, NumberInput, DayOfWeekInput, useI18n, useConfiguration, QuarterInput, range } from '@pega/cosmos-react-core';
5
5
  /**
6
6
  * Formats the input date string to match the spec expected for the given date function
7
7
  * NOTE: This assumes that the input date is set up on the UTC timezone
8
8
  * SPEC:
9
+ * - QUARTERS: First day of quarter as YYYY-MM-DD
9
10
  * - MONTHS: First day of month as YYYY-MM-DD
10
11
  * - WEEKS: First day of week as YYYY-MM-DD
11
12
  * - DAYS: Date as YYYY-MM-DD
12
13
  * - HOURS: YYYY-MM-DDTHH:mm:ss
13
- * TODO: Enable YEARS/QUARTERS/MONTHS_OF_YEAR
14
14
  */
15
15
  function formatDateFunctionValue(isoDateString, dateFunction) {
16
16
  const date = new Date(isoDateString);
@@ -19,6 +19,7 @@ function formatDateFunctionValue(isoDateString, dateFunction) {
19
19
  const DD = date.getUTCDate().toString().padStart(2, '0');
20
20
  const HH = date.getUTCHours().toString().padStart(2, '0');
21
21
  switch (dateFunction) {
22
+ case 'QUARTERS':
22
23
  case 'MONTHS':
23
24
  return `${YYYY}-${MM}-01`;
24
25
  case 'WEEKS':
@@ -29,17 +30,20 @@ function formatDateFunctionValue(isoDateString, dateFunction) {
29
30
  }
30
31
  }
31
32
  /** A menu with controls to select a Time period value on RHS */
32
- const TimePeriodMenu = (props) => {
33
+ const DateFunctionMenu = (props) => {
33
34
  const { rhs, onChange, dateFunctionsList, status } = props;
35
+ const { locale } = useConfiguration();
34
36
  const t = useI18n();
35
37
  // Options for the Date-function selector
36
38
  const dateFunctionOptions = useMemo(() => {
37
39
  const dateFunctionLabels = {
38
- // TODO: Enable YEARS/QUARTERS/MONTHS_OF_YEAR
40
+ YEARS: t('condition_builder_date_function_year'),
41
+ QUARTERS: t('condition_builder_date_function_quarter'),
39
42
  MONTHS: t('condition_builder_date_function_month'),
40
43
  WEEKS: t('condition_builder_date_function_week'),
41
44
  DAYS: t('condition_builder_date_function_day'),
42
45
  HOURS: t('condition_builder_date_function_hour'),
46
+ MONTHS_OF_YEAR: t('condition_builder_date_function_month_of_year'),
43
47
  DAYS_OF_MONTH: t('condition_builder_date_function_day_of_month'),
44
48
  DAYS_OF_WEEK: t('condition_builder_date_function_day_of_week')
45
49
  };
@@ -57,6 +61,7 @@ const TimePeriodMenu = (props) => {
57
61
  status,
58
62
  info: status ? t('condition_builder_invalid_value') : undefined
59
63
  };
64
+ // Props for all functions that use a component from the DateTime package
60
65
  const dateComponentProps = {
61
66
  ...valueComponentProps,
62
67
  onChange: ({ valueAsISOString, valueAsTimestamp, state }) => {
@@ -67,6 +72,28 @@ const TimePeriodMenu = (props) => {
67
72
  onChange({ ...rhs, value: formatDateFunctionValue(valueAsISOString, rhs.dateFunction) });
68
73
  }
69
74
  };
75
+ // YEARS
76
+ const yearOptions = useMemo(() => {
77
+ const currentYear = new Date().getFullYear();
78
+ const years = range(currentYear - 10, currentYear + 10);
79
+ return years.map(year => ({
80
+ id: `${year}-01-01`,
81
+ label: new Date(year, 0, 1).toLocaleString(locale, { year: 'numeric' })
82
+ }));
83
+ }, [locale]);
84
+ const onYearChange = (e) => {
85
+ onChange({ ...rhs, value: e.target.value });
86
+ };
87
+ // MONTHS_OF_YEAR
88
+ const monthOfYearOptions = useMemo(() => range(1, 12).map(n => ({
89
+ id: `${n}`,
90
+ label: new Date(2021, n - 1, 1).toLocaleString(locale, { month: 'long' })
91
+ })), [locale]);
92
+ const onMonthOfYearChange = (e) => {
93
+ const value = e.target.value ? Number(e.target.value) : '';
94
+ onChange({ ...rhs, value });
95
+ };
96
+ // DAYS_OF_MONTH
70
97
  const onDayOfMonthChange = (value) => {
71
98
  let newValue = value;
72
99
  if (newValue !== '') {
@@ -78,16 +105,11 @@ const TimePeriodMenu = (props) => {
78
105
  }
79
106
  onChange({ ...rhs, value: newValue });
80
107
  };
108
+ // DAYS_OF_WEEK
81
109
  const onDayOfWeekChange = (value) => {
82
110
  onChange({ ...rhs, value });
83
111
  };
84
- return (_jsxs(Flex, Object.assign({ container: { direction: 'column', rowGap: 0.5 }, item: { grow: 1 } }, { children: [_jsx(Select, Object.assign({ label: t('condition_builder_date_part_label'), value: rhs.dateFunction, onChange: handleDatePartChange }, { children: dateFunctionOptions.map(o => (_jsx(Option, Object.assign({ value: o.id }, { children: o.label }), o.id))) }), void 0),
85
- rhs.dateFunction === 'MONTHS' && _jsx(MonthInput, Object.assign({}, dateComponentProps), void 0),
86
- rhs.dateFunction === 'WEEKS' && _jsx(WeekInput, Object.assign({}, dateComponentProps), void 0),
87
- rhs.dateFunction === 'DAYS' && _jsx(DateInput, Object.assign({}, dateComponentProps), void 0),
88
- rhs.dateFunction === 'HOURS' && (_jsx(DateTimeInput, Object.assign({}, dateComponentProps, { pickerInterval: 60 }), void 0)),
89
- rhs.dateFunction === 'DAYS_OF_MONTH' && (_jsx(NumberInput, Object.assign({}, valueComponentProps, { placeholder: '1 - 31', min: 1, max: 31, step: 1, showDecimal: false, onChange: onDayOfMonthChange }), void 0)),
90
- rhs.dateFunction === 'DAYS_OF_WEEK' && (_jsx(DayOfWeekInput, Object.assign({}, valueComponentProps, { value: rhs.value, onChange: onDayOfWeekChange }), void 0))] }), void 0));
112
+ return (_jsxs(_Fragment, { children: [_jsx(Select, { label: t('condition_builder_date_part'), value: rhs.dateFunction, onChange: handleDatePartChange, children: dateFunctionOptions.map(o => (_jsx(Option, { value: o.id, children: o.label }, o.id))) }, void 0), rhs.dateFunction === 'YEARS' && (_jsxs(Select, { ...valueComponentProps, onChange: onYearChange, name: 'year-selector', children: [_jsx(Option, { children: " " }, void 0), yearOptions.map(o => (_jsx(Option, { value: o.id, children: o.label }, o.id)))] }, void 0)), rhs.dateFunction === 'QUARTERS' && _jsx(QuarterInput, { ...dateComponentProps }, void 0), rhs.dateFunction === 'MONTHS' && _jsx(MonthInput, { ...dateComponentProps }, void 0), rhs.dateFunction === 'WEEKS' && _jsx(WeekInput, { ...dateComponentProps }, void 0), rhs.dateFunction === 'DAYS' && _jsx(DateInput, { ...dateComponentProps }, void 0), rhs.dateFunction === 'HOURS' && (_jsx(DateTimeInput, { ...dateComponentProps, pickerInterval: 60 }, void 0)), rhs.dateFunction === 'MONTHS_OF_YEAR' && (_jsxs(Select, { ...valueComponentProps, onChange: onMonthOfYearChange, name: 'month-of-year-selector', children: [_jsx(Option, { children: " " }, void 0), monthOfYearOptions.map(o => (_jsx(Option, { value: o.id, children: o.label }, o.id)))] }, void 0)), rhs.dateFunction === 'DAYS_OF_MONTH' && (_jsx(NumberInput, { ...valueComponentProps, placeholder: '1 - 31', min: 1, max: 31, step: 1, showDecimal: false, onChange: onDayOfMonthChange }, void 0)), rhs.dateFunction === 'DAYS_OF_WEEK' && (_jsx(DayOfWeekInput, { ...valueComponentProps, value: rhs.value, onChange: onDayOfWeekChange }, void 0))] }, void 0));
91
113
  };
92
- export default TimePeriodMenu;
93
- //# sourceMappingURL=TimePeriodMenu.js.map
114
+ export default DateFunctionMenu;
115
+ //# sourceMappingURL=DateFunctionMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateFunctionMenu.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/DateFunctionMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["// cspell:ignore words DDTHH\nimport { ChangeEvent, FunctionComponent, useMemo } from 'react';\n\nimport {\n BaseProps,\n ForwardProps,\n Select,\n Option,\n MonthInput,\n WeekInput,\n DateInput,\n DateTimeInput,\n NumberInput,\n FormControlProps,\n DayOfWeekInput,\n useI18n,\n useConfiguration,\n QuarterInput,\n range,\n NoChildrenProp\n} from '@pega/cosmos-react-core';\nimport DateTimeProps, {\n DateTimeCallbackParameter\n} from '@pega/cosmos-react-core/lib/components/DateTime/DateTime.types';\nimport { DayOfWeek } from '@pega/cosmos-react-core/lib/components/DateTime/Input/DayOfWeekInput';\n\nimport { RhsWithDateFunction } from '../ConditionBuilder.types';\nimport { DateFunction } from '../core/types';\n\n/**\n * Formats the input date string to match the spec expected for the given date function\n * NOTE: This assumes that the input date is set up on the UTC timezone\n * SPEC:\n * - QUARTERS: First day of quarter as YYYY-MM-DD\n * - MONTHS: First day of month as YYYY-MM-DD\n * - WEEKS: First day of week as YYYY-MM-DD\n * - DAYS: Date as YYYY-MM-DD\n * - HOURS: YYYY-MM-DDTHH:mm:ss\n */\nfunction formatDateFunctionValue(isoDateString: string, dateFunction: DateFunction): string {\n const date = new Date(isoDateString);\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 const HH = date.getUTCHours().toString().padStart(2, '0');\n\n switch (dateFunction) {\n case 'QUARTERS':\n case 'MONTHS':\n return `${YYYY}-${MM}-01`;\n case 'WEEKS':\n case 'DAYS':\n return `${YYYY}-${MM}-${DD}`;\n default:\n return `${YYYY}-${MM}-${DD}T${HH}:00:00`; // HOURS\n }\n}\n\nexport interface DateFunctionMenuProps extends BaseProps, NoChildrenProp {\n /** Rhs for the condition */\n rhs: RhsWithDateFunction;\n\n /** Callback for any modifications to the Rhs */\n onChange: (rhs: RhsWithDateFunction) => void;\n\n /** List of date functions enabled for the current LHS field type */\n dateFunctionsList: DateFunction[];\n\n /** Used to indicate any errors on the control */\n status?: 'error';\n}\n\n/** A menu with controls to select a Time period value on RHS */\nconst DateFunctionMenu: FunctionComponent<DateFunctionMenuProps & ForwardProps> = (\n props: DateFunctionMenuProps\n) => {\n const { rhs, onChange, dateFunctionsList, status } = props;\n const { locale } = useConfiguration();\n const t = useI18n();\n\n // Options for the Date-function selector\n const dateFunctionOptions = useMemo(() => {\n const dateFunctionLabels: Record<DateFunction, string> = {\n YEARS: t('condition_builder_date_function_year'),\n QUARTERS: t('condition_builder_date_function_quarter'),\n MONTHS: t('condition_builder_date_function_month'),\n WEEKS: t('condition_builder_date_function_week'),\n DAYS: t('condition_builder_date_function_day'),\n HOURS: t('condition_builder_date_function_hour'),\n MONTHS_OF_YEAR: t('condition_builder_date_function_month_of_year'),\n DAYS_OF_MONTH: t('condition_builder_date_function_day_of_month'),\n DAYS_OF_WEEK: t('condition_builder_date_function_day_of_week')\n };\n\n return dateFunctionsList.map(func => ({ id: func, label: dateFunctionLabels[func] }));\n }, [dateFunctionsList, t]);\n\n // Handle changes to the Date-function selector\n const handleDatePartChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const selection = e.target.value as DateFunction;\n onChange({ dateFunction: selection, value: '' });\n };\n\n // Common props for all value controls\n const valueComponentProps: FormControlProps = {\n value: rhs.value === '' ? undefined : rhs.value.toString(),\n label: t('condition_builder_value_label'),\n status,\n info: status ? t('condition_builder_invalid_value') : undefined\n };\n\n // Props for all functions that use a component from the DateTime package\n const dateComponentProps: DateTimeProps = {\n ...valueComponentProps,\n onChange: ({ valueAsISOString, valueAsTimestamp, state }: DateTimeCallbackParameter) => {\n // NOTE: Not relying fully on `state` since in some cases state and valueAsTimestamp are both undefined\n if (valueAsTimestamp === undefined || state === 'incomplete' || state === 'invalid') return;\n\n // Format the value as per spec and return\n onChange({ ...rhs, value: formatDateFunctionValue(valueAsISOString, rhs.dateFunction) });\n }\n };\n\n // YEARS\n const yearOptions = useMemo(() => {\n const currentYear = new Date().getFullYear();\n const years = range(currentYear - 10, currentYear + 10);\n return years.map(year => ({\n id: `${year}-01-01`,\n label: new Date(year, 0, 1).toLocaleString(locale, { year: 'numeric' })\n }));\n }, [locale]);\n const onYearChange = (e: ChangeEvent<HTMLSelectElement>) => {\n onChange({ ...rhs, value: e.target.value });\n };\n\n // MONTHS_OF_YEAR\n const monthOfYearOptions = useMemo(\n () =>\n range(1, 12).map(n => ({\n id: `${n}`,\n label: new Date(2021, n - 1, 1).toLocaleString(locale, { month: 'long' })\n })),\n [locale]\n );\n const onMonthOfYearChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const value = e.target.value ? Number(e.target.value) : '';\n onChange({ ...rhs, value });\n };\n\n // DAYS_OF_MONTH\n const onDayOfMonthChange = (value: string) => {\n let newValue: string | number = value;\n if (newValue !== '') {\n newValue = Number(newValue);\n if (newValue > 31) newValue = 31;\n if (newValue < 1) newValue = 1;\n }\n onChange({ ...rhs, value: newValue });\n };\n\n // DAYS_OF_WEEK\n const onDayOfWeekChange = (value: DayOfWeek) => {\n onChange({ ...rhs, value });\n };\n\n return (\n <>\n {/* Date function selector */}\n <Select\n label={t('condition_builder_date_part')}\n value={rhs.dateFunction}\n onChange={handleDatePartChange}\n >\n {dateFunctionOptions.map(o => (\n <Option key={o.id} value={o.id}>\n {o.label}\n </Option>\n ))}\n </Select>\n\n {rhs.dateFunction === 'YEARS' && (\n <Select {...valueComponentProps} onChange={onYearChange} name='year-selector'>\n <Option> </Option>\n {yearOptions.map(o => (\n <Option key={o.id} value={o.id}>\n {o.label}\n </Option>\n ))}\n </Select>\n )}\n {rhs.dateFunction === 'QUARTERS' && <QuarterInput {...dateComponentProps} />}\n {rhs.dateFunction === 'MONTHS' && <MonthInput {...dateComponentProps} />}\n {rhs.dateFunction === 'WEEKS' && <WeekInput {...dateComponentProps} />}\n {rhs.dateFunction === 'DAYS' && <DateInput {...dateComponentProps} />}\n {rhs.dateFunction === 'HOURS' && (\n <DateTimeInput {...dateComponentProps} pickerInterval={60} />\n )}\n {rhs.dateFunction === 'MONTHS_OF_YEAR' && (\n <Select\n {...valueComponentProps}\n onChange={onMonthOfYearChange}\n name='month-of-year-selector'\n >\n <Option> </Option>\n {monthOfYearOptions.map(o => (\n <Option key={o.id} value={o.id}>\n {o.label}\n </Option>\n ))}\n </Select>\n )}\n {rhs.dateFunction === 'DAYS_OF_MONTH' && (\n <NumberInput\n {...valueComponentProps}\n placeholder='1 - 31'\n min={1}\n max={31}\n step={1}\n showDecimal={false}\n onChange={onDayOfMonthChange}\n />\n )}\n {rhs.dateFunction === 'DAYS_OF_WEEK' && (\n <DayOfWeekInput\n {...valueComponentProps}\n value={rhs.value as DayOfWeek}\n onChange={onDayOfWeekChange}\n />\n )}\n </>\n );\n};\n\nexport default DateFunctionMenu;\n"]}
@@ -1,7 +1,7 @@
1
1
  import { FunctionComponent } from 'react';
2
- import { BaseProps, ForwardProps, FormControlProps } from '@pega/cosmos-react-core';
3
- import { Field } from './ConditionBuilder.types';
4
- interface FieldSelectorProps extends BaseProps {
2
+ import { BaseProps, ForwardProps, FormControlProps, NoChildrenProp } from '@pega/cosmos-react-core';
3
+ import { Field } from '../ConditionBuilder.types';
4
+ interface FieldSelectorProps extends BaseProps, NoChildrenProp {
5
5
  /** Current selection */
6
6
  value: string;
7
7
  /** Change handler */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/FieldSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,iBAAiB,EAAqB,MAAM,OAAO,CAAC;AAE1E,OAAO,EAIL,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AA4BlD,UAAU,kBAAmB,SAAQ,SAAS,EAAE,cAAc;IAC5D,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IAEd,qBAAqB;IACrB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,kEAAkE;IAClE,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEpC,4BAA4B;IAC5B,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACjC;AAED,+EAA+E;AAC/E,QAAA,MAAM,aAAa,EAAE,iBAAiB,CAAC,kBAAkB,GAAG,YAAY,CAwDvE,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -6,10 +6,9 @@ function getMenuItemsFromFields(fields, selection) {
6
6
  const items = [];
7
7
  const itemsByGroupLabel = {};
8
8
  fields.forEach(field => {
9
- var _a;
10
9
  const item = {
11
10
  id: field.name,
12
- primary: (_a = field.label) !== null && _a !== void 0 ? _a : field.name,
11
+ primary: field.label ?? field.name,
13
12
  selected: field.name === selection // set Selected field to selection
14
13
  };
15
14
  if (field.groupLabel) {
@@ -48,7 +47,7 @@ const FieldSelector = (props) => {
48
47
  ? menuHelpers.flatten(items).filter(({ primary }) => filterRegex.test(primary))
49
48
  : items;
50
49
  }, [filterRegex, items]);
51
- return (_jsx(ComboBox, { label: 'field', labelHidden: true, status: status, info: info, placeholder: 'Select...', mode: 'single-select', value: filterValue, onChange: (ev) => {
50
+ return (_jsx(ComboBox, { label: 'field', labelHidden: true, status: status, info: info, placeholder: 'Select\u2026', mode: 'single-select', value: filterValue, onChange: (ev) => {
52
51
  setFilterValue(ev.target.value);
53
52
  if (!ev.target.value)
54
53
  onChange('');
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldSelector.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/FieldSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ChangeEvent, FunctionComponent, useMemo, useState } from 'react';\n\nimport {\n ComboBox,\n MenuProps,\n menuHelpers,\n BaseProps,\n ForwardProps,\n FormControlProps,\n NoChildrenProp\n} from '@pega/cosmos-react-core';\nimport { Selected } from '@pega/cosmos-react-core/lib/components/ComboBox/ComboBox.types';\n\nimport { Field } from '../ConditionBuilder.types';\n\n/** Convert input Fields to use as ComboBox options */\nfunction getMenuItemsFromFields(fields: Field[], selection: string): MenuProps['items'] {\n const items: MenuProps['items'] = [];\n const itemsByGroupLabel: { [label: string]: MenuProps['items'] } = {};\n\n fields.forEach(field => {\n const item = {\n id: field.name,\n primary: field.label ?? field.name, // field.label is optional\n selected: field.name === selection // set Selected field to selection\n };\n if (field.groupLabel) {\n itemsByGroupLabel[field.groupLabel] = itemsByGroupLabel[field.groupLabel] || [];\n itemsByGroupLabel[field.groupLabel].push(item);\n } else {\n items.push(item);\n }\n });\n\n Object.entries(itemsByGroupLabel).forEach(([label, childItems]) => {\n items.push({ id: label, primary: label, items: childItems });\n });\n\n return items;\n}\n\ninterface FieldSelectorProps extends BaseProps, NoChildrenProp {\n /** Current selection */\n value: string;\n\n /** Change handler */\n onChange: (selection: string) => void;\n\n /** Metadata (data-model) for the Fields to use in the selector */\n fields: Field[];\n\n /** Status for the ComboBox */\n status?: FormControlProps['status'];\n\n /** Info for the ComboBox */\n info?: FormControlProps['info'];\n}\n\n/** Sets up a ComboBox to select a Field. Handles grouping and autocomplete. */\nconst FieldSelector: FunctionComponent<FieldSelectorProps & ForwardProps> = (\n props: FieldSelectorProps\n) => {\n const { value, onChange, fields, status, info } = props;\n\n // Determine ComboBox menu items from the fields\n const items = useMemo(() => getMenuItemsFromFields(fields, value), [fields, value]);\n const selected: Selected | undefined = useMemo(() => {\n const selectedItem = menuHelpers.getItem(items, value);\n return selectedItem ? { id: selectedItem.id, text: selectedItem.primary } : undefined;\n }, [items]);\n\n // Set up autocomplete input\n const [filterValue, setFilterValue] = useState<string>(''); // NOTE: `''` is needed to show the current selection\n const filterRegex = useMemo(() => {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping\n // Literal string match from input, not user regex input.\n return filterValue\n ? new RegExp(filterValue.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&'), 'i')\n : undefined;\n }, [filterValue]);\n\n const filteredItems = useMemo(() => {\n return filterRegex\n ? menuHelpers.flatten(items).filter(({ primary }) => filterRegex.test(primary))\n : items;\n }, [filterRegex, items]);\n\n return (\n <ComboBox\n label='field'\n labelHidden\n status={status}\n info={info}\n placeholder='Select…'\n mode='single-select'\n value={filterValue}\n onChange={(ev: ChangeEvent<HTMLInputElement>) => {\n setFilterValue(ev.target.value);\n if (!ev.target.value) onChange('');\n }}\n onBlur={() => {\n setFilterValue('');\n }}\n selected={{ items: selected }}\n menu={{\n items: filteredItems,\n mode: 'single-select',\n accent: filterRegex,\n onItemClick: id => {\n onChange(id);\n setFilterValue(''); // To show the selected value in the input\n }\n }}\n />\n );\n};\n\nexport default FieldSelector;\n"]}
@@ -1,7 +1,6 @@
1
1
  import { FunctionComponent } from 'react';
2
- import { BaseProps, ForwardProps } from '@pega/cosmos-react-core';
3
- export declare const StyledOpenerButton: import("styled-components").StyledComponent<FunctionComponent<import("@pega/cosmos-react-core").ButtonProps & ForwardProps>, import("styled-components").DefaultTheme, {}, never>;
4
- interface MultiSelectorProps extends BaseProps {
2
+ import { BaseProps, ForwardProps, NoChildrenProp } from '@pega/cosmos-react-core';
3
+ interface MultiSelectorProps extends BaseProps, NoChildrenProp {
5
4
  /** Previous selection */
6
5
  values: string[];
7
6
  /** Options for the selector */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiValueSelector.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/MultiValueSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAqB,MAAM,OAAO,CAAC;AAE7D,OAAO,EAEL,SAAS,EACT,YAAY,EAIZ,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,UAAU,kBAAmB,SAAQ,SAAS,EAAE,cAAc;IAC5D,yBAAyB;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,2BAA2B;IAC3B,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAExC,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,6EAA6E;AAC7E,QAAA,MAAM,kBAAkB,EAAE,iBAAiB,CAAC,kBAAkB,GAAG,YAAY,CAgE5E,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useMemo } from 'react';
3
+ import { useI18n, ComboBox, createStringMatcher, useAfterInitialEffect } from '@pega/cosmos-react-core';
4
+ /** A control for selecting multiple values using checkboxes in an overlay */
5
+ const MultiValueSelector = ({ values, options, onChange, status }) => {
6
+ const t = useI18n();
7
+ const [selections, setSelections] = useState(values);
8
+ const [filterValue, setFilterValue] = useState('');
9
+ const itemsToRender = useMemo(() => {
10
+ let opts = options;
11
+ if (filterValue) {
12
+ const matcher = createStringMatcher(filterValue, 'boundary');
13
+ opts = opts.filter(opt => matcher.test(opt));
14
+ }
15
+ return opts.map(option => {
16
+ return {
17
+ id: option,
18
+ primary: option,
19
+ selected: selections.includes(option)
20
+ };
21
+ });
22
+ }, [options, filterValue, selections]);
23
+ useAfterInitialEffect(() => {
24
+ onChange(selections);
25
+ }, [selections]);
26
+ return (_jsx(ComboBox, { mode: 'multi-select', label: t('condition_builder_possible_values_label'), labelHidden: true, placeholder: t('condition_builder_selection_text_default'), value: filterValue, onChange: e => {
27
+ setFilterValue(e.target.value);
28
+ }, menu: {
29
+ items: itemsToRender,
30
+ onItemClick: option => {
31
+ setSelections(cur => cur.includes(option) ? cur.filter(selection => selection !== option) : [...cur, option]);
32
+ }
33
+ }, selected: selections.length > 0
34
+ ? {
35
+ items: selections.map(s => ({ id: s, text: s })),
36
+ onRemove: value => {
37
+ setSelections(cur => cur.filter(selection => selection !== value));
38
+ }
39
+ }
40
+ : undefined, status: status, info: status === 'error' ? t('condition_builder_empty_selection_error_text') : undefined }, void 0));
41
+ };
42
+ export default MultiValueSelector;
43
+ //# sourceMappingURL=MultiValueSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiValueSelector.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/MultiValueSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FunctionComponent, useState, useMemo } from 'react';\n\nimport {\n useI18n,\n BaseProps,\n ForwardProps,\n ComboBox,\n createStringMatcher,\n useAfterInitialEffect,\n NoChildrenProp\n} from '@pega/cosmos-react-core';\n\ninterface MultiSelectorProps extends BaseProps, NoChildrenProp {\n /** Previous selection */\n values: string[];\n\n /** Options for the selector */\n options: string[];\n\n /** Callback for changes */\n onChange: (selection: string[]) => void;\n\n /** Used to indicate any errors on the control */\n status?: 'error';\n}\n\n/** A control for selecting multiple values using checkboxes in an overlay */\nconst MultiValueSelector: FunctionComponent<MultiSelectorProps & ForwardProps> = ({\n values,\n options,\n onChange,\n status\n}: MultiSelectorProps) => {\n const t = useI18n();\n\n const [selections, setSelections] = useState(values);\n const [filterValue, setFilterValue] = useState('');\n\n const itemsToRender = useMemo(() => {\n let opts = options;\n\n if (filterValue) {\n const matcher = createStringMatcher(filterValue, 'boundary');\n opts = opts.filter(opt => matcher.test(opt));\n }\n\n return opts.map(option => {\n return {\n id: option,\n primary: option,\n selected: selections.includes(option)\n };\n });\n }, [options, filterValue, selections]);\n\n useAfterInitialEffect(() => {\n onChange(selections);\n }, [selections]);\n\n return (\n <ComboBox\n mode='multi-select'\n label={t('condition_builder_possible_values_label')}\n labelHidden\n placeholder={t('condition_builder_selection_text_default')}\n value={filterValue}\n onChange={e => {\n setFilterValue(e.target.value);\n }}\n menu={{\n items: itemsToRender,\n onItemClick: option => {\n setSelections(cur =>\n cur.includes(option) ? cur.filter(selection => selection !== option) : [...cur, option]\n );\n }\n }}\n selected={\n selections.length > 0\n ? {\n items: selections.map(s => ({ id: s, text: s })),\n onRemove: value => {\n setSelections(cur => cur.filter(selection => selection !== value));\n }\n }\n : undefined\n }\n status={status}\n info={status === 'error' ? t('condition_builder_empty_selection_error_text') : undefined}\n />\n );\n};\n\nexport default MultiValueSelector;\n"]}
@@ -0,0 +1,18 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { BaseProps, NoChildrenProp } from '@pega/cosmos-react-core';
3
+ interface NumericInputProps extends BaseProps, NoChildrenProp {
4
+ /** Rhs for the condition */
5
+ rhs: {
6
+ value: string | number;
7
+ };
8
+ /** Callback for any modifications to the Rhs */
9
+ onChange: (rhs: {
10
+ value: string | number;
11
+ }) => void;
12
+ /** Used to indicate any errors on the control */
13
+ status?: 'error';
14
+ }
15
+ /** Wrapper over the NumberInput to parse values as Numbers, while still allowing the user to type partial values like `12.`, `12.0`, ... */
16
+ declare const NumericInput: FunctionComponent<NumericInputProps>;
17
+ export default NumericInput;
18
+ //# sourceMappingURL=NumericInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumericInput.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/NumericInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAY,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAwB,MAAM,yBAAyB,CAAC;AAE1F,UAAU,iBAAkB,SAAQ,SAAS,EAAE,cAAc;IAC3D,4BAA4B;IAC5B,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAEhC,gDAAgD;IAChD,QAAQ,EAAE,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAEpD,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,4IAA4I;AAC5I,QAAA,MAAM,YAAY,EAAE,iBAAiB,CAAC,iBAAiB,CAwBtD,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { NumberInput, useI18n } from '@pega/cosmos-react-core';
4
+ /** Wrapper over the NumberInput to parse values as Numbers, while still allowing the user to type partial values like `12.`, `12.0`, ... */
5
+ const NumericInput = (props) => {
6
+ const { rhs, onChange, status } = props;
7
+ const t = useI18n();
8
+ // Since we want to always call onChange with parsed Numbers,
9
+ // if we parse values like `12.`, `12.0`, etc., the decimals will be lost leading to bad UX
10
+ // Using a local state to avoid that
11
+ const [localValue, setLocalValue] = useState(rhs.value.toString());
12
+ const handleInputChange = (newValue) => {
13
+ setLocalValue(newValue);
14
+ onChange({ value: newValue.trim() ? Number(newValue) : '' }); // Save as a number unless the input is empty
15
+ };
16
+ return (_jsx(NumberInput, { value: localValue, onChange: handleInputChange, status: status, info: status === 'error' ? t('condition_builder_invalid_number') : undefined, label: t('condition_builder_compare_with_numeric_value'), labelHidden: true }, void 0));
17
+ };
18
+ export default NumericInput;
19
+ //# sourceMappingURL=NumericInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumericInput.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/NumericInput.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAqB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAA6B,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAa1F,4IAA4I;AAC5I,MAAM,YAAY,GAAyC,CAAC,KAAwB,EAAE,EAAE;IACtF,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACxC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IAEpB,6DAA6D;IAC7D,2FAA2F;IAC3F,oCAAoC;IACpC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnE,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC7C,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,6CAA6C;IAC7G,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,WAAW,IACV,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,SAAS,EAC5E,KAAK,EAAE,CAAC,CAAC,8CAA8C,CAAC,EACxD,WAAW,iBACX,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import { FunctionComponent, useState } from 'react';\n\nimport { BaseProps, NoChildrenProp, NumberInput, useI18n } from '@pega/cosmos-react-core';\n\ninterface NumericInputProps extends BaseProps, NoChildrenProp {\n /** Rhs for the condition */\n rhs: { value: string | number };\n\n /** Callback for any modifications to the Rhs */\n onChange: (rhs: { value: string | number }) => void;\n\n /** Used to indicate any errors on the control */\n status?: 'error';\n}\n\n/** Wrapper over the NumberInput to parse values as Numbers, while still allowing the user to type partial values like `12.`, `12.0`, ... */\nconst NumericInput: FunctionComponent<NumericInputProps> = (props: NumericInputProps) => {\n const { rhs, onChange, status } = props;\n const t = useI18n();\n\n // Since we want to always call onChange with parsed Numbers,\n // if we parse values like `12.`, `12.0`, etc., the decimals will be lost leading to bad UX\n // Using a local state to avoid that\n const [localValue, setLocalValue] = useState(rhs.value.toString());\n\n const handleInputChange = (newValue: string) => {\n setLocalValue(newValue);\n onChange({ value: newValue.trim() ? Number(newValue) : '' }); // Save as a number unless the input is empty\n };\n\n return (\n <NumberInput\n value={localValue}\n onChange={handleInputChange}\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_number') : undefined}\n label={t('condition_builder_compare_with_numeric_value')}\n labelHidden\n />\n );\n};\n\nexport default NumericInput;\n"]}
@@ -0,0 +1,18 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { BaseProps, ForwardProps, NoChildrenProp } from '@pega/cosmos-react-core';
3
+ import { RhsWithRelativeDate } from '../ConditionBuilder.types';
4
+ import { FieldType } from '../core/types';
5
+ export interface RelativeDateMenuProps extends BaseProps, NoChildrenProp {
6
+ /** Rhs for the condition */
7
+ rhs: RhsWithRelativeDate;
8
+ /** Callback for any modifications to the Rhs */
9
+ onChange: (rhs: RhsWithRelativeDate) => void;
10
+ /** FieldType of the LHS Field. Will only be DATE_TIME or DATE_ONLY */
11
+ fieldType: FieldType;
12
+ /** Used to indicate any errors on the control */
13
+ status?: 'error';
14
+ }
15
+ /** A menu with controls to select a Time period value on RHS */
16
+ declare const RelativeDateMenu: FunctionComponent<RelativeDateMenuProps & ForwardProps>;
17
+ export default RelativeDateMenu;
18
+ //# sourceMappingURL=RelativeDateMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelativeDateMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/RelativeDateMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,iBAAiB,EAAW,MAAM,OAAO,CAAC;AAEhE,OAAO,EACL,SAAS,EACT,YAAY,EAOZ,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAsC,SAAS,EAAE,MAAM,eAAe,CAAC;AAE9E,MAAM,WAAW,qBAAsB,SAAQ,SAAS,EAAE,cAAc;IACtE,4BAA4B;IAC5B,GAAG,EAAE,mBAAmB,CAAC;IAEzB,gDAAgD;IAChD,QAAQ,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAE7C,sEAAsE;IACtE,SAAS,EAAE,SAAS,CAAC;IAErB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,gEAAgE;AAChE,QAAA,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,qBAAqB,GAAG,YAAY,CAqJ7E,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,109 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // cspell:ignore words DDTHH
3
+ import { useMemo } from 'react';
4
+ import { Flex, Select, Option, NumberInput, useI18n } from '@pega/cosmos-react-core';
5
+ /** A menu with controls to select a Time period value on RHS */
6
+ const RelativeDateMenu = (props) => {
7
+ const { rhs, onChange, status, fieldType } = props;
8
+ const t = useI18n();
9
+ const { relativeDate } = rhs;
10
+ // Options for the Date Part selector
11
+ const datePartOptions = useMemo(() => {
12
+ const allOptions = ['YEARS', 'QUARTERS', 'MONTHS', 'WEEKS', 'DAYS', 'HOURS'];
13
+ const datePartLabels = {
14
+ YEARS: t('condition_builder_relative_dates_year'),
15
+ QUARTERS: t('condition_builder_relative_dates_quarter'),
16
+ MONTHS: t('condition_builder_relative_dates_month'),
17
+ WEEKS: t('condition_builder_relative_dates_week'),
18
+ DAYS: t('condition_builder_relative_dates_day'),
19
+ HOURS: t('condition_builder_relative_dates_hour'),
20
+ MINUTES: t('condition_builder_relative_dates_minute')
21
+ };
22
+ if (fieldType === 'DATE_TIME') {
23
+ // TODO: Remove temporary hide MINUTES option
24
+ return allOptions.map(datePart => ({
25
+ id: datePart,
26
+ label: datePartLabels[datePart]
27
+ }));
28
+ }
29
+ // Removes MINUTES and HOURS for DATE_ONLY fields
30
+ return allOptions.splice(0, allOptions.length - 1).map(datePart => ({
31
+ id: datePart,
32
+ label: datePartLabels[datePart]
33
+ }));
34
+ }, [t, fieldType]);
35
+ // Options for the Date-function selector
36
+ const timePeriodOptions = useMemo(() => {
37
+ const allOptions = ['CURRENT', 'LAST', 'PREVIOUS', 'NEXT'];
38
+ const timePeriodLabels = {
39
+ CURRENT: t('condition_builder_time_period_current'),
40
+ LAST: t('condition_builder_time_period_last'),
41
+ PREVIOUS: t('condition_builder_time_period_previous'),
42
+ NEXT: t('condition_builder_time_period_next')
43
+ };
44
+ return allOptions.map(timePeriod => ({
45
+ id: timePeriod,
46
+ label: timePeriodLabels[timePeriod]
47
+ }));
48
+ }, [t]);
49
+ const handleTimePeriodChange = (e) => {
50
+ const selection = e.target.value;
51
+ if (selection === 'CURRENT') {
52
+ onChange({
53
+ relativeDate: {
54
+ timePeriod: selection,
55
+ datePart: relativeDate.datePart
56
+ }
57
+ });
58
+ }
59
+ else {
60
+ onChange({
61
+ relativeDate: {
62
+ ...relativeDate,
63
+ timePeriod: selection,
64
+ interval: relativeDate.interval ?? undefined
65
+ }
66
+ });
67
+ }
68
+ };
69
+ // Handle changes to the Date-function selector
70
+ const handleDatePartChange = (e) => {
71
+ const selection = e.target.value;
72
+ onChange({
73
+ relativeDate: {
74
+ ...relativeDate,
75
+ datePart: selection
76
+ }
77
+ });
78
+ };
79
+ // Common props for all value controls
80
+ const valueComponentProps = {
81
+ value: relativeDate.interval?.toString(),
82
+ label: t('condition_builder_value_label'),
83
+ status,
84
+ info: status ? t('condition_builder_invalid_value') : undefined
85
+ };
86
+ const handleIntervalChange = (value) => {
87
+ let newValue;
88
+ if (value !== '' && !Number.isNaN(Number(value))) {
89
+ newValue = Number(value);
90
+ onChange({
91
+ relativeDate: {
92
+ ...relativeDate,
93
+ interval: newValue
94
+ }
95
+ });
96
+ }
97
+ else {
98
+ onChange({
99
+ relativeDate: {
100
+ ...relativeDate,
101
+ interval: undefined
102
+ }
103
+ });
104
+ }
105
+ };
106
+ return (_jsxs(_Fragment, { children: [_jsx(Select, { label: t('condition_builder_time_period_label'), value: rhs.relativeDate.timePeriod, onChange: handleTimePeriodChange, children: timePeriodOptions.map(o => (_jsx(Option, { value: o.id, children: o.label }, o.id))) }, void 0), _jsxs(Flex, { container: { direction: 'row', colGap: 1 }, children: [relativeDate.timePeriod !== 'CURRENT' && (_jsx(Flex, { item: { basis: '30%' }, children: _jsx(NumberInput, { ...valueComponentProps, min: 1, step: 1, showDecimal: false, onChange: handleIntervalChange }, void 0) }, void 0)), _jsx(Flex, { item: { basis: relativeDate.timePeriod !== 'CURRENT' ? '70%' : '100%' }, children: _jsx(Select, { label: t('condition_builder_date_part'), value: relativeDate.datePart, onChange: handleDatePartChange, children: datePartOptions.map(o => (_jsx(Option, { value: o.id, children: o.label }, o.id))) }, void 0) }, void 0)] }, void 0)] }, void 0));
107
+ };
108
+ export default RelativeDateMenu;
109
+ //# sourceMappingURL=RelativeDateMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelativeDateMenu.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/RelativeDateMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["// cspell:ignore words DDTHH\nimport { ChangeEvent, FunctionComponent, useMemo } from 'react';\n\nimport {\n BaseProps,\n ForwardProps,\n Flex,\n Select,\n Option,\n NumberInput,\n FormControlProps,\n useI18n,\n NoChildrenProp\n} from '@pega/cosmos-react-core';\n\nimport { RhsWithRelativeDate } from '../ConditionBuilder.types';\nimport { DateFunction, DatePart, TimePeriod, FieldType } from '../core/types';\n\nexport interface RelativeDateMenuProps extends BaseProps, NoChildrenProp {\n /** Rhs for the condition */\n rhs: RhsWithRelativeDate;\n\n /** Callback for any modifications to the Rhs */\n onChange: (rhs: RhsWithRelativeDate) => void;\n\n /** FieldType of the LHS Field. Will only be DATE_TIME or DATE_ONLY */\n fieldType: FieldType;\n\n /** Used to indicate any errors on the control */\n status?: 'error';\n}\n\n/** A menu with controls to select a Time period value on RHS */\nconst RelativeDateMenu: FunctionComponent<RelativeDateMenuProps & ForwardProps> = (\n props: RelativeDateMenuProps\n) => {\n const { rhs, onChange, status, fieldType } = props;\n const t = useI18n();\n\n const { relativeDate } = rhs;\n\n // Options for the Date Part selector\n const datePartOptions = useMemo(() => {\n const allOptions = ['YEARS', 'QUARTERS', 'MONTHS', 'WEEKS', 'DAYS', 'HOURS'];\n const datePartLabels: Record<DatePart, string> = {\n YEARS: t('condition_builder_relative_dates_year'),\n QUARTERS: t('condition_builder_relative_dates_quarter'),\n MONTHS: t('condition_builder_relative_dates_month'),\n WEEKS: t('condition_builder_relative_dates_week'),\n DAYS: t('condition_builder_relative_dates_day'),\n HOURS: t('condition_builder_relative_dates_hour'),\n MINUTES: t('condition_builder_relative_dates_minute')\n };\n if (fieldType === 'DATE_TIME') {\n // TODO: Remove temporary hide MINUTES option\n return allOptions.map(datePart => ({\n id: datePart,\n label: datePartLabels[datePart as DatePart]\n }));\n }\n // Removes MINUTES and HOURS for DATE_ONLY fields\n return allOptions.splice(0, allOptions.length - 1).map(datePart => ({\n id: datePart,\n label: datePartLabels[datePart as DatePart]\n }));\n }, [t, fieldType]);\n\n // Options for the Date-function selector\n const timePeriodOptions = useMemo(() => {\n const allOptions = ['CURRENT', 'LAST', 'PREVIOUS', 'NEXT'];\n const timePeriodLabels: Record<TimePeriod, string> = {\n CURRENT: t('condition_builder_time_period_current'),\n LAST: t('condition_builder_time_period_last'),\n PREVIOUS: t('condition_builder_time_period_previous'),\n NEXT: t('condition_builder_time_period_next')\n };\n return allOptions.map(timePeriod => ({\n id: timePeriod,\n label: timePeriodLabels[timePeriod as TimePeriod]\n }));\n }, [t]);\n\n const handleTimePeriodChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const selection = e.target.value;\n if (selection === 'CURRENT') {\n onChange({\n relativeDate: {\n timePeriod: selection as TimePeriod,\n datePart: relativeDate.datePart\n }\n });\n } else {\n onChange({\n relativeDate: {\n ...relativeDate,\n timePeriod: selection as TimePeriod,\n interval: relativeDate.interval ?? undefined\n }\n });\n }\n };\n\n // Handle changes to the Date-function selector\n const handleDatePartChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const selection = e.target.value as DateFunction;\n onChange({\n relativeDate: {\n ...relativeDate,\n datePart: selection as DatePart\n }\n });\n };\n\n // Common props for all value controls\n const valueComponentProps: FormControlProps = {\n value: relativeDate.interval?.toString(),\n label: t('condition_builder_value_label'),\n status,\n info: status ? t('condition_builder_invalid_value') : undefined\n };\n\n const handleIntervalChange = (value: string) => {\n let newValue: number;\n if (value !== '' && !Number.isNaN(Number(value))) {\n newValue = Number(value);\n onChange({\n relativeDate: {\n ...relativeDate,\n interval: newValue\n }\n });\n } else {\n onChange({\n relativeDate: {\n ...relativeDate,\n interval: undefined\n }\n });\n }\n };\n\n return (\n <>\n <Select\n label={t('condition_builder_time_period_label')}\n value={rhs.relativeDate.timePeriod}\n onChange={handleTimePeriodChange}\n >\n {timePeriodOptions.map(o => (\n <Option key={o.id} value={o.id}>\n {o.label}\n </Option>\n ))}\n </Select>\n <Flex container={{ direction: 'row', colGap: 1 }}>\n {relativeDate.timePeriod !== 'CURRENT' && (\n <Flex item={{ basis: '30%' }}>\n <NumberInput\n {...valueComponentProps}\n min={1}\n step={1}\n showDecimal={false}\n onChange={handleIntervalChange}\n />\n </Flex>\n )}\n <Flex item={{ basis: relativeDate.timePeriod !== 'CURRENT' ? '70%' : '100%' }}>\n <Select\n label={t('condition_builder_date_part')}\n value={relativeDate.datePart}\n onChange={handleDatePartChange}\n >\n {datePartOptions.map(o => (\n <Option key={o.id} value={o.id}>\n {o.label}\n </Option>\n ))}\n </Select>\n </Flex>\n </Flex>\n </>\n );\n};\n\nexport default RelativeDateMenu;\n"]}
@@ -1,8 +1,8 @@
1
1
  import { FunctionComponent } from 'react';
2
- import { BaseProps, ForwardProps } from '@pega/cosmos-react-core';
3
- import { Comparator, FieldType, RHSType } from './core/types';
4
- import { DateFunctionsByType, LeafCondition } from './ConditionBuilder.types';
5
- interface RhsMenuButtonProps extends BaseProps {
2
+ import { BaseProps, ForwardProps, NoChildrenProp } from '@pega/cosmos-react-core';
3
+ import { Comparator, FieldType, RHSType } from '../core/types';
4
+ import { DateFunctionsByType, LeafCondition } from '../ConditionBuilder.types';
5
+ interface RhsMenuButtonProps extends BaseProps, NoChildrenProp {
6
6
  /** Type of field on the LHS */
7
7
  fieldType: FieldType;
8
8
  /** Comparator for the condition */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RhsModeSwitch.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/RhsControls/RhsModeSwitch.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAW,MAAM,OAAO,CAAC;AAEnD,OAAO,EACL,SAAS,EAET,YAAY,EAKZ,cAAc,EAGf,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AA6B/E,UAAU,kBAAmB,SAAQ,SAAS,EAAE,cAAc;IAC5D,+BAA+B;IAC/B,SAAS,EAAE,SAAS,CAAC;IAErB,mCAAmC;IACnC,UAAU,EAAE,UAAU,CAAC;IAEvB,4BAA4B;IAC5B,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1B,gDAAgD;IAChD,QAAQ,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAE9C,mBAAmB;IACnB,IAAI,EAAE,WAAW,GAAG,aAAa,CAAC;IAElC,uDAAuD;IACvD,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAE5B,oHAAoH;IACpH,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,6DAA6D;AAC7D,QAAA,MAAM,aAAa,EAAE,iBAAiB,CAAC,kBAAkB,GAAG,YAAY,CAqHvE,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -4,7 +4,8 @@ import { ComboBox, hasProp, MenuButton, menuHelpers, useI18n } from '@pega/cosmo
4
4
  var ItemID;
5
5
  (function (ItemID) {
6
6
  ItemID["LITERAL_VALUE"] = "LITERAL_VALUE";
7
- ItemID["TIME_PERIOD"] = "TIME_PERIOD";
7
+ ItemID["DATE_PART"] = "DATE_PART";
8
+ ItemID["RELATIVE_DATE"] = "RELATIVE_DATE";
8
9
  ItemID["ANOTHER_FIELD"] = "ANOTHER_FIELD";
9
10
  })(ItemID || (ItemID = {}));
10
11
  // Label for the `Enter <value>` option on the gear-menu
@@ -33,7 +34,9 @@ const RhsModeSwitch = (props) => {
33
34
  if (hasProp(rhs, 'field'))
34
35
  return ItemID.ANOTHER_FIELD;
35
36
  if (hasProp(rhs, 'value') && hasProp(rhs, 'dateFunction'))
36
- return ItemID.TIME_PERIOD;
37
+ return ItemID.DATE_PART;
38
+ if (hasProp(rhs, 'relativeDate'))
39
+ return ItemID.RELATIVE_DATE;
37
40
  return ItemID.LITERAL_VALUE;
38
41
  }, [rhs]);
39
42
  // Determine actions for the menu
@@ -42,6 +45,7 @@ const RhsModeSwitch = (props) => {
42
45
  // Boolean conditions either don't use an rhs or always use the field-selector
43
46
  // For IN/NOT_IN comparators, only one mode is possible for a given case - CSV Input or a Value-selector
44
47
  if (fieldType !== 'BOOLEAN' && !['IN', 'NOT_IN'].includes(comparator)) {
48
+ // Literal value input
45
49
  if (validRhsTypes.has('LITERAL')) {
46
50
  // Literal Value inputs
47
51
  items.push({
@@ -54,29 +58,47 @@ const RhsModeSwitch = (props) => {
54
58
  }
55
59
  });
56
60
  }
57
- // Time period value input
58
- if (validRhsTypes.has('DATE_FUNCTION') &&
59
- dateFunctions &&
61
+ // Field selector
62
+ if (validRhsTypes.has('FIELD')) {
63
+ items.push({
64
+ id: ItemID.ANOTHER_FIELD,
65
+ primary: t('condition_builder_compare_with_another_field'),
66
+ onClick: id => {
67
+ if (id === currentMode)
68
+ return; // Ignore if already in that mode
69
+ onChange({ field: '' }); // Submit a new RHS to re-render with the new mode
70
+ }
71
+ });
72
+ }
73
+ // Relative Date value input
74
+ if (validRhsTypes.has('RELATIVE_DATE') &&
60
75
  (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY')) {
61
76
  items.push({
62
- id: ItemID.TIME_PERIOD,
63
- primary: t('condition_builder_compare_with_time_period'),
77
+ id: ItemID.RELATIVE_DATE,
78
+ primary: t('condition_builder_compare_with_relative_date'),
64
79
  onClick: id => {
65
80
  if (id === currentMode)
66
81
  return; // Ignore if already in that mode
67
- onChange({ value: '', dateFunction: dateFunctions[fieldType][0] }); // Submit a new RHS to re-render with the new mode. Initializing with the first available date function
82
+ onChange({
83
+ relativeDate: {
84
+ timePeriod: 'CURRENT',
85
+ datePart: 'DAYS'
86
+ }
87
+ });
68
88
  }
69
89
  });
70
90
  }
71
- // Field selector
72
- if (validRhsTypes.has('FIELD')) {
91
+ // Date Part value input
92
+ if (validRhsTypes.has('DATE_FUNCTION') &&
93
+ dateFunctions &&
94
+ (fieldType === 'DATE_TIME' || fieldType === 'DATE_ONLY')) {
73
95
  items.push({
74
- id: ItemID.ANOTHER_FIELD,
75
- primary: t('condition_builder_compare_with_another_field'),
96
+ id: ItemID.DATE_PART,
97
+ primary: t('condition_builder_date_part'),
76
98
  onClick: id => {
77
99
  if (id === currentMode)
78
100
  return; // Ignore if already in that mode
79
- onChange({ field: '' }); // Submit a new RHS to re-render with the new mode
101
+ onChange({ value: '', dateFunction: dateFunctions[fieldType][0] }); // Submit a new RHS to re-render with the new mode. Initializing with the first available date function
80
102
  }
81
103
  });
82
104
  }