@pega/cosmos-react-condition-builder 3.0.0-dev.28.0 → 3.0.0-dev.30.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 (41) hide show
  1. package/lib/components/ConditionBuilder/AtomicCondition.d.ts +3 -1
  2. package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
  3. package/lib/components/ConditionBuilder/AtomicCondition.js +5 -2
  4. package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
  5. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +3 -0
  6. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
  7. package/lib/components/ConditionBuilder/ConditionBuilder.types.js.map +1 -1
  8. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.d.ts.map +1 -1
  9. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js +15 -6
  10. package/lib/components/ConditionBuilder/RhsControls/RhsModeSwitch.js.map +1 -1
  11. package/lib/components/ConditionBuilder/RhsControls/index.d.ts +4 -1
  12. package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
  13. package/lib/components/ConditionBuilder/RhsControls/index.js +50 -4
  14. package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
  15. package/lib/components/ConditionBuilder/core/comparators.d.ts.map +1 -1
  16. package/lib/components/ConditionBuilder/core/comparators.js +4 -0
  17. package/lib/components/ConditionBuilder/core/comparators.js.map +1 -1
  18. package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
  19. package/lib/components/ConditionBuilder/core/evaluator.js +4 -1
  20. package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
  21. package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
  22. package/lib/components/ConditionBuilder/core/formatter.js +53 -47
  23. package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
  24. package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -1
  25. package/lib/components/ConditionBuilder/core/transformer.js +34 -0
  26. package/lib/components/ConditionBuilder/core/transformer.js.map +1 -1
  27. package/lib/components/ConditionBuilder/core/types.d.ts +1 -1
  28. package/lib/components/ConditionBuilder/core/types.d.ts.map +1 -1
  29. package/lib/components/ConditionBuilder/core/types.js.map +1 -1
  30. package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -1
  31. package/lib/components/ConditionInput/ConditionInput.js +84 -19
  32. package/lib/components/ConditionInput/ConditionInput.js.map +1 -1
  33. package/lib/components/ConditionInput/ConditionInput.styles.d.ts +1 -1
  34. package/lib/components/ConditionInput/ConditionInput.styles.d.ts.map +1 -1
  35. package/lib/components/ConditionInput/ConditionInput.styles.js +2 -2
  36. package/lib/components/ConditionInput/ConditionInput.styles.js.map +1 -1
  37. package/lib/components/ConditionInput/utils.d.ts +7 -0
  38. package/lib/components/ConditionInput/utils.d.ts.map +1 -1
  39. package/lib/components/ConditionInput/utils.js +16 -7
  40. package/lib/components/ConditionInput/utils.js.map +1 -1
  41. package/package.json +2 -2
@@ -12,6 +12,28 @@ const dayjsDateParts = {
12
12
  MONTHS: 'month',
13
13
  YEARS: 'year'
14
14
  };
15
+ /** Construct Condition with two range comparators based on the given bounds */
16
+ function getConditionForBetweenComparator(start, end, node) {
17
+ const condition = {
18
+ AND: [
19
+ {
20
+ condition: {
21
+ lhs: node.lhs,
22
+ comparator: 'GTE',
23
+ rhs: { value: start }
24
+ }
25
+ },
26
+ {
27
+ condition: {
28
+ lhs: node.lhs,
29
+ comparator: 'LTE',
30
+ rhs: { value: end }
31
+ }
32
+ }
33
+ ]
34
+ };
35
+ return node.comparator === 'BTW' ? condition : { NOT: condition };
36
+ }
15
37
  /** Construct a date-range filter based on the given date bounds and the comparator */
16
38
  function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
17
39
  const dateFormat = lhsFieldType === 'DATE_ONLY' ? 'YYYY-MM-DD' : 'YYYY-MM-DDTHH:mm:ss';
@@ -86,6 +108,9 @@ function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
86
108
  rhs: { value: endDate.format(dateFormat) }
87
109
  }
88
110
  };
111
+ case 'BTW':
112
+ case 'NOT_BTW':
113
+ return getConditionForBetweenComparator(startDate.format(dateFormat), endDate.format(dateFormat), node);
89
114
  default:
90
115
  return { condition: node };
91
116
  }
@@ -126,6 +151,15 @@ function transformLeafCondition(node, fields, currentDateTime) {
126
151
  const endDate = startDate.add(6, 'day').endOf('day'); // Last millisecond on the 7th day from startDate
127
152
  return getConditionFromRange(startDate, endDate, node, field.type);
128
153
  }
154
+ // Transform double range comparators (BTW, NOT_BTW) into equivalent pair of single range comparators
155
+ if (node.rhs && hasProp(node.rhs, 'start')) {
156
+ if (field.type === 'NUMBER' || field.type === 'TIME_ONLY') {
157
+ return getConditionForBetweenComparator(node.rhs.start, node.rhs.end, node);
158
+ }
159
+ const startDate = dayjs(node.rhs.start);
160
+ const endDate = dayjs(node.rhs.end);
161
+ return getConditionFromRange(startDate, endDate, node, field.type);
162
+ }
129
163
  // For all other cases
130
164
  return { condition: node };
131
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/transformer.ts"],"names":[],"mappings":"AAAA,qBAAqB;AAErB,OAAO,KAA2B,MAAM,OAAO,CAAC;AAChD,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIlD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,cAAc,GAAgC;IAClD,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,MAAmB;IAC1B,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,sFAAsF;AACtF,SAAS,qBAAqB,CAC5B,SAAgB,EAChB,OAAc,EACd,IAAmB,EACnB,YAAuB;IAEvB,MAAM,UAAU,GAAG,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAEvF,QAAQ,IAAI,CAAC,UAAU,EAAE;QACvB,KAAK,IAAI;YACP,OAAO;gBACL,GAAG,EAAE;oBACH;wBACE,SAAS,EAAE;4BACT,GAAG,EAAE,IAAI,CAAC,GAAG;4BACb,UAAU,EAAE,KAAK;4BACjB,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;yBAC3C;qBACF;oBACD;wBACE,SAAS,EAAE;4BACT,GAAG,EAAE,IAAI,CAAC,GAAG;4BACb,UAAU,EAAE,KAAK;4BACjB,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;yBAC7C;qBACF;iBACF;aACF,CAAC;QACJ,KAAK,KAAK;YACR,OAAO;gBACL,EAAE,EAAE;oBACF;wBACE,SAAS,EAAE;4BACT,GAAG,EAAE,IAAI,CAAC,GAAG;4BACb,UAAU,EAAE,IAAI;4BAChB,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;yBAC3C;qBACF;oBACD;wBACE,SAAS,EAAE;4BACT,GAAG,EAAE,IAAI,CAAC,GAAG;4BACb,UAAU,EAAE,IAAI;4BAChB,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;yBAC7C;qBACF;iBACF;aACF,CAAC;QACJ,KAAK,IAAI;YACP,OAAO;gBACL,SAAS,EAAE;oBACT,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,UAAU,EAAE,IAAI;oBAChB,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;iBAC3C;aACF,CAAC;QACJ,KAAK,KAAK;YACR,OAAO;gBACL,SAAS,EAAE;oBACT,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,UAAU,EAAE,KAAK;oBACjB,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;iBAC7C;aACF,CAAC;QACJ,KAAK,IAAI;YACP,OAAO;gBACL,SAAS,EAAE;oBACT,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,UAAU,EAAE,IAAI;oBAChB,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;iBAC7C;aACF,CAAC;QACJ,KAAK,KAAK;YACR,OAAO;gBACL,SAAS,EAAE;oBACT,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,UAAU,EAAE,KAAK;oBACjB,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;iBAC3C;aACF,CAAC;QACJ;YACE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAC9B;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAmB,EACnB,MAAe,EACf,eAAwB;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;QACrC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,eAAe;KAC5C;IAED,qEAAqE;IACrE,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE;QACjD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;QACjE,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;QAEnC,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACvC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SACpC;aAAM,IAAI,UAAU,KAAK,MAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE;YAC7D,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;SACnD;aAAM,IAAI,UAAU,KAAK,UAAU,IAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE;YACjE,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACzE,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SAC/D;aAAM,IAAI,UAAU,KAAK,MAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE;YAC7D,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC7D,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;SACjE;QAED,OAAO,qBAAqB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;KACpE;IAED,6DAA6D;IAC7D,8EAA8E;IAC9E,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,EAAE;QACtF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,iEAAiE;QAC1G,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,iDAAiD;QACvG,OAAO,qBAAqB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;KACpE;IAED,sBAAsB;IACtB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,SAAoB,EACpB,MAAe,EACf,eAAwB;IAExB,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;QAC7B,MAAM,UAAU,GAAgB,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACpD,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,CACtD,CAAC;QACF,OAAO;YACL,GAAG,EAAE,UAAU;SAChB,CAAC;KACH;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;QAC5B,MAAM,UAAU,GAAgB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACnD,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,CACtD,CAAC;QACF,OAAO;YACL,EAAE,EAAE,UAAU;SACf,CAAC;KACH;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;QAC7B,OAAO;YACL,GAAG,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC;SACvE,CAAC;KACH;IAED,OAAO,sBAAsB,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["// cSpell:words DDTHH\n\nimport dayjs, { QUnitType, Dayjs } from 'dayjs';\nimport './extendDayJs';\n\nimport { hasProp } from '@pega/cosmos-react-core';\n\nimport { Condition, LeafCondition, Field } from '../ConditionBuilder.types';\n\nimport { getItem } from './utils';\nimport { DatePart, FieldType } from './types';\n\nconst dayjsDateParts: Record<DatePart, QUnitType> = {\n MINUTES: 'minute',\n HOURS: 'hour',\n DAYS: 'day',\n WEEKS: 'week' as QUnitType,\n QUARTERS: 'quarter',\n MONTHS: 'month',\n YEARS: 'year'\n};\n\n/** Construct a date-range filter based on the given date bounds and the comparator */\nfunction getConditionFromRange(\n startDate: Dayjs,\n endDate: Dayjs,\n node: LeafCondition,\n lhsFieldType: FieldType\n): Condition {\n const dateFormat = lhsFieldType === 'DATE_ONLY' ? 'YYYY-MM-DD' : 'YYYY-MM-DDTHH:mm:ss';\n\n switch (node.comparator) {\n case 'EQ':\n return {\n AND: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: endDate.format(dateFormat) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: startDate.format(dateFormat) }\n }\n }\n ]\n };\n case 'NEQ':\n return {\n OR: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: endDate.format(dateFormat) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: startDate.format(dateFormat) }\n }\n }\n ]\n };\n case 'GT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: endDate.format(dateFormat) }\n }\n };\n case 'GTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: startDate.format(dateFormat) }\n }\n };\n case 'LT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: startDate.format(dateFormat) }\n }\n };\n case 'LTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: endDate.format(dateFormat) }\n }\n };\n default:\n return { condition: node };\n }\n}\n\nfunction transformLeafCondition(\n node: LeafCondition,\n fields: Field[],\n currentDateTime?: string\n): Condition {\n const field = getItem(fields, node.lhs.field);\n if (!field || !hasProp(field, 'type')) {\n return { condition: node }; // Safety check\n }\n\n // Transform Relative date filters into equivalent date range filters\n if (node.rhs && hasProp(node.rhs, 'relativeDate')) {\n const { timePeriod, interval, datePart } = node.rhs.relativeDate;\n const dayjsDatePart = dayjsDateParts[datePart];\n const now = dayjs(currentDateTime);\n\n let startDate = now;\n let endDate = now;\n if (timePeriod === 'CURRENT') {\n startDate = now.startOf(dayjsDatePart);\n endDate = now.endOf(dayjsDatePart);\n } else if (timePeriod === 'LAST' && interval && interval >= 1) {\n startDate = now.subtract(interval, dayjsDatePart);\n } else if (timePeriod === 'PREVIOUS' && interval && interval >= 1) {\n startDate = now.startOf(dayjsDatePart).subtract(interval, dayjsDatePart);\n endDate = now.subtract(1, dayjsDatePart).endOf(dayjsDatePart);\n } else if (timePeriod === 'NEXT' && interval && interval >= 1) {\n startDate = now.add(1, dayjsDatePart).startOf(dayjsDatePart);\n endDate = now.endOf(dayjsDatePart).add(interval, dayjsDatePart);\n }\n\n return getConditionFromRange(startDate, endDate, node, field.type);\n }\n\n // Transform WEEKS-filters into equivalent date-range filters\n // NOTE: This is a work-around until we make startOfDay customizable for Weeks\n if (node.rhs && hasProp(node.rhs, 'dateFunction') && node.rhs.dateFunction === 'WEEKS') {\n const startDate = dayjs(node.rhs.value); // Since we store it as YYYY-MM-DD, it's already the start of day\n const endDate = startDate.add(6, 'day').endOf('day'); // Last millisecond on the 7th day from startDate\n return getConditionFromRange(startDate, endDate, node, field.type);\n }\n\n // For all other cases\n return { condition: node };\n}\n\n/** This function transforms Conditions with Relative Dates into Conditions with Date Ranges.\n * Do not use this function unless you need to convert Relative Dates into Date Ranges.\n */\nexport default function transformComplexCondition(\n condition: Condition,\n fields: Field[],\n currentDateTime?: string\n): Condition {\n if (hasProp(condition, 'AND')) {\n const childNodes: Condition[] = condition.AND.map(n =>\n transformComplexCondition(n, fields, currentDateTime)\n );\n return {\n AND: childNodes\n };\n }\n\n if (hasProp(condition, 'OR')) {\n const childNodes: Condition[] = condition.OR.map(n =>\n transformComplexCondition(n, fields, currentDateTime)\n );\n return {\n OR: childNodes\n };\n }\n\n if (hasProp(condition, 'NOT')) {\n return {\n NOT: transformComplexCondition(condition.NOT, fields, currentDateTime)\n };\n }\n\n return transformLeafCondition(condition.condition, fields, currentDateTime);\n}\n"]}
1
+ {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/transformer.ts"],"names":[],"mappings":"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","sourcesContent":["// cSpell:words DDTHH\n\nimport dayjs, { QUnitType, Dayjs } from 'dayjs';\nimport './extendDayJs';\n\nimport { hasProp } from '@pega/cosmos-react-core';\n\nimport { Condition, LeafCondition, Field } from '../ConditionBuilder.types';\n\nimport { getItem } from './utils';\nimport { DatePart, FieldType } from './types';\n\nconst dayjsDateParts: Record<DatePart, QUnitType> = {\n MINUTES: 'minute',\n HOURS: 'hour',\n DAYS: 'day',\n WEEKS: 'week' as QUnitType,\n QUARTERS: 'quarter',\n MONTHS: 'month',\n YEARS: 'year'\n};\n\n/** Construct Condition with two range comparators based on the given bounds */\nfunction getConditionForBetweenComparator(\n start: string | number,\n end: string | number,\n node: LeafCondition\n): Condition {\n const condition: Condition = {\n AND: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: start }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: end }\n }\n }\n ]\n };\n\n return node.comparator === 'BTW' ? condition : { NOT: condition };\n}\n\n/** Construct a date-range filter based on the given date bounds and the comparator */\nfunction getConditionFromRange(\n startDate: Dayjs,\n endDate: Dayjs,\n node: LeafCondition,\n lhsFieldType: FieldType\n): Condition {\n const dateFormat = lhsFieldType === 'DATE_ONLY' ? 'YYYY-MM-DD' : 'YYYY-MM-DDTHH:mm:ss';\n\n switch (node.comparator) {\n case 'EQ':\n return {\n AND: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: endDate.format(dateFormat) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: startDate.format(dateFormat) }\n }\n }\n ]\n };\n case 'NEQ':\n return {\n OR: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: endDate.format(dateFormat) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: startDate.format(dateFormat) }\n }\n }\n ]\n };\n case 'GT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: endDate.format(dateFormat) }\n }\n };\n case 'GTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: startDate.format(dateFormat) }\n }\n };\n case 'LT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: startDate.format(dateFormat) }\n }\n };\n case 'LTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: endDate.format(dateFormat) }\n }\n };\n case 'BTW':\n case 'NOT_BTW':\n return getConditionForBetweenComparator(\n startDate.format(dateFormat),\n endDate.format(dateFormat),\n node\n );\n default:\n return { condition: node };\n }\n}\n\nfunction transformLeafCondition(\n node: LeafCondition,\n fields: Field[],\n currentDateTime?: string\n): Condition {\n const field = getItem(fields, node.lhs.field);\n if (!field || !hasProp(field, 'type')) {\n return { condition: node }; // Safety check\n }\n\n // Transform Relative date filters into equivalent date range filters\n if (node.rhs && hasProp(node.rhs, 'relativeDate')) {\n const { timePeriod, interval, datePart } = node.rhs.relativeDate;\n const dayjsDatePart = dayjsDateParts[datePart];\n const now = dayjs(currentDateTime);\n\n let startDate = now;\n let endDate = now;\n if (timePeriod === 'CURRENT') {\n startDate = now.startOf(dayjsDatePart);\n endDate = now.endOf(dayjsDatePart);\n } else if (timePeriod === 'LAST' && interval && interval >= 1) {\n startDate = now.subtract(interval, dayjsDatePart);\n } else if (timePeriod === 'PREVIOUS' && interval && interval >= 1) {\n startDate = now.startOf(dayjsDatePart).subtract(interval, dayjsDatePart);\n endDate = now.subtract(1, dayjsDatePart).endOf(dayjsDatePart);\n } else if (timePeriod === 'NEXT' && interval && interval >= 1) {\n startDate = now.add(1, dayjsDatePart).startOf(dayjsDatePart);\n endDate = now.endOf(dayjsDatePart).add(interval, dayjsDatePart);\n }\n\n return getConditionFromRange(startDate, endDate, node, field.type);\n }\n\n // Transform WEEKS-filters into equivalent date-range filters\n // NOTE: This is a work-around until we make startOfDay customizable for Weeks\n if (node.rhs && hasProp(node.rhs, 'dateFunction') && node.rhs.dateFunction === 'WEEKS') {\n const startDate = dayjs(node.rhs.value); // Since we store it as YYYY-MM-DD, it's already the start of day\n const endDate = startDate.add(6, 'day').endOf('day'); // Last millisecond on the 7th day from startDate\n return getConditionFromRange(startDate, endDate, node, field.type);\n }\n\n // Transform double range comparators (BTW, NOT_BTW) into equivalent pair of single range comparators\n if (node.rhs && hasProp(node.rhs, 'start')) {\n if (field.type === 'NUMBER' || field.type === 'TIME_ONLY') {\n return getConditionForBetweenComparator(node.rhs.start, node.rhs.end, node);\n }\n\n const startDate = dayjs(node.rhs.start);\n const endDate = dayjs(node.rhs.end);\n return getConditionFromRange(startDate, endDate, node, field.type);\n }\n\n // For all other cases\n return { condition: node };\n}\n\n/** This function transforms Conditions with Relative Dates into Conditions with Date Ranges.\n * Do not use this function unless you need to convert Relative Dates into Date Ranges.\n */\nexport default function transformComplexCondition(\n condition: Condition,\n fields: Field[],\n currentDateTime?: string\n): Condition {\n if (hasProp(condition, 'AND')) {\n const childNodes: Condition[] = condition.AND.map(n =>\n transformComplexCondition(n, fields, currentDateTime)\n );\n return {\n AND: childNodes\n };\n }\n\n if (hasProp(condition, 'OR')) {\n const childNodes: Condition[] = condition.OR.map(n =>\n transformComplexCondition(n, fields, currentDateTime)\n );\n return {\n OR: childNodes\n };\n }\n\n if (hasProp(condition, 'NOT')) {\n return {\n NOT: transformComplexCondition(condition.NOT, fields, currentDateTime)\n };\n }\n\n return transformLeafCondition(condition.condition, fields, currentDateTime);\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  export declare type FieldType = 'BOOLEAN' | 'TEXT' | 'NUMBER' | 'DATE_TIME' | 'DATE_ONLY' | 'TIME_ONLY';
3
3
  declare type NullComparator = 'IS_NULL' | 'IS_NOT_NULL';
4
4
  declare type EqualityComparator = 'EQ' | 'NEQ';
5
- declare type RangeComparator = 'GT' | 'GTE' | 'LT' | 'LTE';
5
+ declare type RangeComparator = 'GT' | 'GTE' | 'LT' | 'LTE' | 'BTW' | 'NOT_BTW';
6
6
  declare type TruenessComparator = 'IS_TRUE' | 'IS_FALSE';
7
7
  declare type ListComparator = 'IN' | 'NOT_IN';
8
8
  declare type TextMatchComparator = 'STARTS_WITH' | 'NOT_STARTS_WITH' | 'ENDS_WITH' | 'NOT_ENDS_WITH' | 'CONTAINS' | 'NOT_CONTAINS';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/types.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,oBAAY,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAEhG,aAAK,cAAc,GAAG,SAAS,GAAG,aAAa,CAAC;AAChD,aAAK,kBAAkB,GAAG,IAAI,GAAG,KAAK,CAAC;AACvC,aAAK,eAAe,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AACnD,aAAK,kBAAkB,GAAG,SAAS,GAAG,UAAU,CAAC;AACjD,aAAK,cAAc,GAAG,IAAI,GAAG,QAAQ,CAAC;AACtC,aAAK,mBAAmB,GACpB,aAAa,GACb,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,UAAU,GACV,cAAc,CAAC;AAEnB,gCAAgC;AAChC,oBAAY,UAAU,GAClB,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,eAAe,GACf,mBAAmB,CAAC;AAExB,+CAA+C;AAC/C,aAAK,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAElF,4CAA4C;AAC5C,aAAK,cAAc,GAAG,kBAAkB,GAAG,cAAc,GAAG,mBAAmB,GAAG,cAAc,CAAC;AAEjG,8CAA8C;AAC9C,aAAK,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,CAAC;AAE/F,qEAAqE;AACrE,aAAK,kBAAkB,GAAG,kBAAkB,GAAG,eAAe,GAAG,cAAc,CAAC;AAEhF,qEAAqE;AACrE,oBAAY,iBAAiB,GACzB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,iBAAiB,EAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,cAAc,EAAE,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC;AAE7D,oBAAY,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,GAAG,eAAe,GAAG,WAAW,CAAC;AAE5F,+CAA+C;AAC/C,oBAAY,YAAY,GACpB,OAAO,GACP,UAAU,GACV,QAAQ,GACR,OAAO,GACP,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,eAAe,GACf,cAAc,CAAC;AAEnB,wDAAwD;AACxD,oBAAY,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAElE,sDAAsD;AACtD,oBAAY,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/types.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,oBAAY,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAEhG,aAAK,cAAc,GAAG,SAAS,GAAG,aAAa,CAAC;AAChD,aAAK,kBAAkB,GAAG,IAAI,GAAG,KAAK,CAAC;AACvC,aAAK,eAAe,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AACvE,aAAK,kBAAkB,GAAG,SAAS,GAAG,UAAU,CAAC;AACjD,aAAK,cAAc,GAAG,IAAI,GAAG,QAAQ,CAAC;AACtC,aAAK,mBAAmB,GACpB,aAAa,GACb,iBAAiB,GACjB,WAAW,GACX,eAAe,GACf,UAAU,GACV,cAAc,CAAC;AAEnB,gCAAgC;AAChC,oBAAY,UAAU,GAClB,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,eAAe,GACf,mBAAmB,CAAC;AAExB,+CAA+C;AAC/C,aAAK,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAElF,4CAA4C;AAC5C,aAAK,cAAc,GAAG,kBAAkB,GAAG,cAAc,GAAG,mBAAmB,GAAG,cAAc,CAAC;AAEjG,8CAA8C;AAC9C,aAAK,gBAAgB,GAAG,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,CAAC;AAE/F,qEAAqE;AACrE,aAAK,kBAAkB,GAAG,kBAAkB,GAAG,eAAe,GAAG,cAAc,CAAC;AAEhF,qEAAqE;AACrE,oBAAY,iBAAiB,GACzB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,iBAAiB,EAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,cAAc,EAAE,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC;AAE7D,oBAAY,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,GAAG,eAAe,GAAG,WAAW,CAAC;AAE5F,+CAA+C;AAC/C,oBAAY,YAAY,GACpB,OAAO,GACP,UAAU,GACV,QAAQ,GACR,OAAO,GACP,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,eAAe,GACf,cAAc,CAAC;AAEnB,wDAAwD;AACxD,oBAAY,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAElE,sDAAsD;AACtD,oBAAY,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/types.ts"],"names":[],"mappings":"","sourcesContent":["/** Supported field types */\nexport type FieldType = 'BOOLEAN' | 'TEXT' | 'NUMBER' | 'DATE_TIME' | 'DATE_ONLY' | 'TIME_ONLY';\n\ntype NullComparator = 'IS_NULL' | 'IS_NOT_NULL';\ntype EqualityComparator = 'EQ' | 'NEQ';\ntype RangeComparator = 'GT' | 'GTE' | 'LT' | 'LTE';\ntype TruenessComparator = 'IS_TRUE' | 'IS_FALSE';\ntype ListComparator = 'IN' | 'NOT_IN';\ntype TextMatchComparator =\n | 'STARTS_WITH'\n | 'NOT_STARTS_WITH'\n | 'ENDS_WITH'\n | 'NOT_ENDS_WITH'\n | 'CONTAINS'\n | 'NOT_CONTAINS';\n\n/** All supported Comparators */\nexport type Comparator =\n | TruenessComparator\n | NullComparator\n | EqualityComparator\n | ListComparator\n | RangeComparator\n | TextMatchComparator;\n\n/** Comparators supported for BOOLEAN fields */\ntype BooleanComparator = TruenessComparator | EqualityComparator | NullComparator;\n\n/** Comparators supported for TEXT fields */\ntype TextComparator = EqualityComparator | ListComparator | TextMatchComparator | NullComparator;\n\n/** Comparators supported for NUMBER fields */\ntype NumberComparator = EqualityComparator | ListComparator | RangeComparator | NullComparator;\n\n/** Comparators supported for DATE_TIME/DATE_ONLY/TIME_ONLY fields */\ntype DateTimeComparator = EqualityComparator | RangeComparator | NullComparator;\n\n/** Type definition to specify supported comparators by field-type */\nexport type ComparatorsByType =\n | { type: 'BOOLEAN'; comparators: BooleanComparator[] }\n | { type: 'TEXT'; comparators: TextComparator[] }\n | { type: 'NUMBER'; comparators: NumberComparator[] }\n | { type: 'DATE_TIME'; comparators: DateTimeComparator[] }\n | { type: 'DATE_ONLY'; comparators: DateTimeComparator[] }\n | { type: 'TIME_ONLY'; comparators: DateTimeComparator[] };\n\nexport type RHSType = 'LITERAL' | 'FIELD' | 'DATE_FUNCTION' | 'RELATIVE_DATE' | 'PARAMETER';\n\n/** Date function types supported on the RHS */\nexport type DateFunction =\n | 'YEARS'\n | 'QUARTERS'\n | 'MONTHS'\n | 'WEEKS'\n | 'DAYS'\n | 'HOURS'\n | 'MONTHS_OF_YEAR'\n | 'DAYS_OF_MONTH'\n | 'DAYS_OF_WEEK';\n\n/** \"Relative Date\" Time Periods supported on the RHS */\nexport type TimePeriod = 'LAST' | 'PREVIOUS' | 'CURRENT' | 'NEXT';\n\n/** \"Relative Date\" Date Parts supported on the RHS */\nexport type DatePart = 'MINUTES' | 'HOURS' | 'DAYS' | 'WEEKS' | 'MONTHS' | 'QUARTERS' | 'YEARS';\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/types.ts"],"names":[],"mappings":"","sourcesContent":["/** Supported field types */\nexport type FieldType = 'BOOLEAN' | 'TEXT' | 'NUMBER' | 'DATE_TIME' | 'DATE_ONLY' | 'TIME_ONLY';\n\ntype NullComparator = 'IS_NULL' | 'IS_NOT_NULL';\ntype EqualityComparator = 'EQ' | 'NEQ';\ntype RangeComparator = 'GT' | 'GTE' | 'LT' | 'LTE' | 'BTW' | 'NOT_BTW';\ntype TruenessComparator = 'IS_TRUE' | 'IS_FALSE';\ntype ListComparator = 'IN' | 'NOT_IN';\ntype TextMatchComparator =\n | 'STARTS_WITH'\n | 'NOT_STARTS_WITH'\n | 'ENDS_WITH'\n | 'NOT_ENDS_WITH'\n | 'CONTAINS'\n | 'NOT_CONTAINS';\n\n/** All supported Comparators */\nexport type Comparator =\n | TruenessComparator\n | NullComparator\n | EqualityComparator\n | ListComparator\n | RangeComparator\n | TextMatchComparator;\n\n/** Comparators supported for BOOLEAN fields */\ntype BooleanComparator = TruenessComparator | EqualityComparator | NullComparator;\n\n/** Comparators supported for TEXT fields */\ntype TextComparator = EqualityComparator | ListComparator | TextMatchComparator | NullComparator;\n\n/** Comparators supported for NUMBER fields */\ntype NumberComparator = EqualityComparator | ListComparator | RangeComparator | NullComparator;\n\n/** Comparators supported for DATE_TIME/DATE_ONLY/TIME_ONLY fields */\ntype DateTimeComparator = EqualityComparator | RangeComparator | NullComparator;\n\n/** Type definition to specify supported comparators by field-type */\nexport type ComparatorsByType =\n | { type: 'BOOLEAN'; comparators: BooleanComparator[] }\n | { type: 'TEXT'; comparators: TextComparator[] }\n | { type: 'NUMBER'; comparators: NumberComparator[] }\n | { type: 'DATE_TIME'; comparators: DateTimeComparator[] }\n | { type: 'DATE_ONLY'; comparators: DateTimeComparator[] }\n | { type: 'TIME_ONLY'; comparators: DateTimeComparator[] };\n\nexport type RHSType = 'LITERAL' | 'FIELD' | 'DATE_FUNCTION' | 'RELATIVE_DATE' | 'PARAMETER';\n\n/** Date function types supported on the RHS */\nexport type DateFunction =\n | 'YEARS'\n | 'QUARTERS'\n | 'MONTHS'\n | 'WEEKS'\n | 'DAYS'\n | 'HOURS'\n | 'MONTHS_OF_YEAR'\n | 'DAYS_OF_MONTH'\n | 'DAYS_OF_WEEK';\n\n/** \"Relative Date\" Time Periods supported on the RHS */\nexport type TimePeriod = 'LAST' | 'PREVIOUS' | 'CURRENT' | 'NEXT';\n\n/** \"Relative Date\" Date Parts supported on the RHS */\nexport type DatePart = 'MINUTES' | 'HOURS' | 'DAYS' | 'WEEKS' | 'MONTHS' | 'QUARTERS' | 'YEARS';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAKlB,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,YAAY,EAUb,MAAM,yBAAyB,CAAC;AAWjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAQlE,QAAA,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,YAAY,CAsSzE,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"ConditionInput.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAKlB,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,YAAY,EAWb,MAAM,yBAAyB,CAAC;AAcjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAQlE,QAAA,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,YAAY,CA6YzE,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -1,20 +1,24 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { forwardRef, useState, useEffect } from 'react';
3
- import { CompositeInput, hasProp, Input, NumberInput, RadioButton, useI18n, DateInput, TimeInput, DateTimeInput, useConfiguration } from '@pega/cosmos-react-core';
3
+ import { CompositeInput, hasProp, Input, RadioButton, useI18n, useConfiguration, DateRangeInput, TimeRangeInput, useUID, NumberRangeInput, RadioButtonGroup } from '@pega/cosmos-react-core';
4
4
  import AtomicCondition, { getInitConditionForLhs } from '../ConditionBuilder/AtomicCondition';
5
5
  import formatCondition from '../ConditionBuilder/core/formatter';
6
6
  import ValueSelector from '../ConditionBuilder/RhsControls/ValueSelector';
7
+ import { truncateISODateString } from '../ConditionBuilder/RhsControls';
8
+ import { convertTimeValueToMs } from '../ConditionBuilder/core/time-utils';
7
9
  import { StyledConditionRadioGroup, StyledAtomicCondition, StyledFieldGroup } from './ConditionInput.styles';
8
- import { basicFieldMap, defaultComparators, compareValues } from './utils';
10
+ import { basicFieldMap, defaultComparators, compareValues, compareRangeValues } from './utils';
9
11
  const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp, label, mode, onChange, flat = false }, ref) => {
12
+ const id = useUID();
10
13
  const t = useI18n();
11
14
  const { locale } = useConfiguration();
12
15
  const { name: fieldName, type: fieldType } = fieldProp;
13
16
  const basicType = basicFieldMap[fieldType] ?? fieldType;
17
+ const fieldLabel = label || fieldName;
14
18
  const field = {
15
19
  id: fieldName,
16
20
  type: basicType,
17
- primary: label || fieldName
21
+ primary: fieldLabel
18
22
  };
19
23
  const fields = [field];
20
24
  const createConditionForDefaultMode = (value) => {
@@ -22,13 +26,24 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
22
26
  if (Array.isArray(value))
23
27
  valueObj = { values: value };
24
28
  else
25
- valueObj = { value: basicType === 'NUMBER' ? Number(value) : value };
29
+ valueObj = { value };
26
30
  return {
27
31
  lhs: { field: fieldName },
28
32
  comparator: defaultComparators[fieldType],
29
33
  rhs: valueObj
30
34
  };
31
35
  };
36
+ const convertDateTimeValue = (value) => {
37
+ const truncatedValue = truncateISODateString(value, basicType);
38
+ return fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedValue) : truncatedValue;
39
+ };
40
+ const createConditionForRange = (value) => {
41
+ return {
42
+ lhs: { field: fieldName },
43
+ comparator: defaultComparators[fieldType],
44
+ rhs: value
45
+ };
46
+ };
32
47
  const validComparators = fieldType === 'PICKLIST' ? [{ type: 'TEXT', comparators: ['IN'] }] : undefined;
33
48
  const condition = conditionProp ??
34
49
  (fieldType === 'BOOLEAN'
@@ -36,6 +51,7 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
36
51
  : getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']), validComparators));
37
52
  const [newCondition, setNewCondition] = useState(condition);
38
53
  let rhsValue = fieldType === 'PICKLIST' ? [] : undefined;
54
+ let rhsRangeValue;
39
55
  if (condition?.rhs) {
40
56
  if (hasProp(condition.rhs, 'value')) {
41
57
  rhsValue = condition.rhs.value.toString();
@@ -43,11 +59,16 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
43
59
  else if (hasProp(condition.rhs, 'values')) {
44
60
  rhsValue = condition.rhs.values.map(String);
45
61
  }
62
+ else if (hasProp(condition.rhs, 'start')) {
63
+ rhsRangeValue = { start: condition.rhs.start, end: condition.rhs.end };
64
+ }
46
65
  }
47
66
  const [inputValue, setInputValue] = useState(rhsValue);
67
+ const [rangeInputValue, setRangeInputValue] = useState(rhsRangeValue);
48
68
  useEffect(() => {
49
69
  setNewCondition(condition);
50
70
  setInputValue(rhsValue);
71
+ setRangeInputValue(rhsRangeValue);
51
72
  }, [conditionProp]);
52
73
  const handleBlur = () => {
53
74
  // trigger onChange only when value has changed
@@ -55,6 +76,12 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
55
76
  onChange(inputValue ? createConditionForDefaultMode(inputValue) : undefined);
56
77
  }
57
78
  };
79
+ const handleRangeBlur = (newRangeValue) => {
80
+ // trigger onChange only when value has changed
81
+ if (!compareRangeValues(rhsRangeValue, newRangeValue)) {
82
+ onChange(newRangeValue ? createConditionForRange(newRangeValue) : undefined);
83
+ }
84
+ };
58
85
  const onRadioButtonChange = (value) => {
59
86
  const updatedCondition = value === undefined
60
87
  ? undefined
@@ -68,6 +95,12 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
68
95
  onChange(undefined);
69
96
  setNewCondition(condition);
70
97
  };
98
+ const handleDateRangeValueChange = (value) => {
99
+ setRangeInputValue({
100
+ start: value.start.valueAsISOString || undefined,
101
+ end: value.end.valueAsISOString || undefined
102
+ });
103
+ };
71
104
  const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN' && fieldType !== 'PICKLIST';
72
105
  let defaultControl = null;
73
106
  const valueToSet = typeof inputValue === 'string' ? inputValue : undefined;
@@ -77,37 +110,68 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
77
110
  case 'DECIMAL':
78
111
  case 'PERCENTAGE':
79
112
  case 'CURRENCY':
80
- defaultControl = (_jsx(NumberInput, { label: label, labelHidden: flat, ref: ref, value: valueToSet, onChange: setInputValue, onBlur: handleBlur, numberOfDecimals: fieldType === 'INTEGER' ? 0 : undefined }));
113
+ defaultControl = (_jsx(NumberRangeInput, { id: id, label: fieldLabel, labelHidden: flat, ref: ref, value: {
114
+ start: rangeInputValue?.start?.toString() ?? '',
115
+ end: rangeInputValue?.end?.toString() ?? ''
116
+ }, onChange: setRangeInputValue, onBlur: newRangeValue => {
117
+ handleRangeBlur(newRangeValue.start && newRangeValue.end
118
+ ? {
119
+ start: Number(newRangeValue.start),
120
+ end: Number(newRangeValue.end)
121
+ }
122
+ : undefined);
123
+ }, numberOfDecimals: fieldType === 'INTEGER' ? 0 : undefined }));
81
124
  break;
82
125
  case 'BOOLEAN':
83
- defaultControl = (_jsxs(StyledConditionRadioGroup, { ref: ref, label: label, 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) })] }));
126
+ defaultControl = (_jsxs(RadioButtonGroup, { as: StyledConditionRadioGroup, id: id, ref: ref, label: fieldLabel, labelHidden: flat, name: fieldName, inline: true, children: [_jsx(RadioButton, { label: t('show_all'), checked: condition === undefined, onChange: () => onRadioButtonChange() }), _jsx(RadioButton, { label: t('boolean_display_true_label'), checked: condition?.comparator === 'IS_TRUE', onChange: () => onRadioButtonChange(true) }), _jsx(RadioButton, { label: t('boolean_display_false_label'), checked: condition?.comparator === 'IS_FALSE', onChange: () => onRadioButtonChange(false) })] }));
84
127
  break;
85
128
  case 'DATE_ONLY':
86
- defaultControl = (_jsx(DateInput, { label: label, ref: ref, value: valueToSet, onChange: ({ valueAsISOString }) => setInputValue(valueAsISOString), onBlur: ({ valueAsISOString }) => {
87
- onChange(createConditionForDefaultMode(valueAsISOString));
88
- } }));
129
+ defaultControl = (_jsx(DateRangeInput, { id: id, ref: ref, label: fieldLabel, labelHidden: flat, value: rangeInputValue
130
+ ? { start: rangeInputValue.start, end: rangeInputValue.end }
131
+ : undefined, onChange: handleDateRangeValueChange, onBlur: newRangeValue => {
132
+ handleRangeBlur(newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString
133
+ ? {
134
+ start: convertDateTimeValue(newRangeValue.start.valueAsISOString),
135
+ end: convertDateTimeValue(newRangeValue.end.valueAsISOString)
136
+ }
137
+ : undefined);
138
+ }, fromLabel: '', toLabel: '', info: '' }));
89
139
  break;
90
140
  case 'TIME_ONLY':
91
- defaultControl = (_jsx(TimeInput, { label: label, ref: ref, value: valueToSet || undefined, onChange: ({ valueAsISOString }) => setInputValue(valueAsISOString), onBlur: ({ valueAsISOString }) => {
92
- onChange(createConditionForDefaultMode(valueAsISOString));
93
- } }));
141
+ defaultControl = (_jsx(TimeRangeInput, { id: id, ref: ref, mode: 'time', label: fieldLabel, labelHidden: flat, value: rangeInputValue
142
+ ? { start: rangeInputValue.start, end: rangeInputValue.end }
143
+ : undefined, onChange: handleDateRangeValueChange, onBlur: newRangeValue => {
144
+ handleRangeBlur(newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString
145
+ ? {
146
+ start: convertDateTimeValue(newRangeValue.start.valueAsISOString),
147
+ end: convertDateTimeValue(newRangeValue.end.valueAsISOString)
148
+ }
149
+ : undefined);
150
+ }, info: '' }));
94
151
  break;
95
152
  case 'DATE_TIME':
96
- defaultControl = (_jsx(DateTimeInput, { label: label, ref: ref, value: valueToSet, onChange: ({ valueAsISOString }) => setInputValue(valueAsISOString), onBlur: ({ valueAsISOString }) => {
97
- onChange(createConditionForDefaultMode(valueAsISOString));
98
- } }));
153
+ defaultControl = (_jsx(TimeRangeInput, { id: id, ref: ref, mode: 'datetime', label: fieldLabel, labelHidden: flat, value: rangeInputValue
154
+ ? { start: rangeInputValue.start, end: rangeInputValue.end }
155
+ : undefined, onChange: handleDateRangeValueChange, onBlur: newRangeValue => {
156
+ handleRangeBlur(newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString
157
+ ? {
158
+ start: convertDateTimeValue(newRangeValue.start.valueAsISOString),
159
+ end: convertDateTimeValue(newRangeValue.end.valueAsISOString)
160
+ }
161
+ : undefined);
162
+ }, info: '' }));
99
163
  break;
100
164
  case 'PICKLIST':
101
- defaultControl = (_jsx(ValueSelector, { mode: 'multi-select', values: inputValue ?? [], selectedField: fieldProp, comparator: condition?.comparator ?? defaultComparators[fieldType], onChange: value => {
165
+ defaultControl = (_jsx(ValueSelector, { label: flat ? undefined : fieldLabel, mode: 'multi-select', values: inputValue ?? [], selectedField: fieldProp, comparator: condition?.comparator ?? defaultComparators[fieldType], onChange: value => {
102
166
  setInputValue(value.length > 0 ? value : undefined);
103
- }, onBlur: handleBlur, onClear: onClear, placeholder: t('all'), label: label, parameters: [], rhs: { values: [] } }));
167
+ }, onBlur: handleBlur, onClear: onClear, placeholder: t('all'), parameters: [], rhs: { values: [] } }));
104
168
  break;
105
169
  case 'TEXT':
106
170
  case 'EMAIL':
107
171
  case 'URL':
108
172
  case 'PHONE':
109
173
  default:
110
- defaultControl = (_jsx(Input, { label: label, labelHidden: flat, ref: ref, value: valueToSet, onChange: (e) => setInputValue(e.target.value), onBlur: handleBlur }));
174
+ defaultControl = (_jsx(Input, { id: id, ref: ref, label: fieldLabel, labelHidden: flat, value: valueToSet, onChange: (e) => setInputValue(e.target.value), onBlur: handleBlur }));
111
175
  break;
112
176
  }
113
177
  }
@@ -121,7 +185,8 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
121
185
  itemDirection: 'column',
122
186
  lhsMode: 'hidden',
123
187
  validRhsTypes: new Set(['LITERAL']),
124
- indicateErrors: false
188
+ indicateErrors: false,
189
+ rhsLabelHidden: true
125
190
  },
126
191
  onCancel: ({ close }) => {
127
192
  setNewCondition(condition);
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,UAAU,EAGV,QAAQ,EAER,SAAS,EACV,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,cAAc,EAGd,OAAO,EACP,KAAK,EACL,WAAW,EACX,WAAW,EACX,OAAO,EACP,SAAS,EACT,SAAS,EACT,aAAa,EACb,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,eAAe,EAAE,EAEtB,sBAAsB,EACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,eAAe,MAAM,oCAAoC,CAAC;AAEjE,OAAO,aAAa,MAAM,+CAA+C,CAAC;AAG1E,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3E,MAAM,cAAc,GAA0D,UAAU,CACtF,CACE,EACE,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,aAAa,EACxB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,GAAG,KAAK,EACyB,EACvC,GAA+B,EAC/B,EAAE;IACF,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEtC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACvD,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IAExD,MAAM,KAAK,GAAU;QACnB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK,IAAI,SAAS;KAC5B,CAAC;IAEF,MAAM,MAAM,GAAmC,CAAC,KAAK,CAAC,CAAC;IAEvD,MAAM,6BAA6B,GAAG,CAAC,KAAwB,EAAiB,EAAE;QAChF,IAAI,QAA8B,CAAC;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,QAAQ,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;;YAClD,QAAQ,GAAG,EAAE,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QAE1E,OAAO;YACL,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YACzB,UAAU,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACzC,GAAG,EAAE,QAAQ;SACd,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,gBAAgB,GACpB,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjF,MAAM,SAAS,GACb,aAAa;QACb,CAAC,SAAS,KAAK,SAAS;YACtB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,sBAAsB,CACpB,EAAE,KAAK,EAAE,SAAS,EAAE,EACpB,MAAM,EACN,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EACpB,gBAAgB,CACjB,CAAC,CAAC;IAET,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAA4B,SAAS,CAAC,CAAC;IAEvF,IAAI,QAAQ,GAAkC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAExF,IAAI,SAAS,EAAE,GAAG,EAAE;QAClB,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;YACnC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;SAC3C;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;YAC3C,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;SAC7C;KACF;IAED,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3B,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,+CAA+C;QAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE;YACxC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SAC9E;IACH,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,CAAC,KAAe,EAAE,EAAE;QAC9C,MAAM,gBAAgB,GACpB,KAAK,KAAK,SAAS;YACjB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;gBACzB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;aAC3C,CAAC;QACR,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,eAAe,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,KAAK,UAAU,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,UAAU,CAAC;IAEhG,IAAI,cAAc,GAAuB,IAAI,CAAC;IAE9C,MAAM,UAAU,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3E,IAAI,CAAC,YAAY,EAAE;QACjB,QAAQ,SAAS,EAAE;YACjB,KAAK,SAAS,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,YAAY,CAAC;YAClB,KAAK,UAAU;gBACb,cAAc,GAAG,CACf,KAAC,WAAW,IACV,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,IAAI,EACjB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GACzD,CACH,CAAC;gBACF,MAAM;YACR,KAAK,SAAS;gBACZ,cAAc,GAAG,CACf,MAAC,yBAAyB,IACxB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,IAAI,EACjB,IAAI,EAAE,SAAS,EACf,MAAM,mBAEN,KAAC,WAAW,IACV,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EACpB,OAAO,EAAE,SAAS,KAAK,SAAS,EAChC,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,GACrC,EACF,KAAC,WAAW,IACV,KAAK,EAAE,CAAC,CAAC,4BAA4B,CAAC,EACtC,OAAO,EAAE,SAAS,EAAE,UAAU,KAAK,SAAS,EAC5C,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,GACzC,EACF,KAAC,WAAW,IACV,KAAK,EAAE,CAAC,CAAC,6BAA6B,CAAC,EACvC,OAAO,EAAE,SAAS,EAAE,UAAU,KAAK,UAAU,EAC7C,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAC1C,IACwB,CAC7B,CAAC;gBACF,MAAM;YACR,KAAK,WAAW;gBACd,cAAc,GAAG,CACf,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,EACnE,MAAM,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE;wBAC/B,QAAQ,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBAC5D,CAAC,GACD,CACH,CAAC;gBACF,MAAM;YACR,KAAK,WAAW;gBACd,cAAc,GAAG,CACf,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,IAAI,SAAS,EAC9B,QAAQ,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,EACnE,MAAM,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE;wBAC/B,QAAQ,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBAC5D,CAAC,GACD,CACH,CAAC;gBACF,MAAM;YACR,KAAK,WAAW;gBACd,cAAc,GAAG,CACf,KAAC,aAAa,IACZ,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,EACnE,MAAM,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE;wBAC/B,QAAQ,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBAC5D,CAAC,GACD,CACH,CAAC;gBACF,MAAM;YACR,KAAK,UAAU;gBACb,cAAc,GAAG,CACf,KAAC,aAAa,IACZ,IAAI,EAAC,cAAc,EACnB,MAAM,EAAE,UAAU,IAAI,EAAE,EACxB,aAAa,EAAE,SAAS,EACxB,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAClE,QAAQ,EAAE,KAAK,CAAC,EAAE;wBAChB,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACtD,CAAC,EACD,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,EACrB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,EAAE,EACd,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GACnB,CACH,CAAC;gBACF,MAAM;YACR,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC;YACb,KAAK,KAAK,CAAC;YACX,KAAK,OAAO,CAAC;YACb;gBACE,cAAc,GAAG,CACf,KAAC,KAAK,IACJ,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,IAAI,EACjB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,CAAgC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7E,MAAM,EAAE,UAAU,GAClB,CACH,CAAC;gBACF,MAAM;SACT;KACF;IAED,MAAM,MAAM,GAAuE;QACjF,QAAQ,EAAE,eAAe;QACzB,aAAa,EAAE;YACb,SAAS,EACP,YAAY;gBACZ,sBAAsB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC5E,MAAM;YACN,QAAQ,EAAE,eAAe;YACzB,aAAa,EAAE,QAAQ;YACvB,OAAO,EAAE,QAAQ;YACjB,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;YACnC,cAAc,EAAE,KAAK;SACtB;QACD,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACtB,eAAe,CAAC,SAAS,CAAC,CAAC;YAC3B,KAAK,EAAE,CAAC;QACV,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACrB,QAAQ,CAAC,YAAY,CAAC,CAAC;YACvB,KAAK,EAAE,CAAC;QACV,CAAC;KACF,CAAC;IAEF,IAAI,IAAI,EAAE;QACR,OAAO,YAAY,CAAC,CAAC,CAAC,CACpB,KAAC,qBAAqB,IACpB,WAAW,QACX,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAC9D,SAAS,EACP,YAAY;gBACZ,sBAAsB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAE5E,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,aAAa,EAAC,QAAQ,EACtB,OAAO,EAAC,OAAO,EACf,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EACnC,cAAc,EAAE,KAAK,GACrB,CACH,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IACf,IAAI,EAAE,KAAK,EACX,WAAW,QACX,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,YAE7D,cAAc,GACE,CACpB,CAAC;KACH;IAED,IAAI,YAAY,EAAE;QAChB,OAAO,CACL,KAAC,cAAc,IACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EACH,aAAa;gBACX,CAAC,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;oBACvD,MAAM;oBACN,OAAO,EAAE,IAAI;iBACd,CAAC;gBACJ,CAAC,CAAC,SAAS,EAEf,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,EACrB,GAAG,EAAE,GAAG,GACR,CACH,CAAC;KACH;IAED,OAAO,cAAc,CAAC;AACxB,CAAC,CACF,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useEffect\n} from 'react';\n\nimport {\n CompositeInput,\n CompositeInputProps,\n ForwardProps,\n hasProp,\n Input,\n NumberInput,\n RadioButton,\n useI18n,\n DateInput,\n TimeInput,\n DateTimeInput,\n useConfiguration\n} from '@pega/cosmos-react-core';\n\nimport type { ComparatorsByType } from '../ConditionBuilder/core/types';\nimport AtomicCondition, {\n AtomicConditionProps,\n getInitConditionForLhs\n} from '../ConditionBuilder/AtomicCondition';\nimport formatCondition from '../ConditionBuilder/core/formatter';\nimport type { Field, LeafCondition } from '../ConditionBuilder/ConditionBuilder.types';\nimport ValueSelector from '../ConditionBuilder/RhsControls/ValueSelector';\n\nimport type { ConditionInputProps } from './ConditionInput.types';\nimport {\n StyledConditionRadioGroup,\n StyledAtomicCondition,\n StyledFieldGroup\n} from './ConditionInput.styles';\nimport { basicFieldMap, defaultComparators, compareValues } from './utils';\n\nconst ConditionInput: FunctionComponent<ConditionInputProps & ForwardProps> = forwardRef(\n (\n {\n field: fieldProp,\n condition: conditionProp,\n label,\n mode,\n onChange,\n flat = false\n }: PropsWithoutRef<ConditionInputProps>,\n ref: ConditionInputProps['ref']\n ) => {\n const t = useI18n();\n const { locale } = useConfiguration();\n\n const { name: fieldName, type: fieldType } = fieldProp;\n const basicType = basicFieldMap[fieldType] ?? fieldType;\n\n const field: Field = {\n id: fieldName,\n type: basicType,\n primary: label || fieldName\n };\n\n const fields: AtomicConditionProps['fields'] = [field];\n\n const createConditionForDefaultMode = (value: string | string[]): LeafCondition => {\n let valueObj: LeafCondition['rhs'];\n if (Array.isArray(value)) valueObj = { values: value };\n else valueObj = { value: basicType === 'NUMBER' ? Number(value) : value };\n\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: valueObj\n };\n };\n\n const validComparators: ComparatorsByType[] | undefined =\n fieldType === 'PICKLIST' ? [{ type: 'TEXT', comparators: ['IN'] }] : undefined;\n\n const condition =\n conditionProp ??\n (fieldType === 'BOOLEAN'\n ? undefined\n : getInitConditionForLhs(\n { field: fieldName },\n fields,\n new Set(['LITERAL']),\n validComparators\n ));\n\n const [newCondition, setNewCondition] = useState<LeafCondition | undefined>(condition);\n\n let rhsValue: string | string[] | undefined = fieldType === 'PICKLIST' ? [] : undefined;\n\n if (condition?.rhs) {\n if (hasProp(condition.rhs, 'value')) {\n rhsValue = condition.rhs.value.toString();\n } else if (hasProp(condition.rhs, 'values')) {\n rhsValue = condition.rhs.values.map(String);\n }\n }\n\n const [inputValue, setInputValue] = useState(rhsValue);\n\n useEffect(() => {\n setNewCondition(condition);\n setInputValue(rhsValue);\n }, [conditionProp]);\n\n const handleBlur = () => {\n // trigger onChange only when value has changed\n if (!compareValues(rhsValue, inputValue)) {\n onChange(inputValue ? createConditionForDefaultMode(inputValue) : undefined);\n }\n };\n\n const onRadioButtonChange = (value?: boolean) => {\n const updatedCondition: LeafCondition | undefined =\n value === undefined\n ? undefined\n : {\n lhs: { field: fieldName },\n comparator: value ? 'IS_TRUE' : 'IS_FALSE'\n };\n onChange(updatedCondition);\n };\n\n const onClear = () => {\n onChange(undefined);\n setNewCondition(condition);\n };\n\n const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN' && fieldType !== 'PICKLIST';\n\n let defaultControl: JSX.Element | null = null;\n\n const valueToSet = typeof inputValue === 'string' ? inputValue : undefined;\n\n if (!showAdvanced) {\n switch (fieldType) {\n case 'INTEGER':\n case 'DECIMAL':\n case 'PERCENTAGE':\n case 'CURRENCY':\n defaultControl = (\n <NumberInput\n label={label}\n labelHidden={flat}\n ref={ref}\n value={valueToSet}\n onChange={setInputValue}\n onBlur={handleBlur}\n numberOfDecimals={fieldType === 'INTEGER' ? 0 : undefined}\n />\n );\n break;\n case 'BOOLEAN':\n defaultControl = (\n <StyledConditionRadioGroup\n ref={ref}\n label={label}\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={label}\n ref={ref}\n value={valueToSet}\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={label}\n ref={ref}\n value={valueToSet || 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={label}\n ref={ref}\n value={valueToSet}\n onChange={({ valueAsISOString }) => setInputValue(valueAsISOString)}\n onBlur={({ valueAsISOString }) => {\n onChange(createConditionForDefaultMode(valueAsISOString));\n }}\n />\n );\n break;\n case 'PICKLIST':\n defaultControl = (\n <ValueSelector\n mode='multi-select'\n values={inputValue ?? []}\n selectedField={fieldProp}\n comparator={condition?.comparator ?? defaultComparators[fieldType]}\n onChange={value => {\n setInputValue(value.length > 0 ? value : undefined);\n }}\n onBlur={handleBlur}\n onClear={onClear}\n placeholder={t('all')}\n label={label}\n parameters={[]}\n rhs={{ values: [] }}\n />\n );\n break;\n case 'TEXT':\n case 'EMAIL':\n case 'URL':\n case 'PHONE':\n default:\n defaultControl = (\n <Input\n label={label}\n labelHidden={flat}\n ref={ref}\n value={valueToSet}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setInputValue(e.target.value)}\n onBlur={handleBlur}\n />\n );\n break;\n }\n }\n\n const dialog: CompositeInputProps<AtomicConditionProps & ForwardProps>['dialog'] = {\n renderer: AtomicCondition,\n rendererProps: {\n condition:\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])),\n fields,\n onChange: setNewCondition,\n itemDirection: 'column',\n lhsMode: 'hidden',\n validRhsTypes: new Set(['LITERAL']),\n indicateErrors: false\n },\n onCancel: ({ close }) => {\n setNewCondition(condition);\n close();\n },\n onApply: ({ close }) => {\n onChange(newCondition);\n close();\n }\n };\n\n if (flat) {\n return showAdvanced ? (\n <StyledAtomicCondition\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n condition={\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']))\n }\n onChange={onChange}\n fields={fields}\n itemDirection='column'\n lhsMode='label'\n validRhsTypes={new Set(['LITERAL'])}\n indicateErrors={false}\n />\n ) : (\n <StyledFieldGroup\n name={label}\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n >\n {defaultControl}\n </StyledFieldGroup>\n );\n }\n\n if (showAdvanced) {\n return (\n <CompositeInput\n dialog={dialog}\n label={label}\n onClear={onClear}\n value={\n conditionProp\n ? formatCondition({ condition: conditionProp }, fields, t, {\n locale,\n omitLhs: true\n })\n : undefined\n }\n placeholder={t('all')}\n ref={ref}\n />\n );\n }\n\n return defaultControl;\n }\n);\n\nexport default ConditionInput;\n"]}
1
+ {"version":3,"file":"ConditionInput.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useEffect\n} from 'react';\n\nimport {\n CompositeInput,\n CompositeInputProps,\n ForwardProps,\n hasProp,\n Input,\n RadioButton,\n useI18n,\n useConfiguration,\n DateRangeInput,\n TimeRangeInput,\n useUID,\n NumberRangeInput,\n RadioButtonGroup\n} from '@pega/cosmos-react-core';\nimport { DateRangeCallbackParameter } from '@pega/cosmos-react-core/lib/components/DateTime/DateTime.types';\n\nimport type { ComparatorsByType } from '../ConditionBuilder/core/types';\nimport AtomicCondition, {\n AtomicConditionProps,\n getInitConditionForLhs\n} from '../ConditionBuilder/AtomicCondition';\nimport formatCondition from '../ConditionBuilder/core/formatter';\nimport type { Field, LeafCondition } from '../ConditionBuilder/ConditionBuilder.types';\nimport ValueSelector from '../ConditionBuilder/RhsControls/ValueSelector';\nimport { truncateISODateString } from '../ConditionBuilder/RhsControls';\nimport { convertTimeValueToMs } from '../ConditionBuilder/core/time-utils';\n\nimport type { ConditionInputProps } from './ConditionInput.types';\nimport {\n StyledConditionRadioGroup,\n StyledAtomicCondition,\n StyledFieldGroup\n} from './ConditionInput.styles';\nimport { basicFieldMap, defaultComparators, compareValues, compareRangeValues } from './utils';\n\nconst ConditionInput: FunctionComponent<ConditionInputProps & ForwardProps> = forwardRef(\n (\n {\n field: fieldProp,\n condition: conditionProp,\n label,\n mode,\n onChange,\n flat = false\n }: PropsWithoutRef<ConditionInputProps>,\n ref: ConditionInputProps['ref']\n ) => {\n const id = useUID();\n const t = useI18n();\n const { locale } = useConfiguration();\n\n const { name: fieldName, type: fieldType } = fieldProp;\n const basicType = basicFieldMap[fieldType] ?? fieldType;\n\n const fieldLabel = label || fieldName;\n\n const field: Field = {\n id: fieldName,\n type: basicType,\n primary: fieldLabel\n };\n\n const fields: AtomicConditionProps['fields'] = [field];\n\n const createConditionForDefaultMode = (value: string | string[]): LeafCondition => {\n let valueObj: LeafCondition['rhs'];\n if (Array.isArray(value)) valueObj = { values: value };\n else valueObj = { value };\n\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: valueObj\n };\n };\n\n const convertDateTimeValue = (value: string) => {\n const truncatedValue = truncateISODateString(value, basicType);\n return fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedValue) : truncatedValue;\n };\n\n const createConditionForRange = (value: {\n start: string | number;\n end: string | number;\n }): LeafCondition => {\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: value\n };\n };\n\n const validComparators: ComparatorsByType[] | undefined =\n fieldType === 'PICKLIST' ? [{ type: 'TEXT', comparators: ['IN'] }] : undefined;\n\n const condition =\n conditionProp ??\n (fieldType === 'BOOLEAN'\n ? undefined\n : getInitConditionForLhs(\n { field: fieldName },\n fields,\n new Set(['LITERAL']),\n validComparators\n ));\n\n const [newCondition, setNewCondition] = useState<LeafCondition | undefined>(condition);\n\n let rhsValue: string | string[] | undefined = fieldType === 'PICKLIST' ? [] : undefined;\n let rhsRangeValue:\n | { start: string | number | undefined; end: string | number | undefined }\n | undefined;\n\n if (condition?.rhs) {\n if (hasProp(condition.rhs, 'value')) {\n rhsValue = condition.rhs.value.toString();\n } else if (hasProp(condition.rhs, 'values')) {\n rhsValue = condition.rhs.values.map(String);\n } else if (hasProp(condition.rhs, 'start')) {\n rhsRangeValue = { start: condition.rhs.start, end: condition.rhs.end };\n }\n }\n\n const [inputValue, setInputValue] = useState(rhsValue);\n const [rangeInputValue, setRangeInputValue] = useState(rhsRangeValue);\n\n useEffect(() => {\n setNewCondition(condition);\n setInputValue(rhsValue);\n setRangeInputValue(rhsRangeValue);\n }, [conditionProp]);\n\n const handleBlur = () => {\n // trigger onChange only when value has changed\n if (!compareValues(rhsValue, inputValue)) {\n onChange(inputValue ? createConditionForDefaultMode(inputValue) : undefined);\n }\n };\n\n const handleRangeBlur = (newRangeValue?: { start: string | number; end: string | number }) => {\n // trigger onChange only when value has changed\n if (!compareRangeValues(rhsRangeValue, newRangeValue)) {\n onChange(newRangeValue ? createConditionForRange(newRangeValue) : undefined);\n }\n };\n\n const onRadioButtonChange = (value?: boolean) => {\n const updatedCondition: LeafCondition | undefined =\n value === undefined\n ? undefined\n : {\n lhs: { field: fieldName },\n comparator: value ? 'IS_TRUE' : 'IS_FALSE'\n };\n onChange(updatedCondition);\n };\n\n const onClear = () => {\n onChange(undefined);\n setNewCondition(condition);\n };\n\n const handleDateRangeValueChange = (value: DateRangeCallbackParameter) => {\n setRangeInputValue({\n start: value.start.valueAsISOString || undefined,\n end: value.end.valueAsISOString || undefined\n });\n };\n\n const showAdvanced = mode === 'advanced' && fieldType !== 'BOOLEAN' && fieldType !== 'PICKLIST';\n\n let defaultControl: JSX.Element | null = null;\n\n const valueToSet = typeof inputValue === 'string' ? inputValue : undefined;\n\n if (!showAdvanced) {\n switch (fieldType) {\n case 'INTEGER':\n case 'DECIMAL':\n case 'PERCENTAGE':\n case 'CURRENCY':\n defaultControl = (\n <NumberRangeInput\n id={id}\n label={fieldLabel}\n labelHidden={flat}\n ref={ref}\n value={{\n start: rangeInputValue?.start?.toString() ?? '',\n end: rangeInputValue?.end?.toString() ?? ''\n }}\n onChange={setRangeInputValue}\n onBlur={newRangeValue => {\n handleRangeBlur(\n newRangeValue.start && newRangeValue.end\n ? {\n start: Number(newRangeValue.start),\n end: Number(newRangeValue.end)\n }\n : undefined\n );\n }}\n numberOfDecimals={fieldType === 'INTEGER' ? 0 : undefined}\n />\n );\n break;\n case 'BOOLEAN':\n defaultControl = (\n <RadioButtonGroup\n as={StyledConditionRadioGroup}\n id={id}\n ref={ref}\n label={fieldLabel}\n labelHidden={flat}\n name={fieldName}\n inline\n >\n <RadioButton\n label={t('show_all')}\n checked={condition === undefined}\n onChange={() => onRadioButtonChange()}\n />\n <RadioButton\n label={t('boolean_display_true_label')}\n checked={condition?.comparator === 'IS_TRUE'}\n onChange={() => onRadioButtonChange(true)}\n />\n <RadioButton\n label={t('boolean_display_false_label')}\n checked={condition?.comparator === 'IS_FALSE'}\n onChange={() => onRadioButtonChange(false)}\n />\n </RadioButtonGroup>\n );\n break;\n case 'DATE_ONLY':\n defaultControl = (\n <DateRangeInput\n id={id}\n ref={ref}\n label={fieldLabel}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={newRangeValue => {\n handleRangeBlur(\n newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString\n ? {\n start: convertDateTimeValue(newRangeValue.start.valueAsISOString),\n end: convertDateTimeValue(newRangeValue.end.valueAsISOString)\n }\n : undefined\n );\n }}\n fromLabel=''\n toLabel=''\n info=''\n />\n );\n break;\n case 'TIME_ONLY':\n defaultControl = (\n <TimeRangeInput\n id={id}\n ref={ref}\n mode='time'\n label={fieldLabel}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={newRangeValue => {\n handleRangeBlur(\n newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString\n ? {\n start: convertDateTimeValue(newRangeValue.start.valueAsISOString),\n end: convertDateTimeValue(newRangeValue.end.valueAsISOString)\n }\n : undefined\n );\n }}\n info=''\n />\n );\n break;\n case 'DATE_TIME':\n defaultControl = (\n <TimeRangeInput\n id={id}\n ref={ref}\n mode='datetime'\n label={fieldLabel}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={newRangeValue => {\n handleRangeBlur(\n newRangeValue.start.valueAsISOString && newRangeValue.end.valueAsISOString\n ? {\n start: convertDateTimeValue(newRangeValue.start.valueAsISOString),\n end: convertDateTimeValue(newRangeValue.end.valueAsISOString)\n }\n : undefined\n );\n }}\n info=''\n />\n );\n break;\n case 'PICKLIST':\n defaultControl = (\n <ValueSelector\n label={flat ? undefined : fieldLabel}\n mode='multi-select'\n values={inputValue ?? []}\n selectedField={fieldProp}\n comparator={condition?.comparator ?? defaultComparators[fieldType]}\n onChange={value => {\n setInputValue(value.length > 0 ? value : undefined);\n }}\n onBlur={handleBlur}\n onClear={onClear}\n placeholder={t('all')}\n parameters={[]}\n rhs={{ values: [] }}\n />\n );\n break;\n case 'TEXT':\n case 'EMAIL':\n case 'URL':\n case 'PHONE':\n default:\n defaultControl = (\n <Input\n id={id}\n ref={ref}\n label={fieldLabel}\n labelHidden={flat}\n value={valueToSet}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setInputValue(e.target.value)}\n onBlur={handleBlur}\n />\n );\n break;\n }\n }\n\n const dialog: CompositeInputProps<AtomicConditionProps & ForwardProps>['dialog'] = {\n renderer: AtomicCondition,\n rendererProps: {\n condition:\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])),\n fields,\n onChange: setNewCondition,\n itemDirection: 'column',\n lhsMode: 'hidden',\n validRhsTypes: new Set(['LITERAL']),\n indicateErrors: false,\n rhsLabelHidden: true\n },\n onCancel: ({ close }) => {\n setNewCondition(condition);\n close();\n },\n onApply: ({ close }) => {\n onChange(newCondition);\n close();\n }\n };\n\n if (flat) {\n return showAdvanced ? (\n <StyledAtomicCondition\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n condition={\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']))\n }\n onChange={onChange}\n fields={fields}\n itemDirection='column'\n lhsMode='label'\n validRhsTypes={new Set(['LITERAL'])}\n indicateErrors={false}\n />\n ) : (\n <StyledFieldGroup\n name={label}\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: onClear }]}\n >\n {defaultControl}\n </StyledFieldGroup>\n );\n }\n\n if (showAdvanced) {\n return (\n <CompositeInput\n dialog={dialog}\n label={label}\n onClear={onClear}\n value={\n conditionProp\n ? formatCondition({ condition: conditionProp }, fields, t, {\n locale,\n omitLhs: true\n })\n : undefined\n }\n placeholder={t('all')}\n ref={ref}\n />\n );\n }\n\n return defaultControl;\n }\n);\n\nexport default ConditionInput;\n"]}
@@ -1,5 +1,5 @@
1
1
  import { DefaultTheme } from 'styled-components';
2
- export declare const StyledConditionRadioGroup: import("styled-components").StyledComponent<import("react").FC<import("@pega/cosmos-react-core").RadioCheckGroupProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
2
+ export declare const StyledConditionRadioGroup: import("styled-components").StyledComponent<"fieldset", DefaultTheme, {}, never>;
3
3
  export declare const StyledFieldGroup: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").FieldGroupProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
4
4
  export declare const StyledAtomicCondition: import("styled-components").StyledComponent<import("react").FunctionComponent<import("../ConditionBuilder/AtomicCondition").AtomicConditionProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
5
5
  //# sourceMappingURL=ConditionInput.styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.styles.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.styles.ts"],"names":[],"mappings":"AAAA,OAAe,EAAc,YAAY,EAAO,MAAM,mBAAmB,CAAC;AAa1E,eAAO,MAAM,yBAAyB,mMAIrC,CAAC;AAsBF,eAAO,MAAM,gBAAgB,6MAA+C,CAAC;AAI7E,eAAO,MAAM,qBAAqB,8NAAoD,CAAC"}
1
+ {"version":3,"file":"ConditionInput.styles.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.styles.ts"],"names":[],"mappings":"AAAA,OAAe,EAAc,YAAY,EAAO,MAAM,mBAAmB,CAAC;AAa1E,eAAO,MAAM,yBAAyB,kFAIrC,CAAC;AAsBF,eAAO,MAAM,gBAAgB,6MAA+C,CAAC;AAI7E,eAAO,MAAM,qBAAqB,8NAAoD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import styled, { css } from 'styled-components';
2
- import { RadioButtonGroup, StyledGrid, defaultThemeProp, StyledFieldGroupLegend, StyledButton, FieldGroup } from '@pega/cosmos-react-core';
2
+ import { StyledGrid, defaultThemeProp, StyledFieldGroupLegend, StyledButton, FieldGroup, StyledRadioCheckGroup } from '@pega/cosmos-react-core';
3
3
  import { AtomicCondition } from '../ConditionBuilder';
4
- export const StyledConditionRadioGroup = styled(RadioButtonGroup) `
4
+ export const StyledConditionRadioGroup = styled(StyledRadioCheckGroup) `
5
5
  ${StyledGrid} {
6
6
  display: inline-flex;
7
7
  } ;
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.styles.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAA4B,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAC7D,UAAU;;;CAGb,CAAC;AAEF,yBAAyB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAE1D,MAAM,wBAAwB,GAAG,CAAC,EAChC,KAAK,EAAE,EACL,IAAI,EAAE,EAAE,OAAO,EAAE,EAClB,EACwB,EAAE,EAAE;IAC7B,OAAO,GAAG,CAAA;MACN,sBAAsB;4CACgB,OAAO,CAAC,aAAa,CAAC;;;QAG1D,YAAY;;;;;GAKjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAE7E,gBAAgB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAEvF,qBAAqB,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { ThemeProps, DefaultTheme, css } from 'styled-components';\n\nimport {\n RadioButtonGroup,\n StyledGrid,\n defaultThemeProp,\n StyledFieldGroupLegend,\n StyledButton,\n FieldGroup\n} from '@pega/cosmos-react-core';\n\nimport { AtomicCondition } from '../ConditionBuilder';\n\nexport const 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\nexport const StyledFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);\n\nStyledFieldGroup.defaultProps = defaultThemeProp;\n\nexport const StyledAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);\n\nStyledAtomicCondition.defaultProps = defaultThemeProp;\n"]}
1
+ {"version":3,"file":"ConditionInput.styles.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAA4B,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACV,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAClE,UAAU;;;CAGb,CAAC;AAEF,yBAAyB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAE1D,MAAM,wBAAwB,GAAG,CAAC,EAChC,KAAK,EAAE,EACL,IAAI,EAAE,EAAE,OAAO,EAAE,EAClB,EACwB,EAAE,EAAE;IAC7B,OAAO,GAAG,CAAA;MACN,sBAAsB;4CACgB,OAAO,CAAC,aAAa,CAAC;;;QAG1D,YAAY;;;;;GAKjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAE7E,gBAAgB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAEvF,qBAAqB,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { ThemeProps, DefaultTheme, css } from 'styled-components';\n\nimport {\n StyledGrid,\n defaultThemeProp,\n StyledFieldGroupLegend,\n StyledButton,\n FieldGroup,\n StyledRadioCheckGroup\n} from '@pega/cosmos-react-core';\n\nimport { AtomicCondition } from '../ConditionBuilder';\n\nexport const StyledConditionRadioGroup = styled(StyledRadioCheckGroup)`\n ${StyledGrid} {\n display: inline-flex;\n } ;\n`;\n\nStyledConditionRadioGroup.defaultProps = defaultThemeProp;\n\nconst StyledFieldGroupLegendFn = ({\n theme: {\n base: { palette }\n }\n}: ThemeProps<DefaultTheme>) => {\n return css`\n ${StyledFieldGroupLegend} {\n border-block-start: 0.0625rem solid ${palette['border-line']};\n padding-block-start: 0.625rem;\n\n ${StyledButton} {\n border-color: transparent;\n font-weight: initial;\n }\n }\n `;\n};\n\nexport const StyledFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);\n\nStyledFieldGroup.defaultProps = defaultThemeProp;\n\nexport const StyledAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);\n\nStyledAtomicCondition.defaultProps = defaultThemeProp;\n"]}
@@ -3,4 +3,11 @@ import type { ConditionFieldType } from './ConditionInput.types';
3
3
  export declare const defaultComparators: Record<ConditionFieldType, Comparator>;
4
4
  export declare const basicFieldMap: Record<ConditionFieldType, FieldType>;
5
5
  export declare const compareValues: (value1: string | string[] | undefined, value2: string | string[] | undefined) => boolean;
6
+ export declare const compareRangeValues: (value1: {
7
+ start: string | number | undefined;
8
+ end: string | number | undefined;
9
+ } | undefined, value2: {
10
+ start: string | number | undefined;
11
+ end: string | number | undefined;
12
+ } | undefined) => boolean;
6
13
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAc5D,CAAC;AAEX,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,CActD,CAAC;AAEX,eAAO,MAAM,aAAa,WAChB,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,UAC7B,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,YAiBtC,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAc5D,CAAC;AAEX,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,CActD,CAAC;AAEX,eAAO,MAAM,aAAa,WAChB,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,UAC7B,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,YAiBtC,CAAC;AAEF,eAAO,MAAM,kBAAkB,WACrB;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,UACpF;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,YAS7F,CAAC"}
@@ -3,14 +3,14 @@ export const defaultComparators = {
3
3
  EMAIL: 'CONTAINS',
4
4
  URL: 'CONTAINS',
5
5
  PHONE: 'CONTAINS',
6
- INTEGER: 'EQ',
7
- DECIMAL: 'EQ',
8
- PERCENTAGE: 'EQ',
9
- CURRENCY: 'EQ',
6
+ INTEGER: 'BTW',
7
+ DECIMAL: 'BTW',
8
+ PERCENTAGE: 'BTW',
9
+ CURRENCY: 'BTW',
10
10
  BOOLEAN: 'IS_TRUE',
11
- DATE_ONLY: 'LT',
12
- TIME_ONLY: 'LT',
13
- DATE_TIME: 'LT',
11
+ DATE_ONLY: 'BTW',
12
+ TIME_ONLY: 'BTW',
13
+ DATE_TIME: 'BTW',
14
14
  PICKLIST: 'IN'
15
15
  };
16
16
  export const basicFieldMap = {
@@ -44,4 +44,13 @@ export const compareValues = (value1, value2) => {
44
44
  return false;
45
45
  return value1.every((value, index) => value === value2[index]);
46
46
  };
47
+ export const compareRangeValues = (value1, value2) => {
48
+ // both values are undefined
49
+ if (!value1 && !value2)
50
+ return true;
51
+ // only one value is undefined
52
+ if (!value1 || !value2)
53
+ return false;
54
+ return value1.start === value2.start && value1.end === value2.end;
55
+ };
47
56
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/utils.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,kBAAkB,GAA2C;IACxE,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,IAAI;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAA0C;IAClE,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,MAAM;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAqC,EACrC,MAAqC,EACrC,EAAE;IACF,4BAA4B;IAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEpC,8BAA8B;IAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAErC,iCAAiC;IACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,MAAM,KAAK,MAAM,CAAC;KAC1B;IAED,4CAA4C;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAElD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC","sourcesContent":["import type { Comparator, FieldType } from '../ConditionBuilder/core/types';\n\nimport type { ConditionFieldType } from './ConditionInput.types';\n\nexport const defaultComparators: Record<ConditionFieldType, Comparator> = {\n TEXT: 'CONTAINS',\n EMAIL: 'CONTAINS',\n URL: 'CONTAINS',\n PHONE: 'CONTAINS',\n INTEGER: '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 PICKLIST: 'IN'\n} as const;\n\nexport const basicFieldMap: Record<ConditionFieldType, FieldType> = {\n EMAIL: 'TEXT',\n URL: 'TEXT',\n PHONE: 'TEXT',\n INTEGER: 'NUMBER',\n DECIMAL: 'NUMBER',\n PERCENTAGE: 'NUMBER',\n CURRENCY: 'NUMBER',\n TEXT: 'TEXT',\n BOOLEAN: 'BOOLEAN',\n DATE_ONLY: 'DATE_ONLY',\n TIME_ONLY: 'TIME_ONLY',\n DATE_TIME: 'DATE_TIME',\n PICKLIST: 'TEXT'\n} as const;\n\nexport const compareValues = (\n value1: string | string[] | undefined,\n value2: string | string[] | undefined\n) => {\n // both values are undefined\n if (!value1 && !value2) return true;\n\n // only one value is undefined\n if (!value1 || !value2) return false;\n\n // for strings compare only value\n if (typeof value1 === 'string') {\n return value1 === value2;\n }\n\n // for arrays compare length and every value\n if (value1.length !== value2.length) return false;\n\n return value1.every((value, index) => value === value2[index]);\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/utils.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,kBAAkB,GAA2C;IACxE,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,IAAI;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAA0C;IAClE,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,MAAM;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAqC,EACrC,MAAqC,EACrC,EAAE;IACF,4BAA4B;IAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEpC,8BAA8B;IAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAErC,iCAAiC;IACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,OAAO,MAAM,KAAK,MAAM,CAAC;KAC1B;IAED,4CAA4C;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAElD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAA4F,EAC5F,MAA4F,EAC5F,EAAE;IACF,4BAA4B;IAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEpC,8BAA8B;IAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAErC,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC;AACpE,CAAC,CAAC","sourcesContent":["import type { Comparator, FieldType } from '../ConditionBuilder/core/types';\n\nimport type { ConditionFieldType } from './ConditionInput.types';\n\nexport const defaultComparators: Record<ConditionFieldType, Comparator> = {\n TEXT: 'CONTAINS',\n EMAIL: 'CONTAINS',\n URL: 'CONTAINS',\n PHONE: 'CONTAINS',\n INTEGER: 'BTW',\n DECIMAL: 'BTW',\n PERCENTAGE: 'BTW',\n CURRENCY: 'BTW',\n BOOLEAN: 'IS_TRUE',\n DATE_ONLY: 'BTW',\n TIME_ONLY: 'BTW',\n DATE_TIME: 'BTW',\n PICKLIST: 'IN'\n} as const;\n\nexport const basicFieldMap: Record<ConditionFieldType, FieldType> = {\n EMAIL: 'TEXT',\n URL: 'TEXT',\n PHONE: 'TEXT',\n INTEGER: 'NUMBER',\n DECIMAL: 'NUMBER',\n PERCENTAGE: 'NUMBER',\n CURRENCY: 'NUMBER',\n TEXT: 'TEXT',\n BOOLEAN: 'BOOLEAN',\n DATE_ONLY: 'DATE_ONLY',\n TIME_ONLY: 'TIME_ONLY',\n DATE_TIME: 'DATE_TIME',\n PICKLIST: 'TEXT'\n} as const;\n\nexport const compareValues = (\n value1: string | string[] | undefined,\n value2: string | string[] | undefined\n) => {\n // both values are undefined\n if (!value1 && !value2) return true;\n\n // only one value is undefined\n if (!value1 || !value2) return false;\n\n // for strings compare only value\n if (typeof value1 === 'string') {\n return value1 === value2;\n }\n\n // for arrays compare length and every value\n if (value1.length !== value2.length) return false;\n\n return value1.every((value, index) => value === value2[index]);\n};\n\nexport const compareRangeValues = (\n value1: { start: string | number | undefined; end: string | number | undefined } | undefined,\n value2: { start: string | number | undefined; end: string | number | undefined } | undefined\n) => {\n // both values are undefined\n if (!value1 && !value2) return true;\n\n // only one value is undefined\n if (!value1 || !value2) return false;\n\n return value1.start === value2.start && value1.end === value2.end;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pega/cosmos-react-condition-builder",
3
- "version": "3.0.0-dev.28.0",
3
+ "version": "3.0.0-dev.30.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.28.0",
26
+ "@pega/cosmos-react-core": "3.0.0-dev.30.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",