@pega/cosmos-react-condition-builder 4.0.0-dev.6.1 → 4.0.0-dev.8.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 (60) hide show
  1. package/lib/components/ConditionBuilder/AtomicCondition.d.ts +9 -3
  2. package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
  3. package/lib/components/ConditionBuilder/AtomicCondition.js +45 -10
  4. package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
  5. package/lib/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
  6. package/lib/components/ConditionBuilder/ConditionBuilder.js +26 -3
  7. package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
  8. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +2 -0
  9. package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
  10. package/lib/components/ConditionBuilder/ConditionBuilder.types.js.map +1 -1
  11. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.d.ts.map +1 -1
  12. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.js +9 -1
  13. package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.js.map +1 -1
  14. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.d.ts.map +1 -1
  15. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.js +14 -4
  16. package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.js.map +1 -1
  17. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.d.ts.map +1 -1
  18. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js +9 -2
  19. package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js.map +1 -1
  20. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts +5 -3
  21. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts.map +1 -1
  22. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js +69 -18
  23. package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js.map +1 -1
  24. package/lib/components/ConditionBuilder/RhsControls/index.d.ts +5 -3
  25. package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
  26. package/lib/components/ConditionBuilder/RhsControls/index.js +29 -8
  27. package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
  28. package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
  29. package/lib/components/ConditionBuilder/core/evaluator.js +14 -2
  30. package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
  31. package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
  32. package/lib/components/ConditionBuilder/core/formatter.js +21 -0
  33. package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
  34. package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -1
  35. package/lib/components/ConditionBuilder/core/transformer.js +1 -0
  36. package/lib/components/ConditionBuilder/core/transformer.js.map +1 -1
  37. package/lib/components/ConditionBuilder/core/types.d.ts +2 -2
  38. package/lib/components/ConditionBuilder/core/types.d.ts.map +1 -1
  39. package/lib/components/ConditionBuilder/core/types.js.map +1 -1
  40. package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -1
  41. package/lib/components/ConditionInput/ConditionInput.js +100 -51
  42. package/lib/components/ConditionInput/ConditionInput.js.map +1 -1
  43. package/lib/components/ConditionInput/ConditionInput.styles.d.ts +2 -2
  44. package/lib/components/ConditionInput/ConditionInput.styles.d.ts.map +1 -1
  45. package/lib/components/ConditionInput/ConditionInput.styles.js +4 -4
  46. package/lib/components/ConditionInput/ConditionInput.styles.js.map +1 -1
  47. package/lib/components/ConditionInput/ConditionInput.types.d.ts +3 -0
  48. package/lib/components/ConditionInput/ConditionInput.types.d.ts.map +1 -1
  49. package/lib/components/ConditionInput/ConditionInput.types.js.map +1 -1
  50. package/lib/components/ConditionInput/utils.d.ts +2 -0
  51. package/lib/components/ConditionInput/utils.d.ts.map +1 -1
  52. package/lib/components/ConditionInput/utils.js +23 -0
  53. package/lib/components/ConditionInput/utils.js.map +1 -1
  54. package/lib/components/PromotedFilters/PromotedFilters.d.ts.map +1 -1
  55. package/lib/components/PromotedFilters/PromotedFilters.js +9 -5
  56. package/lib/components/PromotedFilters/PromotedFilters.js.map +1 -1
  57. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts +3 -1
  58. package/lib/components/PromotedFilters/PromotedFilters.types.d.ts.map +1 -1
  59. package/lib/components/PromotedFilters/PromotedFilters.types.js.map +1 -1
  60. package/package.json +2 -2
@@ -4,6 +4,7 @@ import './extendDayJs';
4
4
  import { hasProp } from '@pega/cosmos-react-core';
5
5
  import { getItem } from './utils';
6
6
  const dayjsDateParts = {
7
+ SECONDS: 'second',
7
8
  MINUTES: 'minute',
8
9
  HOURS: 'hour',
9
10
  DAYS: 'day',
@@ -1 +1 @@
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 return node.comparator === 'BTW'\n ? {\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 OR: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: start }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: end }\n }\n }\n ]\n };\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 formatDate = (d: Dayjs) => {\n const isoString = d.toISOString();\n return isoString.substring(0, isoString.indexOf(lhsFieldType === 'DATE_ONLY' ? 'T' : '.'));\n };\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: formatDate(endDate) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: formatDate(startDate) }\n }\n }\n ]\n };\n case 'NEQ':\n return {\n OR: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: formatDate(endDate) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: formatDate(startDate) }\n }\n }\n ]\n };\n case 'GT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: formatDate(endDate) }\n }\n };\n case 'GTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: formatDate(startDate) }\n }\n };\n case 'LT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: formatDate(startDate) }\n }\n };\n case 'LTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: formatDate(endDate) }\n }\n };\n case 'BTW':\n case 'NOT_BTW':\n return getConditionForBetweenComparator(formatDate(startDate), formatDate(endDate), node);\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"]}
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 SECONDS: 'second',\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 return node.comparator === 'BTW'\n ? {\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 OR: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: start }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: end }\n }\n }\n ]\n };\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 formatDate = (d: Dayjs) => {\n const isoString = d.toISOString();\n return isoString.substring(0, isoString.indexOf(lhsFieldType === 'DATE_ONLY' ? 'T' : '.'));\n };\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: formatDate(endDate) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: formatDate(startDate) }\n }\n }\n ]\n };\n case 'NEQ':\n return {\n OR: [\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: formatDate(endDate) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: formatDate(startDate) }\n }\n }\n ]\n };\n case 'GT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: formatDate(endDate) }\n }\n };\n case 'GTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: formatDate(startDate) }\n }\n };\n case 'LT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: formatDate(startDate) }\n }\n };\n case 'LTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: formatDate(endDate) }\n }\n };\n case 'BTW':\n case 'NOT_BTW':\n return getConditionForBetweenComparator(formatDate(startDate), formatDate(endDate), node);\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"]}
@@ -38,10 +38,10 @@ export declare type ComparatorsByType = {
38
38
  };
39
39
  export declare type RHSType = 'LITERAL' | 'FIELD' | 'DATE_FUNCTION' | 'RELATIVE_DATE' | 'PARAMETER';
40
40
  /** Date function types supported on the RHS */
41
- export declare type DateFunction = 'YEARS' | 'QUARTERS' | 'MONTHS' | 'WEEKS' | 'DAYS' | 'HOURS' | 'HOURS_OF_DAY' | 'MONTHS_OF_YEAR' | 'DAYS_OF_MONTH' | 'DAYS_OF_WEEK';
41
+ export declare type DateFunction = 'YEARS' | 'QUARTERS' | 'MONTHS' | 'WEEKS' | 'DAYS' | 'HOURS' | 'MINUTES' | 'SECONDS' | 'HOURS_OF_DAY' | 'MONTHS_OF_YEAR' | 'DAYS_OF_MONTH' | 'DAYS_OF_WEEK';
42
42
  /** "Relative Date" Time Periods supported on the RHS */
43
43
  export declare type TimePeriod = 'LAST' | 'PREVIOUS' | 'CURRENT' | 'NEXT';
44
44
  /** "Relative Date" Date Parts supported on the RHS */
45
- export declare type DatePart = 'MINUTES' | 'HOURS' | 'DAYS' | 'WEEKS' | 'MONTHS' | 'QUARTERS' | 'YEARS';
45
+ export declare type DatePart = 'SECONDS' | 'MINUTES' | 'HOURS' | 'DAYS' | 'WEEKS' | 'MONTHS' | 'QUARTERS' | 'YEARS';
46
46
  export {};
47
47
  //# sourceMappingURL=types.d.ts.map
@@ -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,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,cAAc,GACd,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,SAAS,GACT,SAAS,GACT,cAAc,GACd,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,GAChB,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,QAAQ,GACR,UAAU,GACV,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' | '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 | 'HOURS_OF_DAY'\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 | 'MINUTES'\n | 'SECONDS'\n | 'HOURS_OF_DAY'\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 =\n | 'SECONDS'\n | 'MINUTES'\n | 'HOURS'\n | 'DAYS'\n | 'WEEKS'\n | 'MONTHS'\n | 'QUARTERS'\n | '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,EAWb,MAAM,yBAAyB,CAAC;AAejC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAQlE,QAAA,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,YAAY,CA8YzE,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,EAOlB,MAAM,OAAO,CAAC;AAEf,OAAO,EAGL,YAAY,EAab,MAAM,yBAAyB,CAAC;AAkBjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAkBlE,QAAA,MAAM,cAAc,EAAE,iBAAiB,CAAC,mBAAmB,GAAG,YAAY,CAwdzE,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -1,14 +1,17 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { forwardRef, useState, useEffect } from 'react';
2
+ import { forwardRef, useState, useEffect, useImperativeHandle, useRef } from 'react';
3
3
  import { CompositeInput, hasProp, Input, RadioButton, useI18n, useConfiguration, DateRangeInput, TimeRangeInput, useUID, NumberRangeInput, RadioButtonGroup } from '@pega/cosmos-react-core';
4
4
  import AtomicCondition, { getInitConditionForLhs, isValidCondition } from '../ConditionBuilder/AtomicCondition';
5
5
  import formatCondition from '../ConditionBuilder/core/formatter';
6
6
  import ValueSelector from '../ConditionBuilder/RhsControls/ValueSelector';
7
7
  import { truncateISODateString } from '../ConditionBuilder/RhsControls';
8
8
  import { convertTimeValueToMs } from '../ConditionBuilder/core/time-utils';
9
- import { StyledConditionRadioGroup, StyledAtomicCondition, StyledFieldGroup } from './ConditionInput.styles';
10
- import { basicFieldMap, defaultComparators, compareValues, compareRangeValues } from './utils';
11
- const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp, label, mode, onChange, flat = false }, ref) => {
9
+ import { StyledVerticalAtomicCondition, StyledConditionRadioGroup, StyledVerticalFieldGroup } from './ConditionInput.styles';
10
+ import { basicFieldMap, defaultComparators, compareValues, compareRangeValues, compareCondition } from './utils';
11
+ const isDateValid = (dateTimeParam) => {
12
+ return dateTimeParam.valueAsISOString && !dateTimeParam.state;
13
+ };
14
+ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp, label, mode, onChange, flat = false, handle }, ref) => {
12
15
  const id = useUID();
13
16
  const t = useI18n();
14
17
  const { locale } = useConfiguration();
@@ -32,15 +35,26 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
32
35
  rhs: valueObj
33
36
  };
34
37
  };
35
- const convertDateTimeValue = (value) => {
36
- const truncatedValue = truncateISODateString(value, basicType);
37
- return fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedValue) : truncatedValue;
38
+ const convertDateTimeValue = (range) => {
39
+ if (!isDateValid(range.start) || !isDateValid(range.end))
40
+ return undefined;
41
+ const truncatedStartValue = truncateISODateString(range.start.valueAsISOString, basicType);
42
+ const truncatedEndValue = truncateISODateString(range.end.valueAsISOString, basicType);
43
+ return {
44
+ start: fieldType === 'TIME_ONLY'
45
+ ? convertTimeValueToMs(truncatedStartValue)
46
+ : truncatedStartValue,
47
+ end: fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedEndValue) : truncatedEndValue
48
+ };
38
49
  };
39
50
  const createConditionForRange = (value) => {
51
+ if (!value || value.start === undefined || value.end === undefined)
52
+ return;
40
53
  return {
41
54
  lhs: { field: fieldName },
42
55
  comparator: defaultComparators[fieldType],
43
- rhs: value
56
+ // undefined checked before, type added to satisfy typescript
57
+ rhs: { ...value }
44
58
  };
45
59
  };
46
60
  const validComparators = fieldType === 'PICKLIST' ? [{ type: 'TEXT', comparators: ['IN'] }] : undefined;
@@ -49,6 +63,10 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
49
63
  ? undefined
50
64
  : getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']), validComparators));
51
65
  const [newCondition, setNewCondition] = useState(condition);
66
+ // holds current status of condition to control if invalid values are kept in forms and errors are displaying
67
+ const newConditionStatus = useRef(undefined);
68
+ // status of the form control
69
+ const [status, setStatus] = useState(undefined);
52
70
  let rhsValue = fieldType === 'PICKLIST' ? [] : undefined;
53
71
  let rhsRangeValue;
54
72
  if (condition?.rhs) {
@@ -65,7 +83,10 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
65
83
  const [inputValue, setInputValue] = useState(rhsValue);
66
84
  const [rangeInputValue, setRangeInputValue] = useState(rhsRangeValue);
67
85
  useEffect(() => {
68
- setNewCondition(condition);
86
+ // condition state is updated only when condition status is valid
87
+ // allows to keep invalid values in inputs
88
+ if (!newConditionStatus.current)
89
+ setNewCondition(condition);
69
90
  setInputValue(rhsValue);
70
91
  setRangeInputValue(rhsRangeValue);
71
92
  }, [conditionProp]);
@@ -76,11 +97,37 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
76
97
  onChange(newValue ? createConditionForDefaultMode(newValue) : undefined);
77
98
  }
78
99
  };
79
- const handleRangeBlur = (newRangeValue) => {
100
+ const handleRangeUpdate = (newRangeValue) => {
80
101
  // trigger onChange only when value has changed
81
102
  if (!compareRangeValues(rhsRangeValue, newRangeValue)) {
82
- onChange(newRangeValue ? createConditionForRange(newRangeValue) : undefined);
103
+ onChange(createConditionForRange(newRangeValue));
104
+ }
105
+ };
106
+ const handleRangeBlur = (newRangeValue) => {
107
+ // if both values are undefined, condition is treated as undefined
108
+ // if only one value is undefined, condition is treated as invalid
109
+ if (newRangeValue &&
110
+ ((newRangeValue.start === undefined && newRangeValue.end !== undefined) ||
111
+ (newRangeValue.end === undefined && newRangeValue.start !== undefined))) {
112
+ setStatus('error');
113
+ }
114
+ else {
115
+ setStatus(undefined);
116
+ }
117
+ handleRangeUpdate(newRangeValue);
118
+ };
119
+ const handleDateRangeBlur = (newRangeValue) => {
120
+ // if both timestamps are undefined, condition is treated as undefined
121
+ // if only one value is undefined, or any of them is invalid, then condition is treated as invalid
122
+ if ((newRangeValue.start.valueAsTimestamp !== undefined ||
123
+ newRangeValue.end.valueAsTimestamp !== undefined) &&
124
+ (!isDateValid(newRangeValue.start) || !isDateValid(newRangeValue.end))) {
125
+ setStatus('error');
126
+ }
127
+ else {
128
+ setStatus(undefined);
83
129
  }
130
+ handleRangeUpdate(convertDateTimeValue(newRangeValue));
84
131
  };
85
132
  const onRadioButtonChange = (value) => {
86
133
  const updatedCondition = value === undefined
@@ -91,10 +138,19 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
91
138
  };
92
139
  onChange(updatedCondition);
93
140
  };
94
- const onClear = () => {
141
+ const clearHandle = useRef(null);
142
+ const clear = () => {
95
143
  onChange(undefined);
96
- setNewCondition(condition);
144
+ setNewCondition(undefined);
145
+ setRangeInputValue(undefined);
146
+ newConditionStatus.current = undefined;
147
+ setStatus(undefined);
148
+ if (clearHandle.current)
149
+ clearHandle.current.clear();
97
150
  };
151
+ useImperativeHandle(handle, () => ({
152
+ clear
153
+ }), [clear]);
98
154
  const handleDateRangeValueChange = (value) => {
99
155
  setRangeInputValue({
100
156
  start: value.start.valueAsISOString || undefined,
@@ -114,13 +170,11 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
114
170
  start: rangeInputValue?.start?.toString() ?? '',
115
171
  end: rangeInputValue?.end?.toString() ?? ''
116
172
  }, 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 }));
173
+ handleRangeBlur({
174
+ start: newRangeValue.start ? Number(newRangeValue.start) : undefined,
175
+ end: newRangeValue.end ? Number(newRangeValue.end) : undefined
176
+ });
177
+ }, numberOfDecimals: fieldType === 'INTEGER' ? 0 : undefined, status: status, info: status === 'error' ? t('condition_builder_invalid_number_range') : undefined, handle: clearHandle }));
124
178
  break;
125
179
  case 'BOOLEAN':
126
180
  defaultControl = (_jsxs(RadioButtonGroup, { as: StyledConditionRadioGroup, id: id, 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) })] }));
@@ -128,43 +182,22 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
128
182
  case 'DATE_ONLY':
129
183
  defaultControl = (_jsx(DateRangeInput, { id: id, ref: ref, label: label, labelHidden: flat, value: rangeInputValue
130
184
  ? { 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: '' }));
185
+ : undefined, onChange: handleDateRangeValueChange, onBlur: handleDateRangeBlur, fromLabel: '', toLabel: '', status: status, info: status === 'error' ? t('condition_builder_invalid_date_range') : undefined, handle: clearHandle }));
139
186
  break;
140
187
  case 'TIME_ONLY':
141
188
  defaultControl = (_jsx(TimeRangeInput, { id: id, ref: ref, mode: 'time', label: label, labelHidden: flat, value: rangeInputValue
142
189
  ? { 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: '' }));
190
+ : undefined, onChange: handleDateRangeValueChange, onBlur: handleDateRangeBlur, status: status, info: status === 'error' ? t('condition_builder_invalid_time_range') : undefined, handle: clearHandle }));
151
191
  break;
152
192
  case 'DATE_TIME':
153
193
  defaultControl = (_jsx(TimeRangeInput, { id: id, ref: ref, mode: 'datetime', label: label, labelHidden: flat, value: rangeInputValue
154
194
  ? { 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: '' }));
195
+ : undefined, onChange: handleDateRangeValueChange, onBlur: handleDateRangeBlur, status: status, info: status === 'error' ? t('condition_builder_invalid_date_range') : undefined, handle: clearHandle }));
163
196
  break;
164
197
  case 'PICKLIST':
165
198
  defaultControl = (_jsx(ValueSelector, { label: flat ? undefined : label, mode: 'multi-select', values: inputValue ?? [], selectedField: fieldProp, comparator: condition?.comparator ?? defaultComparators[fieldType], onChange: value => {
166
199
  setInputValue(value.length > 0 ? value : undefined);
167
- }, onBlur: handleBlur, onClear: onClear, placeholder: t('all'), parameters: [], rhs: { values: [] } }));
200
+ }, onBlur: handleBlur, onClear: clear, placeholder: t('all'), parameters: [], rhs: { values: [] }, handle: clearHandle }));
168
201
  break;
169
202
  case 'TEXT':
170
203
  case 'EMAIL':
@@ -185,24 +218,40 @@ const ConditionInput = forwardRef(({ field: fieldProp, condition: conditionProp,
185
218
  itemDirection: 'column',
186
219
  lhsMode: 'hidden',
187
220
  validRhsTypes: new Set(['LITERAL']),
188
- indicateErrors: false,
221
+ indicateErrors: !!status,
189
222
  rhsLabelHidden: true
190
223
  },
191
224
  onCancel: ({ close }) => {
192
225
  setNewCondition(condition);
226
+ setStatus(undefined);
193
227
  close();
194
228
  },
195
229
  onApply: ({ close }) => {
196
- onChange(newCondition && isValidCondition(newCondition, fields, true) ? newCondition : undefined);
197
- close();
230
+ setStatus(undefined);
231
+ if (newCondition === undefined || isValidCondition(newCondition, fields, true)) {
232
+ onChange(newCondition);
233
+ close();
234
+ }
235
+ else {
236
+ setStatus('error');
237
+ }
198
238
  }
199
239
  };
200
240
  if (flat) {
201
- return showAdvanced ? (_jsx(StyledAtomicCondition, { collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: onClear }], condition: newCondition ??
202
- getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])), onChange: onChange, fields: fields, itemDirection: 'column', lhsMode: 'label', validRhsTypes: new Set(['LITERAL']), indicateErrors: false })) : (_jsx(StyledFieldGroup, { name: label, collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: onClear }], children: defaultControl }));
241
+ return showAdvanced ? (_jsx(StyledVerticalAtomicCondition, { collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: clear }], condition: newCondition ??
242
+ getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL'])), onBlur: (value) => {
243
+ // comparing with conditionProp as it is not initialized as default condition
244
+ if (!compareCondition(value, conditionProp)) {
245
+ onChange(value);
246
+ }
247
+ setStatus(newConditionStatus.current);
248
+ }, onChange: (value, conditionStatus) => {
249
+ newConditionStatus.current = conditionStatus;
250
+ setNewCondition(value);
251
+ }, fields: fields, itemDirection: 'column', lhsMode: 'label', validRhsTypes: new Set(['LITERAL']), indicateErrors: status === 'error', ref: ref, handle: clearHandle })) : (_jsx(StyledVerticalFieldGroup, { name: label, collapsible: true, actions: [{ id: 'clear', text: t('clear'), onClick: clear }], children: defaultControl }));
203
252
  }
204
253
  if (showAdvanced) {
205
- return (_jsx(CompositeInput, { dialog: dialog, label: label, onClear: onClear, value: conditionProp
254
+ return (_jsx(CompositeInput, { dialog: dialog, label: label, onClear: clear, value: conditionProp
206
255
  ? formatCondition({ condition: conditionProp }, fields, t, {
207
256
  locale,
208
257
  omitLhs: true
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useState,\n ChangeEvent,\n useEffect\n} from 'react';\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 isValidCondition\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 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 };\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 const newValue = typeof inputValue === 'string' ? inputValue.trim() : inputValue;\n // trigger onChange only when value has changed\n if (!compareValues(rhsValue, newValue)) {\n onChange(newValue ? createConditionForDefaultMode(newValue) : 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={label}\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={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 </RadioButtonGroup>\n );\n break;\n case 'DATE_ONLY':\n defaultControl = (\n <DateRangeInput\n id={id}\n ref={ref}\n label={label}\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={label}\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={label}\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 : label}\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={label}\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(\n newCondition && isValidCondition(newCondition, fields, true) ? newCondition : undefined\n );\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 useImperativeHandle,\n useRef\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 FormControlProps,\n HandleValue\n} from '@pega/cosmos-react-core';\nimport {\n DateRangeCallbackParameter,\n DateTimeCallbackParameter\n} 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 isValidCondition\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 StyledVerticalAtomicCondition,\n StyledConditionRadioGroup,\n StyledVerticalFieldGroup\n} from './ConditionInput.styles';\nimport {\n basicFieldMap,\n defaultComparators,\n compareValues,\n compareRangeValues,\n compareCondition\n} from './utils';\n\nconst isDateValid = (dateTimeParam: DateTimeCallbackParameter) => {\n return dateTimeParam.valueAsISOString && !dateTimeParam.state;\n};\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 handle\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 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 };\n\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n rhs: valueObj\n };\n };\n\n const convertDateTimeValue = (range: DateRangeCallbackParameter) => {\n if (!isDateValid(range.start) || !isDateValid(range.end)) return undefined;\n\n const truncatedStartValue = truncateISODateString(range.start.valueAsISOString, basicType);\n const truncatedEndValue = truncateISODateString(range.end.valueAsISOString, basicType);\n return {\n start:\n fieldType === 'TIME_ONLY'\n ? convertTimeValueToMs(truncatedStartValue)\n : truncatedStartValue,\n end: fieldType === 'TIME_ONLY' ? convertTimeValueToMs(truncatedEndValue) : truncatedEndValue\n };\n };\n\n const createConditionForRange = (\n value:\n | {\n start: string | number | undefined;\n end: string | number | undefined;\n }\n | undefined\n ): LeafCondition | undefined => {\n if (!value || value.start === undefined || value.end === undefined) return;\n\n return {\n lhs: { field: fieldName },\n comparator: defaultComparators[fieldType],\n // undefined checked before, type added to satisfy typescript\n rhs: { ...value } as { start: string | number; end: string | number }\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 // holds current status of condition to control if invalid values are kept in forms and errors are displaying\n const newConditionStatus = useRef<'error' | undefined>(undefined);\n\n // status of the form control\n const [status, setStatus] = useState<FormControlProps['status']>(undefined);\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 // condition state is updated only when condition status is valid\n // allows to keep invalid values in inputs\n if (!newConditionStatus.current) setNewCondition(condition);\n setInputValue(rhsValue);\n setRangeInputValue(rhsRangeValue);\n }, [conditionProp]);\n\n const handleBlur = () => {\n const newValue = typeof inputValue === 'string' ? inputValue.trim() : inputValue;\n // trigger onChange only when value has changed\n if (!compareValues(rhsValue, newValue)) {\n onChange(newValue ? createConditionForDefaultMode(newValue) : undefined);\n }\n };\n\n const handleRangeUpdate = (newRangeValue?: {\n start: string | number | undefined;\n end: string | number | undefined;\n }) => {\n // trigger onChange only when value has changed\n if (!compareRangeValues(rhsRangeValue, newRangeValue)) {\n onChange(createConditionForRange(newRangeValue));\n }\n };\n\n const handleRangeBlur = (newRangeValue?: {\n start: string | number | undefined;\n end: string | number | undefined;\n }) => {\n // if both values are undefined, condition is treated as undefined\n // if only one value is undefined, condition is treated as invalid\n if (\n newRangeValue &&\n ((newRangeValue.start === undefined && newRangeValue.end !== undefined) ||\n (newRangeValue.end === undefined && newRangeValue.start !== undefined))\n ) {\n setStatus('error');\n } else {\n setStatus(undefined);\n }\n\n handleRangeUpdate(newRangeValue);\n };\n\n const handleDateRangeBlur = (newRangeValue: DateRangeCallbackParameter) => {\n // if both timestamps are undefined, condition is treated as undefined\n // if only one value is undefined, or any of them is invalid, then condition is treated as invalid\n if (\n (newRangeValue.start.valueAsTimestamp !== undefined ||\n newRangeValue.end.valueAsTimestamp !== undefined) &&\n (!isDateValid(newRangeValue.start) || !isDateValid(newRangeValue.end))\n ) {\n setStatus('error');\n } else {\n setStatus(undefined);\n }\n\n handleRangeUpdate(convertDateTimeValue(newRangeValue));\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 clearHandle = useRef<HandleValue>(null);\n\n const clear = () => {\n onChange(undefined);\n setNewCondition(undefined);\n setRangeInputValue(undefined);\n newConditionStatus.current = undefined;\n setStatus(undefined);\n if (clearHandle.current) clearHandle.current.clear();\n };\n\n useImperativeHandle(\n handle,\n () => ({\n clear\n }),\n [clear]\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={label}\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 start: newRangeValue.start ? Number(newRangeValue.start) : undefined,\n end: newRangeValue.end ? Number(newRangeValue.end) : undefined\n });\n }}\n numberOfDecimals={fieldType === 'INTEGER' ? 0 : undefined}\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_number_range') : undefined}\n handle={clearHandle}\n />\n );\n break;\n case 'BOOLEAN':\n defaultControl = (\n <RadioButtonGroup\n as={StyledConditionRadioGroup}\n id={id}\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 </RadioButtonGroup>\n );\n break;\n case 'DATE_ONLY':\n defaultControl = (\n <DateRangeInput\n id={id}\n ref={ref}\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={handleDateRangeBlur}\n fromLabel=''\n toLabel=''\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_date_range') : undefined}\n handle={clearHandle}\n />\n );\n break;\n case 'TIME_ONLY':\n defaultControl = (\n <TimeRangeInput\n id={id}\n ref={ref}\n mode='time'\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={handleDateRangeBlur}\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_time_range') : undefined}\n handle={clearHandle}\n />\n );\n break;\n case 'DATE_TIME':\n defaultControl = (\n <TimeRangeInput\n id={id}\n ref={ref}\n mode='datetime'\n label={label}\n labelHidden={flat}\n value={\n rangeInputValue\n ? { start: rangeInputValue.start, end: rangeInputValue.end }\n : undefined\n }\n onChange={handleDateRangeValueChange}\n onBlur={handleDateRangeBlur}\n status={status}\n info={status === 'error' ? t('condition_builder_invalid_date_range') : undefined}\n handle={clearHandle}\n />\n );\n break;\n case 'PICKLIST':\n defaultControl = (\n <ValueSelector\n label={flat ? undefined : label}\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={clear}\n placeholder={t('all')}\n parameters={[]}\n rhs={{ values: [] }}\n handle={clearHandle}\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={label}\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: !!status,\n rhsLabelHidden: true\n },\n onCancel: ({ close }) => {\n setNewCondition(condition);\n setStatus(undefined);\n close();\n },\n onApply: ({ close }) => {\n setStatus(undefined);\n\n if (newCondition === undefined || isValidCondition(newCondition, fields, true)) {\n onChange(newCondition);\n close();\n } else {\n setStatus('error');\n }\n }\n };\n\n if (flat) {\n return showAdvanced ? (\n <StyledVerticalAtomicCondition\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: clear }]}\n condition={\n newCondition ??\n getInitConditionForLhs({ field: fieldName }, fields, new Set(['LITERAL']))\n }\n onBlur={(value: LeafCondition) => {\n // comparing with conditionProp as it is not initialized as default condition\n if (!compareCondition(value, conditionProp)) {\n onChange(value);\n }\n\n setStatus(newConditionStatus.current);\n }}\n onChange={(value: LeafCondition, conditionStatus?: 'error') => {\n newConditionStatus.current = conditionStatus;\n setNewCondition(value);\n }}\n fields={fields}\n itemDirection='column'\n lhsMode='label'\n validRhsTypes={new Set(['LITERAL'])}\n indicateErrors={status === 'error'}\n ref={ref}\n handle={clearHandle}\n />\n ) : (\n <StyledVerticalFieldGroup\n name={label}\n collapsible\n actions={[{ id: 'clear', text: t('clear'), onClick: clear }]}\n >\n {defaultControl}\n </StyledVerticalFieldGroup>\n );\n }\n\n if (showAdvanced) {\n return (\n <CompositeInput\n dialog={dialog}\n label={label}\n onClear={clear}\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
2
  export declare const StyledConditionRadioGroup: import("styled-components").StyledComponent<"fieldset", DefaultTheme, {}, never>;
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
- export declare const StyledAtomicCondition: import("styled-components").StyledComponent<import("react").FunctionComponent<import("../ConditionBuilder/AtomicCondition").AtomicConditionProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
3
+ export declare const StyledVerticalFieldGroup: import("styled-components").StyledComponent<import("react").FunctionComponent<import("@pega/cosmos-react-core").FieldGroupProps & import("@pega/cosmos-react-core").ForwardProps>, DefaultTheme, {}, never>;
4
+ export declare const StyledVerticalAtomicCondition: 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,kFAIrC,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,wBAAwB,6MAA+C,CAAC;AAIrF,eAAO,MAAM,6BAA6B,8NAAoD,CAAC"}
@@ -20,8 +20,8 @@ const StyledFieldGroupLegendFn = ({ theme: { base: { palette } } }) => {
20
20
  }
21
21
  `;
22
22
  };
23
- export const StyledFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);
24
- StyledFieldGroup.defaultProps = defaultThemeProp;
25
- export const StyledAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);
26
- StyledAtomicCondition.defaultProps = defaultThemeProp;
23
+ export const StyledVerticalFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);
24
+ StyledVerticalFieldGroup.defaultProps = defaultThemeProp;
25
+ export const StyledVerticalAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);
26
+ StyledVerticalAtomicCondition.defaultProps = defaultThemeProp;
27
27
  //# sourceMappingURL=ConditionInput.styles.js.map
@@ -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,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"]}
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,wBAAwB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAErF,wBAAwB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEzD,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,wBAAwB,CAAC,CAAC;AAE/F,6BAA6B,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 StyledVerticalFieldGroup = styled(FieldGroup)(StyledFieldGroupLegendFn);\n\nStyledVerticalFieldGroup.defaultProps = defaultThemeProp;\n\nexport const StyledVerticalAtomicCondition = styled(AtomicCondition)(StyledFieldGroupLegendFn);\n\nStyledVerticalAtomicCondition.defaultProps = defaultThemeProp;\n"]}
@@ -1,4 +1,5 @@
1
1
  import { Ref } from 'react';
2
+ import { HandleValue } from '@pega/cosmos-react-core';
2
3
  import type { LeafCondition, ValueSelection } from '../ConditionBuilder';
3
4
  export declare type ConditionFieldType = 'TEXT' | 'EMAIL' | 'URL' | 'PHONE' | 'INTEGER' | 'DECIMAL' | 'PERCENTAGE' | 'BOOLEAN' | 'CURRENCY' | 'DATE_ONLY' | 'TIME_ONLY' | 'DATE_TIME' | 'PICKLIST';
4
5
  export interface ConditionField {
@@ -25,5 +26,7 @@ export interface ConditionInputProps {
25
26
  ref?: Ref<HTMLInputElement>;
26
27
  /** Whether advanced view should be wrapped in popup or just flat. */
27
28
  flat?: boolean;
29
+ /** Imperative handle */
30
+ handle?: Ref<HandleValue>;
28
31
  }
29
32
  //# sourceMappingURL=ConditionInput.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.types.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,oBAAY,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,oCAAoC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,oBAAY,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,KAAK,EAAE,cAAc,CAAC;IACtB,uEAAuE;IACvE,IAAI,EAAE,kBAAkB,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,sCAAsC;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,qEAAqE;IACrE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
1
+ {"version":3,"file":"ConditionInput.types.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,oBAAY,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,SAAS,GACT,SAAS,GACT,YAAY,GACZ,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,oCAAoC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACjD;AAED,oBAAY,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,KAAK,EAAE,cAAc,CAAC;IACtB,uEAAuE;IACvE,IAAI,EAAE,kBAAkB,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C,sCAAsC;IACtC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC5B,qEAAqE;IACrE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wBAAwB;IACxB,MAAM,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionInput.types.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport type { LeafCondition, ValueSelection } from '../ConditionBuilder';\n\nexport type ConditionFieldType =\n | 'TEXT'\n | 'EMAIL'\n | 'URL'\n | 'PHONE'\n | 'INTEGER'\n | 'DECIMAL'\n | 'PERCENTAGE'\n | 'BOOLEAN'\n | 'CURRENCY'\n | 'DATE_ONLY'\n | 'TIME_ONLY'\n | 'DATE_TIME'\n | 'PICKLIST';\n\nexport interface ConditionField {\n /** Unique field identifier. */\n name: string;\n /** Type of the field. */\n type: ConditionFieldType;\n /** List of possible field values */\n possibleValues?: ValueSelection<ConditionField>;\n}\n\nexport type ConditionInputMode = 'default' | 'advanced' | 'predefined';\n\nexport interface ConditionInputProps {\n /** Definition of the field the condition is created for. */\n field: ConditionField;\n /** Display mode. Either with default comparator or the full-fledged */\n mode: ConditionInputMode;\n /** Label for the input. */\n label?: string;\n /** Condition value. */\n condition?: LeafCondition;\n /** Callback invoked when user changes the condition. */\n onChange: (condition?: LeafCondition) => void;\n /** Reference to the input element. */\n ref?: Ref<HTMLInputElement>;\n /** Whether advanced view should be wrapped in popup or just flat. */\n flat?: boolean;\n}\n"]}
1
+ {"version":3,"file":"ConditionInput.types.js","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport { HandleValue } from '@pega/cosmos-react-core';\n\nimport type { LeafCondition, ValueSelection } from '../ConditionBuilder';\n\nexport type ConditionFieldType =\n | 'TEXT'\n | 'EMAIL'\n | 'URL'\n | 'PHONE'\n | 'INTEGER'\n | 'DECIMAL'\n | 'PERCENTAGE'\n | 'BOOLEAN'\n | 'CURRENCY'\n | 'DATE_ONLY'\n | 'TIME_ONLY'\n | 'DATE_TIME'\n | 'PICKLIST';\n\nexport interface ConditionField {\n /** Unique field identifier. */\n name: string;\n /** Type of the field. */\n type: ConditionFieldType;\n /** List of possible field values */\n possibleValues?: ValueSelection<ConditionField>;\n}\n\nexport type ConditionInputMode = 'default' | 'advanced' | 'predefined';\n\nexport interface ConditionInputProps {\n /** Definition of the field the condition is created for. */\n field: ConditionField;\n /** Display mode. Either with default comparator or the full-fledged */\n mode: ConditionInputMode;\n /** Label for the input. */\n label?: string;\n /** Condition value. */\n condition?: LeafCondition;\n /** Callback invoked when user changes the condition. */\n onChange: (condition?: LeafCondition) => void;\n /** Reference to the input element. */\n ref?: Ref<HTMLInputElement>;\n /** Whether advanced view should be wrapped in popup or just flat. */\n flat?: boolean;\n /** Imperative handle */\n handle?: Ref<HandleValue>;\n}\n"]}