@pega/cosmos-react-condition-builder 8.8.0 → 9.0.0-build.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/ConditionBuilder/AtomicCondition.d.ts +2 -0
- package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.d.ts +2 -3
- package/lib/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.js +32 -21
- package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts +2 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.styles.js.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +27 -7
- package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.types.js.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js +1 -1
- package/lib/components/ConditionBuilder/RhsControls/FieldSelector.js.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts +0 -2
- package/lib/components/ConditionBuilder/RhsControls/NumericInput.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/NumericInput.js +5 -21
- package/lib/components/ConditionBuilder/RhsControls/NumericInput.js.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js +2 -1
- package/lib/components/ConditionBuilder/RhsControls/TimePeriodInput.js.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/index.d.ts +4 -2
- package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/index.js +34 -21
- package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
- package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/core/evaluator.js +107 -46
- package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
- package/lib/components/ConditionBuilder/core/formatter.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/core/formatter.js +4 -51
- package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
- package/lib/components/ConditionBuilder/core/transformer.d.ts +1 -1
- package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/core/transformer.js +7 -7
- package/lib/components/ConditionBuilder/core/transformer.js.map +1 -1
- package/lib/components/ConditionBuilder/index.d.ts +2 -1
- package/lib/components/ConditionBuilder/index.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/index.js.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.js +10 -7
- package/lib/components/ConditionInput/ConditionInput.js.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.styles.d.ts +1 -1
- package/lib/components/ConditionInput/ConditionInput.styles.d.ts.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.types.d.ts +0 -2
- package/lib/components/ConditionInput/ConditionInput.types.d.ts.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.types.js.map +1 -1
- package/lib/components/PromotedFilters/ConditionSelector.d.ts.map +1 -1
- package/lib/components/PromotedFilters/ConditionSelector.js +10 -4
- package/lib/components/PromotedFilters/ConditionSelector.js.map +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.d.ts.map +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.js +12 -2
- package/lib/components/PromotedFilters/PromotedFilters.js.map +1 -1
- package/package.json +2 -2
- package/lib/components/ConditionBuilder/RhsControls/CSVInput.d.ts +0 -18
- package/lib/components/ConditionBuilder/RhsControls/CSVInput.d.ts.map +0 -1
- package/lib/components/ConditionBuilder/RhsControls/CSVInput.js +0 -59
- package/lib/components/ConditionBuilder/RhsControls/CSVInput.js.map +0 -1
- package/lib/components/ConditionBuilder/RhsControls/NumericRangeInput.d.ts +0 -31
- package/lib/components/ConditionBuilder/RhsControls/NumericRangeInput.d.ts.map +0 -1
- package/lib/components/ConditionBuilder/RhsControls/NumericRangeInput.js +0 -52
- package/lib/components/ConditionBuilder/RhsControls/NumericRangeInput.js.map +0 -1
|
@@ -54,6 +54,7 @@ function formatLiteralValue(type, rhsValue, locale, translate) {
|
|
|
54
54
|
return getFormattedValue(rhsValue.toString(), locale, undefined, {
|
|
55
55
|
useGrouping: true
|
|
56
56
|
});
|
|
57
|
+
break;
|
|
57
58
|
default:
|
|
58
59
|
return rhsValue.toString();
|
|
59
60
|
}
|
|
@@ -61,8 +62,6 @@ function formatLiteralValue(type, rhsValue, locale, translate) {
|
|
|
61
62
|
/** Returns a user-friendly text representation of a given leaf condition */
|
|
62
63
|
function formatLeafCondition(leaf, fields, translate, { locale = 'en-US', omitLhs = false } = {}) {
|
|
63
64
|
const { lhs, comparator, rhs } = leaf;
|
|
64
|
-
// Epsilon value to handle floating point rounding errors
|
|
65
|
-
const EPSILON = 1e-3;
|
|
66
65
|
// Determine texts for LHS and RHS
|
|
67
66
|
const lhsField = getItem(fields, lhs.field); // Expecting valid inputs
|
|
68
67
|
const lhsText = omitLhs ? '' : `${lhsField.primary} `;
|
|
@@ -161,19 +160,6 @@ function formatLeafCondition(leaf, fields, translate, { locale = 'en-US', omitLh
|
|
|
161
160
|
default: // Not needed
|
|
162
161
|
}
|
|
163
162
|
}
|
|
164
|
-
else if (
|
|
165
|
-
// For when we store percents as decimals in the database
|
|
166
|
-
lhsField.unit === 'percent_1' &&
|
|
167
|
-
lhsField.type === 'DECIMAL') {
|
|
168
|
-
// Checks for any floating point rounding errors due to storing percents as decimals
|
|
169
|
-
// and removes trailing zeros
|
|
170
|
-
const scaledValue = Number(rhs.value) * 100;
|
|
171
|
-
const isWhole = Math.abs(Number(scaledValue) - Math.round(Number(scaledValue))) < EPSILON;
|
|
172
|
-
const normalizedValue = isWhole
|
|
173
|
-
? Math.trunc(Number(scaledValue))
|
|
174
|
-
: Number(scaledValue).toFixed(2);
|
|
175
|
-
rhsText = formatLiteralValue(lhsField.type, normalizedValue, locale, translate);
|
|
176
|
-
}
|
|
177
163
|
else {
|
|
178
164
|
// If RHS is a single literal value
|
|
179
165
|
rhsText = formatLiteralValue(lhsField.type, rhs.value, locale, translate);
|
|
@@ -188,44 +174,11 @@ function formatLeafCondition(leaf, fields, translate, { locale = 'en-US', omitLh
|
|
|
188
174
|
rhsText = parameterValue?.primary ?? '';
|
|
189
175
|
}
|
|
190
176
|
else if (hasProp(rhs, 'values')) {
|
|
191
|
-
|
|
192
|
-
if (lhsField.unit === 'percent_1') {
|
|
193
|
-
rhsText = rhs.values
|
|
194
|
-
.map(v => {
|
|
195
|
-
const scaledValue = Number(v) * 100;
|
|
196
|
-
const isWhole = Math.abs(scaledValue - Math.round(scaledValue)) < EPSILON;
|
|
197
|
-
return isWhole ? Math.trunc(scaledValue) : scaledValue.toFixed(2);
|
|
198
|
-
})
|
|
199
|
-
.join(', ');
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
rhsText = rhs.values.join(', ');
|
|
203
|
-
}
|
|
177
|
+
rhsText = rhs.values.join(', ');
|
|
204
178
|
}
|
|
205
179
|
else if (hasProp(rhs, 'start')) {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
// Handles when percents are stored as decimals in the database
|
|
209
|
-
if (lhsField.unit === 'percent_1') {
|
|
210
|
-
const scaledStartValue = Number(rhs.start) * 100;
|
|
211
|
-
const scaledEndValue = Number(rhs.end) * 100;
|
|
212
|
-
// Checks for floating point rounding errors
|
|
213
|
-
const isStartWhole = Math.abs(Number(scaledStartValue) - Math.round(Number(scaledStartValue))) < EPSILON;
|
|
214
|
-
const isEndWhole = Math.abs(Number(scaledEndValue) - Math.round(Number(scaledEndValue))) < EPSILON;
|
|
215
|
-
// Normalizes values to remove trailing zeros in case of floating point rounding errors
|
|
216
|
-
const normalizedStartValue = isStartWhole
|
|
217
|
-
? Math.trunc(Number(scaledStartValue))
|
|
218
|
-
: Number(scaledStartValue).toFixed(2);
|
|
219
|
-
const normalizedEndValue = isEndWhole
|
|
220
|
-
? Math.trunc(Number(scaledEndValue))
|
|
221
|
-
: Number(scaledEndValue).toFixed(2);
|
|
222
|
-
startValue = formatLiteralValue(lhsField.type, normalizedStartValue, locale, translate);
|
|
223
|
-
endValue = formatLiteralValue(lhsField.type, normalizedEndValue, locale, translate);
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
startValue = formatLiteralValue(lhsField.type, rhs.start, locale, translate);
|
|
227
|
-
endValue = formatLiteralValue(lhsField.type, rhs.end, locale, translate);
|
|
228
|
-
}
|
|
180
|
+
const startValue = formatLiteralValue(lhsField.type, rhs.start, locale, translate);
|
|
181
|
+
const endValue = formatLiteralValue(lhsField.type, rhs.end, locale, translate);
|
|
229
182
|
rhsText = `${startValue} - ${endValue}`;
|
|
230
183
|
}
|
|
231
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/formatter.ts"],"names":[],"mappings":"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","sourcesContent":["// cspell:words LPAREN RPAREN\n// FIXME: TR (Several constructs in this file need to be localized)\nimport { formatDateTime, hasProp, isValidDate, parseToDate } from '@pega/cosmos-react-core';\nimport type { TranslationPack } from '@pega/cosmos-react-core';\nimport { getFormattedValue } from '@pega/cosmos-react-core/lib/components/Number/utils';\nimport type { TranslationFunction } from '@pega/cosmos-react-core/lib/i18n/translate';\nimport {\n getDayOfWeekNamesMap,\n getQuarter\n} from '@pega/cosmos-react-core/lib/components/DateTime/Input/utils';\n\nimport type { Condition, LeafCondition, Field } from '../ConditionBuilder.types';\n\nimport { getItem } from './utils';\nimport type { DatePart, FieldType, TimePeriod } from './types';\n\nconst LPAREN = '(';\nconst RPAREN = ')';\n\n/** Options object optionally passed to formatCondition method. */\ninterface ConditionFormatOptions {\n locale?: string;\n omitLhs?: boolean;\n}\n\nexport function formatRelativeDate(\n translate: TranslationFunction<TranslationPack>,\n timePeriod: TimePeriod,\n datePart: DatePart,\n interval?: number\n): string {\n const translationKey =\n timePeriod === 'CURRENT'\n ? `condition_builder_current_${datePart.toLowerCase().slice(0, -1)}`\n : `condition_builder_${timePeriod.toLowerCase()}_X_${datePart.toLowerCase()}`;\n return translate(translationKey as keyof TranslationPack, [interval ?? 0], {\n count: interval ?? 0\n });\n}\n\nfunction formatLiteralValue(\n type: FieldType,\n rhsValue: string | number,\n locale: string,\n translate: TranslationFunction<TranslationPack>\n): string {\n switch (type) {\n case 'TIME_ONLY':\n // For these cases, rhs.value is stored as # of milliseconds since day-start\n return (rhsValue || rhsValue === 0) && isValidDate(parseToDate(rhsValue))\n ? formatDateTime(parseToDate(rhsValue), {\n t: translate,\n locale,\n format: 'medium',\n variant: 'time',\n timeZone: 'UTC'\n })\n : '';\n case 'DATE_ONLY':\n // For these cases, rhs.value is stored as # of milliseconds since day-start\n return (rhsValue || rhsValue === 0) && isValidDate(parseToDate(rhsValue))\n ? formatDateTime(parseToDate(rhsValue), {\n t: translate,\n locale,\n format: 'numeric',\n variant: 'date',\n timeZone: 'UTC'\n })\n : '';\n case 'DATE_TIME':\n // For these cases, rhs.value is stored as # of milliseconds since day-start\n return (rhsValue || rhsValue === 0) && isValidDate(parseToDate(rhsValue))\n ? formatDateTime(parseToDate(rhsValue), {\n t: translate,\n locale,\n format: 'numeric',\n variant: 'datetime',\n timeZone: 'UTC'\n })\n : '';\n case 'DECIMAL':\n case 'INTEGER':\n return getFormattedValue(rhsValue.toString(), locale, undefined, {\n useGrouping: true\n });\n default:\n return rhsValue.toString();\n }\n}\n\n/** Returns a user-friendly text representation of a given leaf condition */\nfunction formatLeafCondition(\n leaf: LeafCondition,\n fields: Field[],\n translate: TranslationFunction<TranslationPack>,\n { locale = 'en-US', omitLhs = false }: ConditionFormatOptions = {}\n): string {\n const { lhs, comparator, rhs } = leaf;\n\n // Epsilon value to handle floating point rounding errors\n const EPSILON = 1e-3;\n\n // Determine texts for LHS and RHS\n const lhsField = getItem(fields, lhs.field) as Field; // Expecting valid inputs\n const lhsText = omitLhs ? '' : `${lhsField.primary} `;\n let rhsText = '';\n if (!hasProp(lhsField, 'type')) return '';\n if (rhs) {\n if (hasProp(rhs, 'field')) {\n // If RHS is another field\n const rhsField = getItem(fields, rhs.field) as Field; // Expecting valid inputs\n rhsText = rhsField.primary;\n } else if (hasProp(rhs, 'value')) {\n if (hasProp(rhs, 'dateFunction')) {\n // If RHS is a date function value\n switch (rhs.dateFunction) {\n case 'YEARS':\n rhsText = new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric'\n });\n break;\n case 'QUARTERS': {\n const formattedYear = new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric'\n });\n const quarterNumber = getQuarter(rhs.value);\n rhsText = `${translate(`date_quarter_q${quarterNumber}`, [formattedYear])}`;\n break;\n }\n case 'MONTHS':\n rhsText = new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric',\n month: 'short'\n });\n break;\n case 'WEEKS':\n rhsText = `Week of ${new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n })}`;\n break;\n case 'DAYS':\n rhsText = new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n break;\n case 'HOURS':\n rhsText = new Date(rhs.value).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n hour12: true\n });\n break;\n case 'MINUTES':\n rhsText = new Date(rhs.value).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n hour12: true,\n minute: 'numeric'\n });\n break;\n case 'SECONDS':\n rhsText = new Date(rhs.value).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n hour12: true,\n minute: 'numeric',\n second: 'numeric'\n });\n break;\n case 'MONTHS_OF_YEAR':\n rhsText = new Date(2021, (rhs.value as number) - 1, 1).toLocaleString(locale, {\n month: 'long'\n });\n break;\n case 'HOURS_OF_DAY':\n rhsText = `Hour ${rhs.value} of day`;\n break;\n case 'DAYS_OF_MONTH':\n rhsText = `Day ${rhs.value} of month`;\n break;\n case 'DAYS_OF_WEEK': {\n const dayOfWeekOptions = getDayOfWeekNamesMap();\n rhsText = dayOfWeekOptions[Number(rhs.value)];\n break;\n }\n default: // Not needed\n }\n } else if (\n // For when we store percents as decimals in the database\n lhsField.unit === 'percent_1' &&\n lhsField.type === 'DECIMAL'\n ) {\n // Checks for any floating point rounding errors due to storing percents as decimals\n // and removes trailing zeros\n const scaledValue = Number(rhs.value) * 100;\n const isWhole = Math.abs(Number(scaledValue) - Math.round(Number(scaledValue))) < EPSILON;\n const normalizedValue = isWhole\n ? Math.trunc(Number(scaledValue))\n : Number(scaledValue).toFixed(2);\n rhsText = formatLiteralValue(lhsField.type, normalizedValue, locale, translate);\n } else {\n // If RHS is a single literal value\n rhsText = formatLiteralValue(lhsField.type, rhs.value, locale, translate);\n }\n } else if (hasProp(rhs, 'relativeDate')) {\n const {\n relativeDate: { timePeriod, interval, datePart }\n } = rhs;\n rhsText = formatRelativeDate(translate, timePeriod, datePart, interval);\n } else if (hasProp(rhs, 'parameterId')) {\n const parameterValue = lhsField.parameters?.find(item => item.id === rhs.parameterId);\n rhsText = parameterValue?.primary ?? '';\n } else if (hasProp(rhs, 'values')) {\n // Scales percent values up to whole number for display when percents are stored as decimals in the database\n if (lhsField.unit === 'percent_1') {\n rhsText = rhs.values\n .map(v => {\n const scaledValue = Number(v) * 100;\n const isWhole = Math.abs(scaledValue - Math.round(scaledValue)) < EPSILON;\n return isWhole ? Math.trunc(scaledValue) : scaledValue.toFixed(2);\n })\n .join(', ');\n } else {\n rhsText = rhs.values.join(', ');\n }\n } else if (hasProp(rhs, 'start')) {\n let startValue;\n let endValue;\n // Handles when percents are stored as decimals in the database\n if (lhsField.unit === 'percent_1') {\n const scaledStartValue = Number(rhs.start) * 100;\n const scaledEndValue = Number(rhs.end) * 100;\n\n // Checks for floating point rounding errors\n const isStartWhole =\n Math.abs(Number(scaledStartValue) - Math.round(Number(scaledStartValue))) < EPSILON;\n const isEndWhole =\n Math.abs(Number(scaledEndValue) - Math.round(Number(scaledEndValue))) < EPSILON;\n\n // Normalizes values to remove trailing zeros in case of floating point rounding errors\n const normalizedStartValue = isStartWhole\n ? Math.trunc(Number(scaledStartValue))\n : Number(scaledStartValue).toFixed(2);\n const normalizedEndValue = isEndWhole\n ? Math.trunc(Number(scaledEndValue))\n : Number(scaledEndValue).toFixed(2);\n\n startValue = formatLiteralValue(lhsField.type, normalizedStartValue, locale, translate);\n endValue = formatLiteralValue(lhsField.type, normalizedEndValue, locale, translate);\n } else {\n startValue = formatLiteralValue(lhsField.type, rhs.start, locale, translate);\n endValue = formatLiteralValue(lhsField.type, rhs.end, locale, translate);\n }\n\n rhsText = `${startValue} - ${endValue}`;\n }\n }\n\n switch (comparator) {\n case 'IS_NULL':\n return `${lhsText}is null`;\n case 'IS_NOT_NULL':\n return `${lhsText}is not null`;\n case 'IS_TRUE':\n return `${lhsText}is true`;\n case 'IS_FALSE':\n return `${lhsText}is false`;\n case 'EQ':\n return `${lhsText}is ${rhsText}`;\n case 'NEQ':\n return `${lhsText}isn't ${rhsText}`;\n case 'IN':\n return `${lhsText}is among ${rhsText}`;\n case 'NOT_IN':\n return `${lhsText}is not among ${rhsText}`;\n case 'GT':\n return `${lhsText}> ${rhsText}`;\n case 'GTE':\n return `${lhsText}>= ${rhsText}`;\n case 'LT':\n return `${lhsText}< ${rhsText}`;\n case 'LTE':\n return `${lhsText}<= ${rhsText}`;\n case 'BTW':\n return `${lhsText}is between ${rhsText}`;\n case 'NOT_BTW':\n return `${lhsText}is not between ${rhsText}`;\n case 'STARTS_WITH':\n return `${lhsText}starts with ${rhsText}`;\n case 'NOT_STARTS_WITH':\n return `${lhsText}doesn't start with ${rhsText}`;\n case 'ENDS_WITH':\n return `${lhsText}ends with ${rhsText}`;\n case 'NOT_ENDS_WITH':\n return `${lhsText}doesn't end with ${rhsText}`;\n case 'CONTAINS':\n return `${lhsText}contains ${rhsText}`;\n case 'NOT_CONTAINS':\n return `${lhsText}doesn't contain ${rhsText}`;\n default:\n return ''; // Not needed\n }\n}\n\n/** Returns a user-friendly text representation of the given node in a condition */\nfunction formatConditionNode(\n node: Condition,\n fields: Field[],\n translate: TranslationFunction<TranslationPack>,\n options?: ConditionFormatOptions\n): string {\n if (hasProp(node, 'AND')) {\n const childStrings = node.AND.map(n => formatConditionNode(n, fields, translate, options));\n return `(${childStrings.join(' AND ')})`;\n }\n\n if (hasProp(node, 'OR')) {\n const childStrings = node.OR.map(n => formatConditionNode(n, fields, translate, options));\n return `(${childStrings.join(' OR ')})`;\n }\n\n if (hasProp(node, 'NOT')) {\n const childString = formatConditionNode(node.NOT, fields, translate, options);\n if (childString.startsWith(LPAREN) && childString.endsWith(RPAREN)) {\n // Avoid double brackets when the child node is an AND/OR node\n return `NOT ${childString}`;\n }\n return `NOT (${childString})`;\n }\n\n return formatLeafCondition(node.condition, fields, translate, options); // If leaf-level is reached\n}\n\n/**\n * Returns a user-friendly text representation of a given complex condition\n * The input `fields` are used to look up display labels for the fields\n */\nexport default function formatCondition(\n condition: Condition,\n fields: Field[],\n translate: TranslationFunction<TranslationPack>,\n options?: ConditionFormatOptions\n): string {\n // Recursively format the tree, starting at the root node\n let text = formatConditionNode(condition, fields, translate, options);\n\n // If the root node is AND/OR, there will be extra parentheses. Remove them\n if (text.startsWith(LPAREN) && text.endsWith(RPAREN)) {\n text = text.slice(1, -1);\n }\n\n return text;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/formatter.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qDAAqD,CAAC;AAExF,OAAO,EACL,oBAAoB,EACpB,UAAU,EACX,MAAM,6DAA6D,CAAC;AAIrE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,MAAM,MAAM,GAAG,GAAG,CAAC;AAQnB,MAAM,UAAU,kBAAkB,CAChC,SAA+C,EAC/C,UAAsB,EACtB,QAAkB,EAClB,QAAiB;IAEjB,MAAM,cAAc,GAClB,UAAU,KAAK,SAAS;QACtB,CAAC,CAAC,6BAA6B,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACpE,CAAC,CAAC,qBAAqB,UAAU,CAAC,WAAW,EAAE,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;IAClF,OAAO,SAAS,CAAC,cAAuC,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE;QACzE,KAAK,EAAE,QAAQ,IAAI,CAAC;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAe,EACf,QAAyB,EACzB,MAAc,EACd,SAA+C;IAE/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW;YACd,4EAA4E;YAC5E,OAAO,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACvE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;oBACpC,CAAC,EAAE,SAAS;oBACZ,MAAM;oBACN,MAAM,EAAE,QAAQ;oBAChB,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,KAAK;iBAChB,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;QACT,KAAK,WAAW;YACd,4EAA4E;YAC5E,OAAO,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACvE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;oBACpC,CAAC,EAAE,SAAS;oBACZ,MAAM;oBACN,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,KAAK;iBAChB,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;QACT,KAAK,WAAW;YACd,4EAA4E;YAC5E,OAAO,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACvE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;oBACpC,CAAC,EAAE,SAAS;oBACZ,MAAM;oBACN,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,UAAU;oBACnB,QAAQ,EAAE,KAAK;iBAChB,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;QACT,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC/D,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,MAAM;QACR;YACE,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,SAAS,mBAAmB,CAC1B,IAAmB,EACnB,MAAe,EACf,SAA+C,EAC/C,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,KAAK,KAA6B,EAAE;IAElE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEtC,kCAAkC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAU,CAAC,CAAC,yBAAyB;IAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC;IACtD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1B,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAU,CAAC,CAAC,yBAAyB;YAC/E,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC7B,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;gBACjC,kCAAkC;gBAClC,QAAQ,GAAG,CAAC,YAAY,EAAE,CAAC;oBACzB,KAAK,OAAO;wBACV,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BACjE,IAAI,EAAE,SAAS;yBAChB,CAAC,CAAC;wBACH,MAAM;oBACR,KAAK,UAAU,CAAC,CAAC,CAAC;wBAChB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BAC7E,IAAI,EAAE,SAAS;yBAChB,CAAC,CAAC;wBACH,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC5C,OAAO,GAAG,GAAG,SAAS,CAAC,iBAAiB,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;wBAC5E,MAAM;oBACR,CAAC;oBACD,KAAK,QAAQ;wBACX,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BACjE,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,OAAO;yBACf,CAAC,CAAC;wBACH,MAAM;oBACR,KAAK,OAAO;wBACV,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BAC5E,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,OAAO;4BACd,GAAG,EAAE,SAAS;yBACf,CAAC,EAAE,CAAC;wBACL,MAAM;oBACR,KAAK,MAAM;wBACT,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BACjE,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,OAAO;4BACd,GAAG,EAAE,SAAS;yBACf,CAAC,CAAC;wBACH,MAAM;oBACR,KAAK,OAAO;wBACV,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BACnD,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,OAAO;4BACd,GAAG,EAAE,SAAS;4BACd,IAAI,EAAE,SAAS;4BACf,MAAM,EAAE,IAAI;yBACb,CAAC,CAAC;wBACH,MAAM;oBACR,KAAK,SAAS;wBACZ,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BACnD,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,OAAO;4BACd,GAAG,EAAE,SAAS;4BACd,IAAI,EAAE,SAAS;4BACf,MAAM,EAAE,IAAI;4BACZ,MAAM,EAAE,SAAS;yBAClB,CAAC,CAAC;wBACH,MAAM;oBACR,KAAK,SAAS;wBACZ,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BACnD,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,OAAO;4BACd,GAAG,EAAE,SAAS;4BACd,IAAI,EAAE,SAAS;4BACf,MAAM,EAAE,IAAI;4BACZ,MAAM,EAAE,SAAS;4BACjB,MAAM,EAAE,SAAS;yBAClB,CAAC,CAAC;wBACH,MAAM;oBACR,KAAK,gBAAgB;wBACnB,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAG,GAAG,CAAC,KAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;4BAC5E,KAAK,EAAE,MAAM;yBACd,CAAC,CAAC;wBACH,MAAM;oBACR,KAAK,cAAc;wBACjB,OAAO,GAAG,QAAQ,GAAG,CAAC,KAAK,SAAS,CAAC;wBACrC,MAAM;oBACR,KAAK,eAAe;wBAClB,OAAO,GAAG,OAAO,GAAG,CAAC,KAAK,WAAW,CAAC;wBACtC,MAAM;oBACR,KAAK,cAAc,CAAC,CAAC,CAAC;wBACpB,MAAM,gBAAgB,GAAG,oBAAoB,EAAE,CAAC;wBAChD,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC9C,MAAM;oBACR,CAAC;oBACD,QAAQ,CAAC,aAAa;gBACxB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,mCAAmC;gBACnC,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;YACxC,MAAM,EACJ,YAAY,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACjD,GAAG,GAAG,CAAC;YACR,OAAO,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1E,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;YACtF,OAAO,GAAG,cAAc,EAAE,OAAO,IAAI,EAAE,CAAC;QAC1C,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACnF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAE/E,OAAO,GAAG,GAAG,UAAU,MAAM,QAAQ,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,GAAG,OAAO,SAAS,CAAC;QAC7B,KAAK,aAAa;YAChB,OAAO,GAAG,OAAO,aAAa,CAAC;QACjC,KAAK,SAAS;YACZ,OAAO,GAAG,OAAO,SAAS,CAAC;QAC7B,KAAK,UAAU;YACb,OAAO,GAAG,OAAO,UAAU,CAAC;QAC9B,KAAK,IAAI;YACP,OAAO,GAAG,OAAO,MAAM,OAAO,EAAE,CAAC;QACnC,KAAK,KAAK;YACR,OAAO,GAAG,OAAO,SAAS,OAAO,EAAE,CAAC;QACtC,KAAK,IAAI;YACP,OAAO,GAAG,OAAO,YAAY,OAAO,EAAE,CAAC;QACzC,KAAK,QAAQ;YACX,OAAO,GAAG,OAAO,gBAAgB,OAAO,EAAE,CAAC;QAC7C,KAAK,IAAI;YACP,OAAO,GAAG,OAAO,KAAK,OAAO,EAAE,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,GAAG,OAAO,MAAM,OAAO,EAAE,CAAC;QACnC,KAAK,IAAI;YACP,OAAO,GAAG,OAAO,KAAK,OAAO,EAAE,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,GAAG,OAAO,MAAM,OAAO,EAAE,CAAC;QACnC,KAAK,KAAK;YACR,OAAO,GAAG,OAAO,cAAc,OAAO,EAAE,CAAC;QAC3C,KAAK,SAAS;YACZ,OAAO,GAAG,OAAO,kBAAkB,OAAO,EAAE,CAAC;QAC/C,KAAK,aAAa;YAChB,OAAO,GAAG,OAAO,eAAe,OAAO,EAAE,CAAC;QAC5C,KAAK,iBAAiB;YACpB,OAAO,GAAG,OAAO,sBAAsB,OAAO,EAAE,CAAC;QACnD,KAAK,WAAW;YACd,OAAO,GAAG,OAAO,aAAa,OAAO,EAAE,CAAC;QAC1C,KAAK,eAAe;YAClB,OAAO,GAAG,OAAO,oBAAoB,OAAO,EAAE,CAAC;QACjD,KAAK,UAAU;YACb,OAAO,GAAG,OAAO,YAAY,OAAO,EAAE,CAAC;QACzC,KAAK,cAAc;YACjB,OAAO,GAAG,OAAO,mBAAmB,OAAO,EAAE,CAAC;QAChD;YACE,OAAO,EAAE,CAAC,CAAC,aAAa;IAC5B,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,SAAS,mBAAmB,CAC1B,IAAe,EACf,MAAe,EACf,SAA+C,EAC/C,OAAgC;IAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3F,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1F,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9E,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,8DAA8D;YAC9D,OAAO,OAAO,WAAW,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO,QAAQ,WAAW,GAAG,CAAC;IAChC,CAAC;IAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,2BAA2B;AACrG,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,SAAoB,EACpB,MAAe,EACf,SAA+C,EAC/C,OAAgC;IAEhC,yDAAyD;IACzD,IAAI,IAAI,GAAG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEtE,2EAA2E;IAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// cspell:words LPAREN RPAREN\n// FIXME: TR (Several constructs in this file need to be localized)\nimport { formatDateTime, hasProp, isValidDate, parseToDate } from '@pega/cosmos-react-core';\nimport type { TranslationPack } from '@pega/cosmos-react-core';\nimport { getFormattedValue } from '@pega/cosmos-react-core/lib/components/Number/utils';\nimport type { TranslationFunction } from '@pega/cosmos-react-core/lib/i18n/translate';\nimport {\n getDayOfWeekNamesMap,\n getQuarter\n} from '@pega/cosmos-react-core/lib/components/DateTime/Input/utils';\n\nimport type { Condition, LeafCondition, Field } from '../ConditionBuilder.types';\n\nimport { getItem } from './utils';\nimport type { DatePart, FieldType, TimePeriod } from './types';\n\nconst LPAREN = '(';\nconst RPAREN = ')';\n\n/** Options object optionally passed to formatCondition method. */\ninterface ConditionFormatOptions {\n locale?: string;\n omitLhs?: boolean;\n}\n\nexport function formatRelativeDate(\n translate: TranslationFunction<TranslationPack>,\n timePeriod: TimePeriod,\n datePart: DatePart,\n interval?: number\n): string {\n const translationKey =\n timePeriod === 'CURRENT'\n ? `condition_builder_current_${datePart.toLowerCase().slice(0, -1)}`\n : `condition_builder_${timePeriod.toLowerCase()}_X_${datePart.toLowerCase()}`;\n return translate(translationKey as keyof TranslationPack, [interval ?? 0], {\n count: interval ?? 0\n });\n}\n\nfunction formatLiteralValue(\n type: FieldType,\n rhsValue: string | number,\n locale: string,\n translate: TranslationFunction<TranslationPack>\n): string {\n switch (type) {\n case 'TIME_ONLY':\n // For these cases, rhs.value is stored as # of milliseconds since day-start\n return (rhsValue || rhsValue === 0) && isValidDate(parseToDate(rhsValue))\n ? formatDateTime(parseToDate(rhsValue), {\n t: translate,\n locale,\n format: 'medium',\n variant: 'time',\n timeZone: 'UTC'\n })\n : '';\n case 'DATE_ONLY':\n // For these cases, rhs.value is stored as # of milliseconds since day-start\n return (rhsValue || rhsValue === 0) && isValidDate(parseToDate(rhsValue))\n ? formatDateTime(parseToDate(rhsValue), {\n t: translate,\n locale,\n format: 'numeric',\n variant: 'date',\n timeZone: 'UTC'\n })\n : '';\n case 'DATE_TIME':\n // For these cases, rhs.value is stored as # of milliseconds since day-start\n return (rhsValue || rhsValue === 0) && isValidDate(parseToDate(rhsValue))\n ? formatDateTime(parseToDate(rhsValue), {\n t: translate,\n locale,\n format: 'numeric',\n variant: 'datetime',\n timeZone: 'UTC'\n })\n : '';\n case 'DECIMAL':\n case 'INTEGER':\n return getFormattedValue(rhsValue.toString(), locale, undefined, {\n useGrouping: true\n });\n break;\n default:\n return rhsValue.toString();\n }\n}\n\n/** Returns a user-friendly text representation of a given leaf condition */\nfunction formatLeafCondition(\n leaf: LeafCondition,\n fields: Field[],\n translate: TranslationFunction<TranslationPack>,\n { locale = 'en-US', omitLhs = false }: ConditionFormatOptions = {}\n): string {\n const { lhs, comparator, rhs } = leaf;\n\n // Determine texts for LHS and RHS\n const lhsField = getItem(fields, lhs.field) as Field; // Expecting valid inputs\n const lhsText = omitLhs ? '' : `${lhsField.primary} `;\n let rhsText = '';\n if (!hasProp(lhsField, 'type')) return '';\n if (rhs) {\n if (hasProp(rhs, 'field')) {\n // If RHS is another field\n const rhsField = getItem(fields, rhs.field) as Field; // Expecting valid inputs\n rhsText = rhsField.primary;\n } else if (hasProp(rhs, 'value')) {\n if (hasProp(rhs, 'dateFunction')) {\n // If RHS is a date function value\n switch (rhs.dateFunction) {\n case 'YEARS':\n rhsText = new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric'\n });\n break;\n case 'QUARTERS': {\n const formattedYear = new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric'\n });\n const quarterNumber = getQuarter(rhs.value);\n rhsText = `${translate(`date_quarter_q${quarterNumber}`, [formattedYear])}`;\n break;\n }\n case 'MONTHS':\n rhsText = new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric',\n month: 'short'\n });\n break;\n case 'WEEKS':\n rhsText = `Week of ${new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n })}`;\n break;\n case 'DAYS':\n rhsText = new Date(`${rhs.value}T00:00:00`).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n break;\n case 'HOURS':\n rhsText = new Date(rhs.value).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n hour12: true\n });\n break;\n case 'MINUTES':\n rhsText = new Date(rhs.value).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n hour12: true,\n minute: 'numeric'\n });\n break;\n case 'SECONDS':\n rhsText = new Date(rhs.value).toLocaleString(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n hour12: true,\n minute: 'numeric',\n second: 'numeric'\n });\n break;\n case 'MONTHS_OF_YEAR':\n rhsText = new Date(2021, (rhs.value as number) - 1, 1).toLocaleString(locale, {\n month: 'long'\n });\n break;\n case 'HOURS_OF_DAY':\n rhsText = `Hour ${rhs.value} of day`;\n break;\n case 'DAYS_OF_MONTH':\n rhsText = `Day ${rhs.value} of month`;\n break;\n case 'DAYS_OF_WEEK': {\n const dayOfWeekOptions = getDayOfWeekNamesMap();\n rhsText = dayOfWeekOptions[Number(rhs.value)];\n break;\n }\n default: // Not needed\n }\n } else {\n // If RHS is a single literal value\n rhsText = formatLiteralValue(lhsField.type, rhs.value, locale, translate);\n }\n } else if (hasProp(rhs, 'relativeDate')) {\n const {\n relativeDate: { timePeriod, interval, datePart }\n } = rhs;\n rhsText = formatRelativeDate(translate, timePeriod, datePart, interval);\n } else if (hasProp(rhs, 'parameterId')) {\n const parameterValue = lhsField.parameters?.find(item => item.id === rhs.parameterId);\n rhsText = parameterValue?.primary ?? '';\n } else if (hasProp(rhs, 'values')) {\n rhsText = rhs.values.join(', ');\n } else if (hasProp(rhs, 'start')) {\n const startValue = formatLiteralValue(lhsField.type, rhs.start, locale, translate);\n const endValue = formatLiteralValue(lhsField.type, rhs.end, locale, translate);\n\n rhsText = `${startValue} - ${endValue}`;\n }\n }\n\n switch (comparator) {\n case 'IS_NULL':\n return `${lhsText}is null`;\n case 'IS_NOT_NULL':\n return `${lhsText}is not null`;\n case 'IS_TRUE':\n return `${lhsText}is true`;\n case 'IS_FALSE':\n return `${lhsText}is false`;\n case 'EQ':\n return `${lhsText}is ${rhsText}`;\n case 'NEQ':\n return `${lhsText}isn't ${rhsText}`;\n case 'IN':\n return `${lhsText}is among ${rhsText}`;\n case 'NOT_IN':\n return `${lhsText}is not among ${rhsText}`;\n case 'GT':\n return `${lhsText}> ${rhsText}`;\n case 'GTE':\n return `${lhsText}>= ${rhsText}`;\n case 'LT':\n return `${lhsText}< ${rhsText}`;\n case 'LTE':\n return `${lhsText}<= ${rhsText}`;\n case 'BTW':\n return `${lhsText}is between ${rhsText}`;\n case 'NOT_BTW':\n return `${lhsText}is not between ${rhsText}`;\n case 'STARTS_WITH':\n return `${lhsText}starts with ${rhsText}`;\n case 'NOT_STARTS_WITH':\n return `${lhsText}doesn't start with ${rhsText}`;\n case 'ENDS_WITH':\n return `${lhsText}ends with ${rhsText}`;\n case 'NOT_ENDS_WITH':\n return `${lhsText}doesn't end with ${rhsText}`;\n case 'CONTAINS':\n return `${lhsText}contains ${rhsText}`;\n case 'NOT_CONTAINS':\n return `${lhsText}doesn't contain ${rhsText}`;\n default:\n return ''; // Not needed\n }\n}\n\n/** Returns a user-friendly text representation of the given node in a condition */\nfunction formatConditionNode(\n node: Condition,\n fields: Field[],\n translate: TranslationFunction<TranslationPack>,\n options?: ConditionFormatOptions\n): string {\n if (hasProp(node, 'AND')) {\n const childStrings = node.AND.map(n => formatConditionNode(n, fields, translate, options));\n return `(${childStrings.join(' AND ')})`;\n }\n\n if (hasProp(node, 'OR')) {\n const childStrings = node.OR.map(n => formatConditionNode(n, fields, translate, options));\n return `(${childStrings.join(' OR ')})`;\n }\n\n if (hasProp(node, 'NOT')) {\n const childString = formatConditionNode(node.NOT, fields, translate, options);\n if (childString.startsWith(LPAREN) && childString.endsWith(RPAREN)) {\n // Avoid double brackets when the child node is an AND/OR node\n return `NOT ${childString}`;\n }\n return `NOT (${childString})`;\n }\n\n return formatLeafCondition(node.condition, fields, translate, options); // If leaf-level is reached\n}\n\n/**\n * Returns a user-friendly text representation of a given complex condition\n * The input `fields` are used to look up display labels for the fields\n */\nexport default function formatCondition(\n condition: Condition,\n fields: Field[],\n translate: TranslationFunction<TranslationPack>,\n options?: ConditionFormatOptions\n): string {\n // Recursively format the tree, starting at the root node\n let text = formatConditionNode(condition, fields, translate, options);\n\n // If the root node is AND/OR, there will be extra parentheses. Remove them\n if (text.startsWith(LPAREN) && text.endsWith(RPAREN)) {\n text = text.slice(1, -1);\n }\n\n return text;\n}\n"]}
|
|
@@ -20,5 +20,5 @@ import type { Condition, Field } from '../ConditionBuilder.types';
|
|
|
20
20
|
* `["2025-05-12T11:24:45.000", "2025-05-12T11:24:45.999"]`.
|
|
21
21
|
*
|
|
22
22
|
*/
|
|
23
|
-
export default function transformComplexCondition(condition: Condition, fields: Field[], currentDateTime?: string, timezone?: string): Condition;
|
|
23
|
+
export default function transformComplexCondition(condition: Condition, fields: Field[], transformRelativeDate?: boolean, currentDateTime?: string, timezone?: string): Condition;
|
|
24
24
|
//# sourceMappingURL=transformer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/transformer.ts"],"names":[],"mappings":"AAGA,OAAO,eAAe,CAAC;AAIvB,OAAO,KAAK,EAAE,SAAS,EAAiB,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/transformer.ts"],"names":[],"mappings":"AAGA,OAAO,eAAe,CAAC;AAIvB,OAAO,KAAK,EAAE,SAAS,EAAiB,KAAK,EAAE,MAAM,2BAA2B,CAAC;AA4TjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,KAAK,EAAE,EACf,qBAAqB,UAAO,EAC5B,eAAe,CAAC,EAAE,MAAM,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,SAAS,CAsCX"}
|
|
@@ -154,7 +154,7 @@ function getConditionFromRange(startDate, endDate, node, lhsFieldType, timezone)
|
|
|
154
154
|
return { condition: node };
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
|
-
function transformLeafCondition(node, fields, currentDateTime, timezone) {
|
|
157
|
+
function transformLeafCondition(node, fields, transformRelativeDate = true, currentDateTime, timezone) {
|
|
158
158
|
const field = getItem(fields, node.lhs.field);
|
|
159
159
|
if (!field || !hasProp(field, 'type')) {
|
|
160
160
|
return { condition: node }; // Safety check
|
|
@@ -196,7 +196,7 @@ function transformLeafCondition(node, fields, currentDateTime, timezone) {
|
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
// Transform Relative date filters into equivalent date range filters
|
|
199
|
-
if (node.rhs && hasProp(node.rhs, 'relativeDate')) {
|
|
199
|
+
if (node.rhs && transformRelativeDate && hasProp(node.rhs, 'relativeDate')) {
|
|
200
200
|
const { timePeriod, interval, datePart } = node.rhs.relativeDate;
|
|
201
201
|
const dayjsDatePart = dayjsDateParts[datePart];
|
|
202
202
|
const now = !currentDateTime || isAbsoluteDateString(currentDateTime)
|
|
@@ -280,24 +280,24 @@ function transformLeafCondition(node, fields, currentDateTime, timezone) {
|
|
|
280
280
|
* `["2025-05-12T11:24:45.000", "2025-05-12T11:24:45.999"]`.
|
|
281
281
|
*
|
|
282
282
|
*/
|
|
283
|
-
export default function transformComplexCondition(condition, fields, currentDateTime, timezone) {
|
|
283
|
+
export default function transformComplexCondition(condition, fields, transformRelativeDate = true, currentDateTime, timezone) {
|
|
284
284
|
if (hasProp(condition, 'AND')) {
|
|
285
|
-
const childNodes = condition.AND.map(n => transformComplexCondition(n, fields, currentDateTime, timezone));
|
|
285
|
+
const childNodes = condition.AND.map(n => transformComplexCondition(n, fields, transformRelativeDate, currentDateTime, timezone));
|
|
286
286
|
return {
|
|
287
287
|
AND: childNodes
|
|
288
288
|
};
|
|
289
289
|
}
|
|
290
290
|
if (hasProp(condition, 'OR')) {
|
|
291
|
-
const childNodes = condition.OR.map(n => transformComplexCondition(n, fields, currentDateTime, timezone));
|
|
291
|
+
const childNodes = condition.OR.map(n => transformComplexCondition(n, fields, transformRelativeDate, currentDateTime, timezone));
|
|
292
292
|
return {
|
|
293
293
|
OR: childNodes
|
|
294
294
|
};
|
|
295
295
|
}
|
|
296
296
|
if (hasProp(condition, 'NOT')) {
|
|
297
297
|
return {
|
|
298
|
-
NOT: transformComplexCondition(condition.NOT, fields, currentDateTime, timezone)
|
|
298
|
+
NOT: transformComplexCondition(condition.NOT, fields, transformRelativeDate, currentDateTime, timezone)
|
|
299
299
|
};
|
|
300
300
|
}
|
|
301
|
-
return transformLeafCondition(condition.condition, fields, currentDateTime, timezone);
|
|
301
|
+
return transformLeafCondition(condition.condition, fields, transformRelativeDate, currentDateTime, timezone);
|
|
302
302
|
}
|
|
303
303
|
//# sourceMappingURL=transformer.js.map
|
|
@@ -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\nimport dayjs from 'dayjs';\nimport type { Dayjs, QUnitType } from 'dayjs';\nimport './extendDayJs';\n\nimport { hasProp } from '@pega/cosmos-react-core';\n\nimport type { Condition, LeafCondition, Field } from '../ConditionBuilder.types';\nimport { truncateISODateString } from '../RhsControls';\n\nimport { getItem, isAbsoluteDateString } from './utils';\nimport type { DatePart, FieldType } from './types';\nimport { convertTimeValueToMs } from './time-utils';\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\nfunction getDateStringInTimezone(d: Dayjs, tz: string): string {\n return d.tz(tz).format('YYYY-MM-DDTHH:mm:ss.SSS');\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 timezone?: string\n): Condition {\n const formatDate = (d: Dayjs, tz?: string): string => {\n let isoString: string;\n if (tz) {\n isoString = getDateStringInTimezone(d, tz);\n } else {\n const time = d.toDate().getTime();\n const timezoneOffset = new Date(time).getTimezoneOffset() * 60000;\n isoString = new Date(time - timezoneOffset).toISOString().slice(0, -1);\n }\n if (lhsFieldType === 'TIME_ONLY') return truncateISODateString(isoString, lhsFieldType);\n if (lhsFieldType === 'DATE_ONLY') return isoString.substring(0, isoString.indexOf('T'));\n return isoString;\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, timezone) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: formatDate(startDate, timezone) }\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, timezone) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: formatDate(startDate, timezone) }\n }\n }\n ]\n };\n case 'GT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: formatDate(endDate, timezone) }\n }\n };\n case 'GTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: formatDate(startDate, timezone) }\n }\n };\n case 'LT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: formatDate(startDate, timezone) }\n }\n };\n case 'LTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: formatDate(endDate, timezone) }\n }\n };\n case 'BTW':\n case 'NOT_BTW':\n return getConditionForBetweenComparator(\n formatDate(startDate, timezone),\n formatDate(endDate, timezone),\n node\n );\n default:\n return { condition: node };\n }\n}\n\nfunction transformLeafCondition(\n node: LeafCondition,\n fields: Field[],\n currentDateTime?: string,\n timezone?: string\n): Condition {\n const field = getItem(fields, node.lhs.field);\n\n if (!field || !hasProp(field, 'type')) {\n return { condition: node }; // Safety check\n }\n\n if (\n (node.comparator === 'EQ' || node.comparator === 'NEQ') &&\n node.rhs &&\n hasProp(node.rhs, 'value') &&\n Object.keys(node.rhs).length === 1 &&\n typeof node.rhs.value === 'string'\n ) {\n const dateTime = node.rhs.value;\n\n const timePartsCount = dateTime.split(':').length;\n if (field.type === 'DATE_TIME') {\n const date = isAbsoluteDateString(dateTime)\n ? dayjs(dateTime).tz(timezone)\n : dayjs.tz(dateTime, timezone);\n let startDate = date;\n let endDate = date;\n // For HH:MM:SS expand milliseconds to 0-999\n if (timePartsCount === 3) {\n startDate = startDate.millisecond(0);\n endDate = endDate.millisecond(999);\n\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\n }\n // HH:MM expand seconds to 0-59\n if (timePartsCount === 2) {\n startDate = startDate.second(0).millisecond(0);\n endDate = endDate.second(59).millisecond(999);\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\n }\n } else if (field.type === 'TIME_ONLY') {\n const dateTimeMs = convertTimeValueToMs(node.rhs.value);\n\n // HH:MM expand seconds to 0-59\n if (timePartsCount === 2) {\n const startDate = dayjs(dateTimeMs).tz(timezone).second(0).millisecond(0);\n const endDate = dayjs(dateTimeMs).tz(timezone).second(59).millisecond(0);\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\n }\n }\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 =\n !currentDateTime || isAbsoluteDateString(currentDateTime)\n ? dayjs.utc(dayjs(currentDateTime).tz(timezone))\n : dayjs.tz(currentDateTime, timezone);\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(\n startDate.tz(timezone),\n endDate.tz(timezone),\n node,\n field.type,\n timezone\n );\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 =\n typeof node.rhs.value === 'number' || isAbsoluteDateString(node.rhs.value)\n ? dayjs.utc(dayjs(node.rhs.value).tz(timezone)).startOf('day').tz(timezone)\n : dayjs.tz(node.rhs.value, timezone).startOf('day'); // Since we store it as YYYY-MM-DD, it's already the start of day\n\n const endDate = startDate.add(7, 'day').subtract(1, 'millisecond'); // Last millisecond on the 7th day from startDate\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\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 === 'DECIMAL' || field.type === 'INTEGER' || field.type === 'TIME_ONLY') {\n return getConditionForBetweenComparator(node.rhs.start, node.rhs.end, node);\n }\n\n const startDate =\n typeof node.rhs.start === 'number' || isAbsoluteDateString(node.rhs.start)\n ? dayjs(node.rhs.start).tz(timezone)\n : dayjs.tz(node.rhs.start, timezone);\n const endDate =\n typeof node.rhs.end === 'number' || isAbsoluteDateString(node.rhs.end)\n ? dayjs(node.rhs.end).tz(timezone)\n : dayjs.tz(node.rhs.end, timezone);\n\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\n }\n\n // apply timezone to date-time fields\n if (timezone && field.type === 'DATE_TIME' && node.rhs && !hasProp(node.rhs, 'dateFunction')) {\n const newNode: LeafCondition = { ...node };\n if (newNode.rhs && hasProp(newNode.rhs, 'value')) {\n newNode.rhs.value = getDateStringInTimezone(\n typeof newNode.rhs.value === 'number' || isAbsoluteDateString(newNode.rhs.value)\n ? dayjs(newNode.rhs.value)\n : dayjs.tz(newNode.rhs.value, timezone),\n timezone\n );\n }\n if (newNode.rhs && hasProp(newNode.rhs, 'values')) {\n const valuesWithTimezone = newNode.rhs.values.map(v =>\n getDateStringInTimezone(\n typeof v === 'number' || isAbsoluteDateString(v) ? dayjs(v) : dayjs.tz(v, timezone),\n timezone\n )\n );\n newNode.rhs.values = valuesWithTimezone;\n }\n return { condition: newNode };\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 *\n * If `currentDateTime` is not provided, the current system time will be used.\n * If `timezone` is not provided, the system's timezone will be used for conversion.\n *\n * The `timezone` prop is applied to the date-time values within the condition when the transformation occurs.\n * If `timezone` is specified, the date-time will be converted from UTC (or the provided reference time) to the specified timezone.\n * Then, the transformed date will be used to generate a range.\n * This transformation ensures that the start and end times account for timezone differences when considering the condition's range.\n *\n * For example:\n * - A UTC date-time `2025-05-12T11:24:45.946Z` will be transformed to `2025-05-12T07:24:45.946-04:00` (in the `-04:00` timezone).\n * The date-time will then be converted into a range:\n * `[\"2025-05-12T07:24:45.000\", \"2025-05-12T07:24:45.999\"]`.\n * - A date-time without a timezone (`2025-05-12T11:24:45.946`) will be parsed in the timezone (e.g., `-04:00`).\n * The parsed time will then be transformed into a range like:\n * `[\"2025-05-12T11:24:45.000\", \"2025-05-12T11:24:45.999\"]`.\n *\n */\nexport default function transformComplexCondition(\n condition: Condition,\n fields: Field[],\n currentDateTime?: string,\n timezone?: string\n): Condition {\n if (hasProp(condition, 'AND')) {\n const childNodes: Condition[] = condition.AND.map(n =>\n transformComplexCondition(n, fields, currentDateTime, timezone)\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, timezone)\n );\n return {\n OR: childNodes\n };\n }\n\n if (hasProp(condition, 'NOT')) {\n return {\n NOT: transformComplexCondition(condition.NOT, fields, currentDateTime, timezone)\n };\n }\n\n return transformLeafCondition(condition.condition, fields, currentDateTime, timezone);\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\nimport dayjs from 'dayjs';\nimport type { Dayjs, QUnitType } from 'dayjs';\nimport './extendDayJs';\n\nimport { hasProp } from '@pega/cosmos-react-core';\n\nimport type { Condition, LeafCondition, Field } from '../ConditionBuilder.types';\nimport { truncateISODateString } from '../RhsControls';\n\nimport { getItem, isAbsoluteDateString } from './utils';\nimport type { DatePart, FieldType } from './types';\nimport { convertTimeValueToMs } from './time-utils';\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\nfunction getDateStringInTimezone(d: Dayjs, tz: string): string {\n return d.tz(tz).format('YYYY-MM-DDTHH:mm:ss.SSS');\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 timezone?: string\n): Condition {\n const formatDate = (d: Dayjs, tz?: string): string => {\n let isoString: string;\n if (tz) {\n isoString = getDateStringInTimezone(d, tz);\n } else {\n const time = d.toDate().getTime();\n const timezoneOffset = new Date(time).getTimezoneOffset() * 60000;\n isoString = new Date(time - timezoneOffset).toISOString().slice(0, -1);\n }\n if (lhsFieldType === 'TIME_ONLY') return truncateISODateString(isoString, lhsFieldType);\n if (lhsFieldType === 'DATE_ONLY') return isoString.substring(0, isoString.indexOf('T'));\n return isoString;\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, timezone) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: formatDate(startDate, timezone) }\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, timezone) }\n }\n },\n {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: formatDate(startDate, timezone) }\n }\n }\n ]\n };\n case 'GT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GT',\n rhs: { value: formatDate(endDate, timezone) }\n }\n };\n case 'GTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'GTE',\n rhs: { value: formatDate(startDate, timezone) }\n }\n };\n case 'LT':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LT',\n rhs: { value: formatDate(startDate, timezone) }\n }\n };\n case 'LTE':\n return {\n condition: {\n lhs: node.lhs,\n comparator: 'LTE',\n rhs: { value: formatDate(endDate, timezone) }\n }\n };\n case 'BTW':\n case 'NOT_BTW':\n return getConditionForBetweenComparator(\n formatDate(startDate, timezone),\n formatDate(endDate, timezone),\n node\n );\n default:\n return { condition: node };\n }\n}\n\nfunction transformLeafCondition(\n node: LeafCondition,\n fields: Field[],\n transformRelativeDate = true,\n currentDateTime?: string,\n timezone?: string\n): Condition {\n const field = getItem(fields, node.lhs.field);\n\n if (!field || !hasProp(field, 'type')) {\n return { condition: node }; // Safety check\n }\n\n if (\n (node.comparator === 'EQ' || node.comparator === 'NEQ') &&\n node.rhs &&\n hasProp(node.rhs, 'value') &&\n Object.keys(node.rhs).length === 1 &&\n typeof node.rhs.value === 'string'\n ) {\n const dateTime = node.rhs.value;\n\n const timePartsCount = dateTime.split(':').length;\n if (field.type === 'DATE_TIME') {\n const date = isAbsoluteDateString(dateTime)\n ? dayjs(dateTime).tz(timezone)\n : dayjs.tz(dateTime, timezone);\n let startDate = date;\n let endDate = date;\n // For HH:MM:SS expand milliseconds to 0-999\n if (timePartsCount === 3) {\n startDate = startDate.millisecond(0);\n endDate = endDate.millisecond(999);\n\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\n }\n // HH:MM expand seconds to 0-59\n if (timePartsCount === 2) {\n startDate = startDate.second(0).millisecond(0);\n endDate = endDate.second(59).millisecond(999);\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\n }\n } else if (field.type === 'TIME_ONLY') {\n const dateTimeMs = convertTimeValueToMs(node.rhs.value);\n\n // HH:MM expand seconds to 0-59\n if (timePartsCount === 2) {\n const startDate = dayjs(dateTimeMs).tz(timezone).second(0).millisecond(0);\n const endDate = dayjs(dateTimeMs).tz(timezone).second(59).millisecond(0);\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\n }\n }\n }\n\n // Transform Relative date filters into equivalent date range filters\n if (node.rhs && transformRelativeDate && hasProp(node.rhs, 'relativeDate')) {\n const { timePeriod, interval, datePart } = node.rhs.relativeDate;\n const dayjsDatePart = dayjsDateParts[datePart];\n const now =\n !currentDateTime || isAbsoluteDateString(currentDateTime)\n ? dayjs.utc(dayjs(currentDateTime).tz(timezone))\n : dayjs.tz(currentDateTime, timezone);\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(\n startDate.tz(timezone),\n endDate.tz(timezone),\n node,\n field.type,\n timezone\n );\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 =\n typeof node.rhs.value === 'number' || isAbsoluteDateString(node.rhs.value)\n ? dayjs.utc(dayjs(node.rhs.value).tz(timezone)).startOf('day').tz(timezone)\n : dayjs.tz(node.rhs.value, timezone).startOf('day'); // Since we store it as YYYY-MM-DD, it's already the start of day\n\n const endDate = startDate.add(7, 'day').subtract(1, 'millisecond'); // Last millisecond on the 7th day from startDate\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\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 === 'DECIMAL' || field.type === 'INTEGER' || field.type === 'TIME_ONLY') {\n return getConditionForBetweenComparator(node.rhs.start, node.rhs.end, node);\n }\n\n const startDate =\n typeof node.rhs.start === 'number' || isAbsoluteDateString(node.rhs.start)\n ? dayjs(node.rhs.start).tz(timezone)\n : dayjs.tz(node.rhs.start, timezone);\n const endDate =\n typeof node.rhs.end === 'number' || isAbsoluteDateString(node.rhs.end)\n ? dayjs(node.rhs.end).tz(timezone)\n : dayjs.tz(node.rhs.end, timezone);\n\n return getConditionFromRange(startDate, endDate, node, field.type, timezone);\n }\n\n // apply timezone to date-time fields\n if (timezone && field.type === 'DATE_TIME' && node.rhs && !hasProp(node.rhs, 'dateFunction')) {\n const newNode: LeafCondition = { ...node };\n if (newNode.rhs && hasProp(newNode.rhs, 'value')) {\n newNode.rhs.value = getDateStringInTimezone(\n typeof newNode.rhs.value === 'number' || isAbsoluteDateString(newNode.rhs.value)\n ? dayjs(newNode.rhs.value)\n : dayjs.tz(newNode.rhs.value, timezone),\n timezone\n );\n }\n if (newNode.rhs && hasProp(newNode.rhs, 'values')) {\n const valuesWithTimezone = newNode.rhs.values.map(v =>\n getDateStringInTimezone(\n typeof v === 'number' || isAbsoluteDateString(v) ? dayjs(v) : dayjs.tz(v, timezone),\n timezone\n )\n );\n newNode.rhs.values = valuesWithTimezone;\n }\n return { condition: newNode };\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 *\n * If `currentDateTime` is not provided, the current system time will be used.\n * If `timezone` is not provided, the system's timezone will be used for conversion.\n *\n * The `timezone` prop is applied to the date-time values within the condition when the transformation occurs.\n * If `timezone` is specified, the date-time will be converted from UTC (or the provided reference time) to the specified timezone.\n * Then, the transformed date will be used to generate a range.\n * This transformation ensures that the start and end times account for timezone differences when considering the condition's range.\n *\n * For example:\n * - A UTC date-time `2025-05-12T11:24:45.946Z` will be transformed to `2025-05-12T07:24:45.946-04:00` (in the `-04:00` timezone).\n * The date-time will then be converted into a range:\n * `[\"2025-05-12T07:24:45.000\", \"2025-05-12T07:24:45.999\"]`.\n * - A date-time without a timezone (`2025-05-12T11:24:45.946`) will be parsed in the timezone (e.g., `-04:00`).\n * The parsed time will then be transformed into a range like:\n * `[\"2025-05-12T11:24:45.000\", \"2025-05-12T11:24:45.999\"]`.\n *\n */\nexport default function transformComplexCondition(\n condition: Condition,\n fields: Field[],\n transformRelativeDate = true,\n currentDateTime?: string,\n timezone?: string\n): Condition {\n if (hasProp(condition, 'AND')) {\n const childNodes: Condition[] = condition.AND.map(n =>\n transformComplexCondition(n, fields, transformRelativeDate, currentDateTime, timezone)\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, transformRelativeDate, currentDateTime, timezone)\n );\n return {\n OR: childNodes\n };\n }\n\n if (hasProp(condition, 'NOT')) {\n return {\n NOT: transformComplexCondition(\n condition.NOT,\n fields,\n transformRelativeDate,\n currentDateTime,\n timezone\n )\n };\n }\n\n return transformLeafCondition(\n condition.condition,\n fields,\n transformRelativeDate,\n currentDateTime,\n timezone\n );\n}\n"]}
|
|
@@ -5,7 +5,8 @@ export type { default as FieldConditionProps } from './FieldCondition.types';
|
|
|
5
5
|
export { default as evaluateCondition } from './core/evaluator';
|
|
6
6
|
export { default as formatCondition, formatRelativeDate } from './core/formatter';
|
|
7
7
|
export { default as transformComplexCondition } from './core/transformer';
|
|
8
|
-
export type { ComparatorsByType, RHSType, FieldType } from './core/types';
|
|
8
|
+
export type { ComparatorsByType, RHSType, FieldType, Comparator } from './core/types';
|
|
9
9
|
export { splitConditionTree, parseLogicString } from './core/utils';
|
|
10
10
|
export { default as AtomicCondition, getInitConditionForLhs, isValidCondition } from './AtomicCondition';
|
|
11
|
+
export type { AtomicConditionProps } from './AtomicCondition';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionBuilder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,YAAY,EACV,OAAO,IAAI,qBAAqB,EAChC,SAAS,EACT,mBAAmB,EACnB,KAAK,EACL,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionBuilder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,YAAY,EACV,OAAO,IAAI,qBAAqB,EAChC,SAAS,EACT,mBAAmB,EACnB,KAAK,EACL,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,OAAO,IAAI,eAAe,EAC1B,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ConditionBuilder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAS7C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,OAAO,IAAI,eAAe,EAC1B,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC","sourcesContent":["export { default } from './ConditionBuilder';\nexport type {\n default as ConditionBuilderProps,\n Condition,\n DateFunctionsByType,\n Field,\n LeafCondition,\n ValueSelection\n} from './ConditionBuilder.types';\nexport { default as FieldCondition } from './FieldCondition';\nexport type { default as FieldConditionProps } from './FieldCondition.types';\nexport { default as evaluateCondition } from './core/evaluator';\nexport { default as formatCondition, formatRelativeDate } from './core/formatter';\nexport { default as transformComplexCondition } from './core/transformer';\nexport type { ComparatorsByType, RHSType, FieldType } from './core/types';\nexport { splitConditionTree, parseLogicString } from './core/utils';\nexport {\n default as AtomicCondition,\n getInitConditionForLhs,\n isValidCondition\n} from './AtomicCondition';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ConditionBuilder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAS7C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,OAAO,IAAI,eAAe,EAC1B,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC","sourcesContent":["export { default } from './ConditionBuilder';\nexport type {\n default as ConditionBuilderProps,\n Condition,\n DateFunctionsByType,\n Field,\n LeafCondition,\n ValueSelection\n} from './ConditionBuilder.types';\nexport { default as FieldCondition } from './FieldCondition';\nexport type { default as FieldConditionProps } from './FieldCondition.types';\nexport { default as evaluateCondition } from './core/evaluator';\nexport { default as formatCondition, formatRelativeDate } from './core/formatter';\nexport { default as transformComplexCondition } from './core/transformer';\nexport type { ComparatorsByType, RHSType, FieldType, Comparator } from './core/types';\nexport { splitConditionTree, parseLogicString } from './core/utils';\nexport {\n default as AtomicCondition,\n getInitConditionForLhs,\n isValidCondition\n} from './AtomicCondition';\nexport type { AtomicConditionProps } from './AtomicCondition';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionInput.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ConditionInput.d.ts","sourceRoot":"","sources":["../../../src/components/ConditionInput/ConditionInput.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEV,+BAA+B,EAGhC,MAAM,yBAAyB,CAAC;AAoBjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AA+ClE,QAAA,MAAM,cAAc,EAAE,+BAA+B,CAAC,mBAAmB,CA6exE,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef, useState, useEffect, useRef } from 'react';
|
|
3
|
-
import { CompositeInput, hasProp, Input, RadioButton, useI18n, useConfiguration, DateRangeInput, TimeRangeInput, useUID, RadioButtonGroup, useAfterInitialEffect } from '@pega/cosmos-react-core';
|
|
3
|
+
import { CompositeInput, hasProp, Input, RadioButton, useI18n, useConfiguration, DateRangeInput, TimeRangeInput, useUID, NumberRangeInput, RadioButtonGroup, useAfterInitialEffect } 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
|
-
import { NumericRangeInput } from '../ConditionBuilder/RhsControls/NumericRangeInput';
|
|
9
8
|
import { StyledVerticalAtomicCondition, StyledConditionRadioGroup, StyledVerticalFieldGroup } from './ConditionInput.styles';
|
|
10
9
|
import { basicFieldMap, defaultComparators, valuesEqual, rangeValuesEqual, conditionsEqual, possibleFieldValuesToConditionFieldValues } from './utils';
|
|
11
10
|
const isDateValid = (dateTimeParam) => {
|
|
@@ -42,14 +41,13 @@ const ConditionInput = forwardRef(function ConditionInput({ field: fieldProp, co
|
|
|
42
41
|
const t = useI18n();
|
|
43
42
|
const { locale } = useConfiguration();
|
|
44
43
|
const [collapsed, setCollapsed] = useState(false);
|
|
45
|
-
const { name: fieldName, type: fieldType
|
|
44
|
+
const { name: fieldName, type: fieldType } = fieldProp;
|
|
46
45
|
const basicType = basicFieldMap[fieldType] ?? fieldType;
|
|
47
46
|
if (Array.isArray(fieldsProp))
|
|
48
47
|
validRhsTypes.add('FIELD');
|
|
49
48
|
const field = {
|
|
50
49
|
id: fieldName,
|
|
51
50
|
type: basicType,
|
|
52
|
-
unit: fieldUnit,
|
|
53
51
|
primary: label ?? fieldName,
|
|
54
52
|
possibleValues: possibleFieldValuesToConditionFieldValues(fieldProp.possibleValues)
|
|
55
53
|
};
|
|
@@ -216,10 +214,15 @@ const ConditionInput = forwardRef(function ConditionInput({ field: fieldProp, co
|
|
|
216
214
|
case 'DECIMAL':
|
|
217
215
|
case 'PERCENTAGE':
|
|
218
216
|
case 'CURRENCY':
|
|
219
|
-
defaultControl = (_jsx(
|
|
217
|
+
defaultControl = (_jsx(NumberRangeInput, { id: id, label: label, labelHidden: flat, ref: ref, value: {
|
|
220
218
|
start: rangeInputValue?.start?.toString() ?? '',
|
|
221
219
|
end: rangeInputValue?.end?.toString() ?? ''
|
|
222
|
-
}, onChange:
|
|
220
|
+
}, onChange: setRangeInputValue, onBlur: newRangeValue => {
|
|
221
|
+
handleRangeBlur({
|
|
222
|
+
start: newRangeValue.start ? Number(newRangeValue.start) : undefined,
|
|
223
|
+
end: newRangeValue.end ? Number(newRangeValue.end) : undefined
|
|
224
|
+
});
|
|
225
|
+
}, numberOfDecimals: fieldType === 'INTEGER' ? 0 : undefined, status: status, info: status === 'error' ? t('condition_builder_invalid_number_range') : undefined, handle: clearHandle }));
|
|
223
226
|
break;
|
|
224
227
|
case 'BOOLEAN':
|
|
225
228
|
defaultControl = (_jsxs(RadioButtonGroup, { as: StyledConditionRadioGroup, id: id, ref: ref, label: label, labelHidden: flat, 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) })] }));
|
|
@@ -303,7 +306,7 @@ const ConditionInput = forwardRef(function ConditionInput({ field: fieldProp, co
|
|
|
303
306
|
}, onChange: (value, conditionStatus) => {
|
|
304
307
|
newConditionStatus.current = conditionStatus;
|
|
305
308
|
setNewCondition(value);
|
|
306
|
-
}, fields: fields, itemDirection: 'column', lhsMode: 'label', validRhsTypes: validRhsTypes, dateFunctions: dateFunctions, indicateErrors: status === 'error', ref: ref })) : (_jsx(StyledVerticalFieldGroup, { name: label, collapsed: collapsed, onToggleCollapsed: () => setCollapsed(cur => !cur), children: defaultControl }));
|
|
309
|
+
}, fields: fields, itemDirection: 'column', lhsMode: 'label', validRhsTypes: validRhsTypes, dateFunctions: dateFunctions, indicateErrors: status === 'error', ref: ref, handle: clearHandle })) : (_jsx(StyledVerticalFieldGroup, { name: label, collapsed: collapsed, onToggleCollapsed: () => setCollapsed(cur => !cur), children: defaultControl }));
|
|
307
310
|
}
|
|
308
311
|
if (showAdvanced) {
|
|
309
312
|
return (_jsx(CompositeInput, { dialog: dialog, label: label, value: conditionProp
|