@pega/cosmos-react-condition-builder 8.0.0-build.6.1 → 8.0.0-build.60.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 +3 -3
- package/lib/components/ConditionBuilder/AtomicCondition.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/AtomicCondition.js +4 -1
- package/lib/components/ConditionBuilder/AtomicCondition.js.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.js +42 -60
- package/lib/components/ConditionBuilder/ConditionBuilder.js.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts +4 -4
- package/lib/components/ConditionBuilder/ConditionBuilder.styles.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.styles.js +18 -6
- package/lib/components/ConditionBuilder/ConditionBuilder.styles.js.map +1 -1
- package/lib/components/ConditionBuilder/ConditionBuilder.types.d.ts +11 -5
- 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/DateFunctionMenu.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/DateFunctionMenu.js.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/RelativeDateMenu.js.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts +2 -4
- package/lib/components/ConditionBuilder/RhsControls/ValueSelector.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js +166 -130
- package/lib/components/ConditionBuilder/RhsControls/ValueSelector.js.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/index.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/RhsControls/index.js +12 -14
- package/lib/components/ConditionBuilder/RhsControls/index.js.map +1 -1
- package/lib/components/ConditionBuilder/core/comparators.d.ts +1 -1
- package/lib/components/ConditionBuilder/core/comparators.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/core/comparators.js +35 -39
- package/lib/components/ConditionBuilder/core/comparators.js.map +1 -1
- package/lib/components/ConditionBuilder/core/evaluator.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/core/evaluator.js +11 -1
- package/lib/components/ConditionBuilder/core/evaluator.js.map +1 -1
- package/lib/components/ConditionBuilder/core/extendDayJs.js +4 -0
- package/lib/components/ConditionBuilder/core/extendDayJs.js.map +1 -1
- package/lib/components/ConditionBuilder/core/formatter.js +1 -1
- package/lib/components/ConditionBuilder/core/formatter.js.map +1 -1
- package/lib/components/ConditionBuilder/core/transformer.d.ts +18 -1
- package/lib/components/ConditionBuilder/core/transformer.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/core/transformer.js +120 -30
- package/lib/components/ConditionBuilder/core/transformer.js.map +1 -1
- package/lib/components/ConditionBuilder/core/utils.d.ts +6 -0
- package/lib/components/ConditionBuilder/core/utils.d.ts.map +1 -1
- package/lib/components/ConditionBuilder/core/utils.js +11 -0
- package/lib/components/ConditionBuilder/core/utils.js.map +1 -1
- package/lib/components/ConditionBuilder/index.d.ts +1 -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 +2 -3
- package/lib/components/ConditionInput/ConditionInput.d.ts.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.js +40 -28
- package/lib/components/ConditionInput/ConditionInput.js.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.styles.d.ts +2 -2
- package/lib/components/ConditionInput/ConditionInput.styles.d.ts.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.types.d.ts +3 -1
- package/lib/components/ConditionInput/ConditionInput.types.d.ts.map +1 -1
- package/lib/components/ConditionInput/ConditionInput.types.js.map +1 -1
- package/lib/components/ConditionInput/utils.d.ts.map +1 -1
- package/lib/components/ConditionInput/utils.js +5 -2
- package/lib/components/ConditionInput/utils.js.map +1 -1
- package/lib/components/PromotedFilters/ConditionSelector.d.ts +0 -2
- package/lib/components/PromotedFilters/ConditionSelector.d.ts.map +1 -1
- package/lib/components/PromotedFilters/ConditionSelector.js +13 -12
- package/lib/components/PromotedFilters/ConditionSelector.js.map +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.d.ts +2 -3
- package/lib/components/PromotedFilters/PromotedFilters.d.ts.map +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.js +55 -46
- package/lib/components/PromotedFilters/PromotedFilters.js.map +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.styles.d.ts +2 -2
- package/lib/components/PromotedFilters/PromotedFilters.styles.d.ts.map +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.styles.js +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.styles.js.map +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.types.d.ts +35 -6
- package/lib/components/PromotedFilters/PromotedFilters.types.d.ts.map +1 -1
- package/lib/components/PromotedFilters/PromotedFilters.types.js.map +1 -1
- package/package.json +9 -9
|
@@ -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: 'long',\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"]}
|
|
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 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"]}
|
|
@@ -2,6 +2,23 @@ import './extendDayJs';
|
|
|
2
2
|
import type { Condition, Field } from '../ConditionBuilder.types';
|
|
3
3
|
/** This function transforms Conditions with Relative Dates into Conditions with Date Ranges.
|
|
4
4
|
* Do not use this function unless you need to convert Relative Dates into Date Ranges.
|
|
5
|
+
*
|
|
6
|
+
* If `currentDateTime` is not provided, the current system time will be used.
|
|
7
|
+
* If `timezone` is not provided, the system's timezone will be used for conversion.
|
|
8
|
+
*
|
|
9
|
+
* The `timezone` prop is applied to the date-time values within the condition when the transformation occurs.
|
|
10
|
+
* If `timezone` is specified, the date-time will be converted from UTC (or the provided reference time) to the specified timezone.
|
|
11
|
+
* Then, the transformed date will be used to generate a range.
|
|
12
|
+
* This transformation ensures that the start and end times account for timezone differences when considering the condition's range.
|
|
13
|
+
*
|
|
14
|
+
* For example:
|
|
15
|
+
* - 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).
|
|
16
|
+
* The date-time will then be converted into a range:
|
|
17
|
+
* `["2025-05-12T07:24:45.000", "2025-05-12T07:24:45.999"]`.
|
|
18
|
+
* - A date-time without a timezone (`2025-05-12T11:24:45.946`) will be parsed in the timezone (e.g., `-04:00`).
|
|
19
|
+
* The parsed time will then be transformed into a range like:
|
|
20
|
+
* `["2025-05-12T11:24:45.000", "2025-05-12T11:24:45.999"]`.
|
|
21
|
+
*
|
|
5
22
|
*/
|
|
6
|
-
export default function transformComplexCondition(condition: Condition, fields: Field[], currentDateTime?: string): Condition;
|
|
23
|
+
export default function transformComplexCondition(condition: Condition, fields: Field[], currentDateTime?: string, timezone?: string): Condition;
|
|
7
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;AA2TjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,KAAK,EAAE,EACf,eAAe,CAAC,EAAE,MAAM,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,SAAS,CA0BX"}
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
import dayjs from 'dayjs';
|
|
3
3
|
import './extendDayJs';
|
|
4
4
|
import { hasProp } from '@pega/cosmos-react-core';
|
|
5
|
-
import {
|
|
5
|
+
import { truncateISODateString } from '../RhsControls';
|
|
6
|
+
import { getItem, isAbsoluteDateString } from './utils';
|
|
7
|
+
import { convertTimeValueToMs } from './time-utils';
|
|
6
8
|
const dayjsDateParts = {
|
|
7
9
|
SECONDS: 'second',
|
|
8
10
|
MINUTES: 'minute',
|
|
@@ -53,13 +55,26 @@ function getConditionForBetweenComparator(start, end, node) {
|
|
|
53
55
|
]
|
|
54
56
|
};
|
|
55
57
|
}
|
|
58
|
+
function getDateStringInTimezone(d, tz) {
|
|
59
|
+
return d.tz(tz).format('YYYY-MM-DDTHH:mm:ss.SSS');
|
|
60
|
+
}
|
|
56
61
|
/** Construct a date-range filter based on the given date bounds and the comparator */
|
|
57
|
-
function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
|
|
58
|
-
const formatDate = (d) => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
function getConditionFromRange(startDate, endDate, node, lhsFieldType, timezone) {
|
|
63
|
+
const formatDate = (d, tz) => {
|
|
64
|
+
let isoString;
|
|
65
|
+
if (tz) {
|
|
66
|
+
isoString = getDateStringInTimezone(d, tz);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const time = d.toDate().getTime();
|
|
70
|
+
const timezoneOffset = new Date(time).getTimezoneOffset() * 60000;
|
|
71
|
+
isoString = new Date(time - timezoneOffset).toISOString().slice(0, -1);
|
|
72
|
+
}
|
|
73
|
+
if (lhsFieldType === 'TIME_ONLY')
|
|
74
|
+
return truncateISODateString(isoString, lhsFieldType);
|
|
75
|
+
if (lhsFieldType === 'DATE_ONLY')
|
|
76
|
+
return isoString.substring(0, isoString.indexOf('T'));
|
|
77
|
+
return isoString;
|
|
63
78
|
};
|
|
64
79
|
switch (node.comparator) {
|
|
65
80
|
case 'EQ':
|
|
@@ -69,14 +84,14 @@ function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
|
|
|
69
84
|
condition: {
|
|
70
85
|
lhs: node.lhs,
|
|
71
86
|
comparator: 'LTE',
|
|
72
|
-
rhs: { value: formatDate(endDate) }
|
|
87
|
+
rhs: { value: formatDate(endDate, timezone) }
|
|
73
88
|
}
|
|
74
89
|
},
|
|
75
90
|
{
|
|
76
91
|
condition: {
|
|
77
92
|
lhs: node.lhs,
|
|
78
93
|
comparator: 'GTE',
|
|
79
|
-
rhs: { value: formatDate(startDate) }
|
|
94
|
+
rhs: { value: formatDate(startDate, timezone) }
|
|
80
95
|
}
|
|
81
96
|
}
|
|
82
97
|
]
|
|
@@ -88,14 +103,14 @@ function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
|
|
|
88
103
|
condition: {
|
|
89
104
|
lhs: node.lhs,
|
|
90
105
|
comparator: 'GT',
|
|
91
|
-
rhs: { value: formatDate(endDate) }
|
|
106
|
+
rhs: { value: formatDate(endDate, timezone) }
|
|
92
107
|
}
|
|
93
108
|
},
|
|
94
109
|
{
|
|
95
110
|
condition: {
|
|
96
111
|
lhs: node.lhs,
|
|
97
112
|
comparator: 'LT',
|
|
98
|
-
rhs: { value: formatDate(startDate) }
|
|
113
|
+
rhs: { value: formatDate(startDate, timezone) }
|
|
99
114
|
}
|
|
100
115
|
}
|
|
101
116
|
]
|
|
@@ -105,7 +120,7 @@ function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
|
|
|
105
120
|
condition: {
|
|
106
121
|
lhs: node.lhs,
|
|
107
122
|
comparator: 'GT',
|
|
108
|
-
rhs: { value: formatDate(endDate) }
|
|
123
|
+
rhs: { value: formatDate(endDate, timezone) }
|
|
109
124
|
}
|
|
110
125
|
};
|
|
111
126
|
case 'GTE':
|
|
@@ -113,7 +128,7 @@ function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
|
|
|
113
128
|
condition: {
|
|
114
129
|
lhs: node.lhs,
|
|
115
130
|
comparator: 'GTE',
|
|
116
|
-
rhs: { value: formatDate(startDate) }
|
|
131
|
+
rhs: { value: formatDate(startDate, timezone) }
|
|
117
132
|
}
|
|
118
133
|
};
|
|
119
134
|
case 'LT':
|
|
@@ -121,7 +136,7 @@ function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
|
|
|
121
136
|
condition: {
|
|
122
137
|
lhs: node.lhs,
|
|
123
138
|
comparator: 'LT',
|
|
124
|
-
rhs: { value: formatDate(startDate) }
|
|
139
|
+
rhs: { value: formatDate(startDate, timezone) }
|
|
125
140
|
}
|
|
126
141
|
};
|
|
127
142
|
case 'LTE':
|
|
@@ -129,26 +144,64 @@ function getConditionFromRange(startDate, endDate, node, lhsFieldType) {
|
|
|
129
144
|
condition: {
|
|
130
145
|
lhs: node.lhs,
|
|
131
146
|
comparator: 'LTE',
|
|
132
|
-
rhs: { value: formatDate(endDate) }
|
|
147
|
+
rhs: { value: formatDate(endDate, timezone) }
|
|
133
148
|
}
|
|
134
149
|
};
|
|
135
150
|
case 'BTW':
|
|
136
151
|
case 'NOT_BTW':
|
|
137
|
-
return getConditionForBetweenComparator(formatDate(startDate), formatDate(endDate), node);
|
|
152
|
+
return getConditionForBetweenComparator(formatDate(startDate, timezone), formatDate(endDate, timezone), node);
|
|
138
153
|
default:
|
|
139
154
|
return { condition: node };
|
|
140
155
|
}
|
|
141
156
|
}
|
|
142
|
-
function transformLeafCondition(node, fields, currentDateTime) {
|
|
157
|
+
function transformLeafCondition(node, fields, currentDateTime, timezone) {
|
|
143
158
|
const field = getItem(fields, node.lhs.field);
|
|
144
159
|
if (!field || !hasProp(field, 'type')) {
|
|
145
160
|
return { condition: node }; // Safety check
|
|
146
161
|
}
|
|
162
|
+
if ((node.comparator === 'EQ' || node.comparator === 'NEQ') &&
|
|
163
|
+
node.rhs &&
|
|
164
|
+
hasProp(node.rhs, 'value') &&
|
|
165
|
+
Object.keys(node.rhs).length === 1 &&
|
|
166
|
+
typeof node.rhs.value === 'string') {
|
|
167
|
+
const dateTime = node.rhs.value;
|
|
168
|
+
const timePartsCount = dateTime.split(':').length;
|
|
169
|
+
if (field.type === 'DATE_TIME') {
|
|
170
|
+
const date = isAbsoluteDateString(dateTime)
|
|
171
|
+
? dayjs(dateTime).tz(timezone)
|
|
172
|
+
: dayjs.tz(dateTime, timezone);
|
|
173
|
+
let startDate = date;
|
|
174
|
+
let endDate = date;
|
|
175
|
+
// For HH:MM:SS expand milliseconds to 0-999
|
|
176
|
+
if (timePartsCount === 3) {
|
|
177
|
+
startDate = startDate.millisecond(0);
|
|
178
|
+
endDate = endDate.millisecond(999);
|
|
179
|
+
return getConditionFromRange(startDate, endDate, node, field.type, timezone);
|
|
180
|
+
}
|
|
181
|
+
// HH:MM expand seconds to 0-59
|
|
182
|
+
if (timePartsCount === 2) {
|
|
183
|
+
startDate = startDate.second(0).millisecond(0);
|
|
184
|
+
endDate = endDate.second(59).millisecond(999);
|
|
185
|
+
return getConditionFromRange(startDate, endDate, node, field.type, timezone);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else if (field.type === 'TIME_ONLY') {
|
|
189
|
+
const dateTimeMs = convertTimeValueToMs(node.rhs.value);
|
|
190
|
+
// HH:MM expand seconds to 0-59
|
|
191
|
+
if (timePartsCount === 2) {
|
|
192
|
+
const startDate = dayjs(dateTimeMs).tz(timezone).second(0).millisecond(0);
|
|
193
|
+
const endDate = dayjs(dateTimeMs).tz(timezone).second(59).millisecond(0);
|
|
194
|
+
return getConditionFromRange(startDate, endDate, node, field.type, timezone);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
147
198
|
// Transform Relative date filters into equivalent date range filters
|
|
148
199
|
if (node.rhs && hasProp(node.rhs, 'relativeDate')) {
|
|
149
200
|
const { timePeriod, interval, datePart } = node.rhs.relativeDate;
|
|
150
201
|
const dayjsDatePart = dayjsDateParts[datePart];
|
|
151
|
-
const now =
|
|
202
|
+
const now = !currentDateTime || isAbsoluteDateString(currentDateTime)
|
|
203
|
+
? dayjs.utc(dayjs(currentDateTime).tz(timezone))
|
|
204
|
+
: dayjs.tz(currentDateTime, timezone);
|
|
152
205
|
let startDate = now;
|
|
153
206
|
let endDate = now;
|
|
154
207
|
if (timePeriod === 'CURRENT') {
|
|
@@ -166,48 +219,85 @@ function transformLeafCondition(node, fields, currentDateTime) {
|
|
|
166
219
|
startDate = now.add(1, dayjsDatePart).startOf(dayjsDatePart);
|
|
167
220
|
endDate = now.endOf(dayjsDatePart).add(interval, dayjsDatePart);
|
|
168
221
|
}
|
|
169
|
-
return getConditionFromRange(startDate, endDate, node, field.type);
|
|
222
|
+
return getConditionFromRange(startDate.tz(timezone), endDate.tz(timezone), node, field.type, timezone);
|
|
170
223
|
}
|
|
171
224
|
// Transform WEEKS-filters into equivalent date-range filters
|
|
172
225
|
// NOTE: This is a work-around until we make startOfDay customizable for Weeks
|
|
173
226
|
if (node.rhs && hasProp(node.rhs, 'dateFunction') && node.rhs.dateFunction === 'WEEKS') {
|
|
174
|
-
const startDate =
|
|
175
|
-
|
|
176
|
-
|
|
227
|
+
const startDate = typeof node.rhs.value === 'number' || isAbsoluteDateString(node.rhs.value)
|
|
228
|
+
? dayjs.utc(dayjs(node.rhs.value).tz(timezone)).startOf('day').tz(timezone)
|
|
229
|
+
: dayjs.tz(node.rhs.value, timezone).startOf('day'); // Since we store it as YYYY-MM-DD, it's already the start of day
|
|
230
|
+
const endDate = startDate.add(7, 'day').subtract(1, 'millisecond'); // Last millisecond on the 7th day from startDate
|
|
231
|
+
return getConditionFromRange(startDate, endDate, node, field.type, timezone);
|
|
177
232
|
}
|
|
178
233
|
// Transform double range comparators (BTW, NOT_BTW) into equivalent pair of single range comparators
|
|
179
234
|
if (node.rhs && hasProp(node.rhs, 'start')) {
|
|
180
235
|
if (field.type === 'DECIMAL' || field.type === 'INTEGER' || field.type === 'TIME_ONLY') {
|
|
181
236
|
return getConditionForBetweenComparator(node.rhs.start, node.rhs.end, node);
|
|
182
237
|
}
|
|
183
|
-
const startDate =
|
|
184
|
-
|
|
185
|
-
|
|
238
|
+
const startDate = typeof node.rhs.start === 'number' || isAbsoluteDateString(node.rhs.start)
|
|
239
|
+
? dayjs(node.rhs.start).tz(timezone)
|
|
240
|
+
: dayjs.tz(node.rhs.start, timezone);
|
|
241
|
+
const endDate = typeof node.rhs.end === 'number' || isAbsoluteDateString(node.rhs.end)
|
|
242
|
+
? dayjs(node.rhs.end).tz(timezone)
|
|
243
|
+
: dayjs.tz(node.rhs.end, timezone);
|
|
244
|
+
return getConditionFromRange(startDate, endDate, node, field.type, timezone);
|
|
245
|
+
}
|
|
246
|
+
// apply timezone to date-time fields
|
|
247
|
+
if (timezone && field.type === 'DATE_TIME' && node.rhs && !hasProp(node.rhs, 'dateFunction')) {
|
|
248
|
+
const newNode = { ...node };
|
|
249
|
+
if (newNode.rhs && hasProp(newNode.rhs, 'value')) {
|
|
250
|
+
newNode.rhs.value = getDateStringInTimezone(typeof newNode.rhs.value === 'number' || isAbsoluteDateString(newNode.rhs.value)
|
|
251
|
+
? dayjs(newNode.rhs.value)
|
|
252
|
+
: dayjs.tz(newNode.rhs.value, timezone), timezone);
|
|
253
|
+
}
|
|
254
|
+
if (newNode.rhs && hasProp(newNode.rhs, 'values')) {
|
|
255
|
+
const valuesWithTimezone = newNode.rhs.values.map(v => getDateStringInTimezone(typeof v === 'number' || isAbsoluteDateString(v) ? dayjs(v) : dayjs.tz(v, timezone), timezone));
|
|
256
|
+
newNode.rhs.values = valuesWithTimezone;
|
|
257
|
+
}
|
|
258
|
+
return { condition: newNode };
|
|
186
259
|
}
|
|
187
260
|
// For all other cases
|
|
188
261
|
return { condition: node };
|
|
189
262
|
}
|
|
190
263
|
/** This function transforms Conditions with Relative Dates into Conditions with Date Ranges.
|
|
191
264
|
* Do not use this function unless you need to convert Relative Dates into Date Ranges.
|
|
265
|
+
*
|
|
266
|
+
* If `currentDateTime` is not provided, the current system time will be used.
|
|
267
|
+
* If `timezone` is not provided, the system's timezone will be used for conversion.
|
|
268
|
+
*
|
|
269
|
+
* The `timezone` prop is applied to the date-time values within the condition when the transformation occurs.
|
|
270
|
+
* If `timezone` is specified, the date-time will be converted from UTC (or the provided reference time) to the specified timezone.
|
|
271
|
+
* Then, the transformed date will be used to generate a range.
|
|
272
|
+
* This transformation ensures that the start and end times account for timezone differences when considering the condition's range.
|
|
273
|
+
*
|
|
274
|
+
* For example:
|
|
275
|
+
* - 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).
|
|
276
|
+
* The date-time will then be converted into a range:
|
|
277
|
+
* `["2025-05-12T07:24:45.000", "2025-05-12T07:24:45.999"]`.
|
|
278
|
+
* - A date-time without a timezone (`2025-05-12T11:24:45.946`) will be parsed in the timezone (e.g., `-04:00`).
|
|
279
|
+
* The parsed time will then be transformed into a range like:
|
|
280
|
+
* `["2025-05-12T11:24:45.000", "2025-05-12T11:24:45.999"]`.
|
|
281
|
+
*
|
|
192
282
|
*/
|
|
193
|
-
export default function transformComplexCondition(condition, fields, currentDateTime) {
|
|
283
|
+
export default function transformComplexCondition(condition, fields, currentDateTime, timezone) {
|
|
194
284
|
if (hasProp(condition, 'AND')) {
|
|
195
|
-
const childNodes = condition.AND.map(n => transformComplexCondition(n, fields, currentDateTime));
|
|
285
|
+
const childNodes = condition.AND.map(n => transformComplexCondition(n, fields, currentDateTime, timezone));
|
|
196
286
|
return {
|
|
197
287
|
AND: childNodes
|
|
198
288
|
};
|
|
199
289
|
}
|
|
200
290
|
if (hasProp(condition, 'OR')) {
|
|
201
|
-
const childNodes = condition.OR.map(n => transformComplexCondition(n, fields, currentDateTime));
|
|
291
|
+
const childNodes = condition.OR.map(n => transformComplexCondition(n, fields, currentDateTime, timezone));
|
|
202
292
|
return {
|
|
203
293
|
OR: childNodes
|
|
204
294
|
};
|
|
205
295
|
}
|
|
206
296
|
if (hasProp(condition, 'NOT')) {
|
|
207
297
|
return {
|
|
208
|
-
NOT: transformComplexCondition(condition.NOT, fields, currentDateTime)
|
|
298
|
+
NOT: transformComplexCondition(condition.NOT, fields, currentDateTime, timezone)
|
|
209
299
|
};
|
|
210
300
|
}
|
|
211
|
-
return transformLeafCondition(condition.condition, fields, currentDateTime);
|
|
301
|
+
return transformLeafCondition(condition.condition, fields, currentDateTime, timezone);
|
|
212
302
|
}
|
|
213
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';\n\nimport { getItem } from './utils';\nimport type { 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 time = d.toDate().getTime();\n const timezoneOffset = new Date(time).getTimezoneOffset() * 60000;\n const isoString = new Date(time - timezoneOffset).toISOString().slice(0, -1);\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 === 'DECIMAL' || field.type === 'INTEGER' || 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\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"]}
|
|
@@ -34,4 +34,10 @@ export declare function getBasicModeOperators(logic: string): ('AND' | 'OR')[];
|
|
|
34
34
|
export declare function getLogicFromBasicMode(operatorsList: ('AND' | 'OR')[]): string;
|
|
35
35
|
/** Takes a list of objects and id of the object to be found and recursively finds and returns the object */
|
|
36
36
|
export declare function getItem(items: Field[], id: string): Field | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Checks whether given datetime string is absolute or relative
|
|
39
|
+
* @param str - datetime string
|
|
40
|
+
* @returns - true(if the timezone component is present) or false(if no timezone is present or if format is invalid)
|
|
41
|
+
*/
|
|
42
|
+
export declare function isAbsoluteDateString(str: string): boolean;
|
|
37
43
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAiQ/F,yDAAyD;AACzD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,EAAE,4CAA4C;AACjG,WAAW,GAAE,OAAe,EAC5B,kBAAkB,GAAE,OAAe,GAClC;IAAE,SAAS,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAqB9C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA0D5D;AAkDD,uFAAuF;AACvF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,EAAE,CAAA;CAAE,CAUjG;AAGD,mIAAmI;AACnI,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EACf,WAAW,GAAE,MAAW,GACvB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAA;CAAE,CAkBnE;AAED,qHAAqH;AACrH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAyBnE;AAED,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAMrE;AAED,2GAA2G;AAC3G,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,CAG7E;AAED,4GAA4G;AAC5G,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAiBrE"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/ConditionBuilder/core/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAiQ/F,yDAAyD;AACzD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,EAAE,4CAA4C;AACjG,WAAW,GAAE,OAAe,EAC5B,kBAAkB,GAAE,OAAe,GAClC;IAAE,SAAS,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAqB9C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA0D5D;AAkDD,uFAAuF;AACvF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,EAAE,CAAA;CAAE,CAUjG;AAGD,mIAAmI;AACnI,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EACf,WAAW,GAAE,MAAW,GACvB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAA;CAAE,CAkBnE;AAED,qHAAqH;AACrH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAyBnE;AAED,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAMrE;AAED,2GAA2G;AAC3G,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,CAG7E;AAED,4GAA4G;AAC5G,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAiBrE;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,WAE/C"}
|
|
@@ -451,4 +451,15 @@ export function getItem(items, id) {
|
|
|
451
451
|
});
|
|
452
452
|
return found;
|
|
453
453
|
}
|
|
454
|
+
// matches a ISO 8601 datetime with a timezone, it MUST have a timezone
|
|
455
|
+
// used in below function
|
|
456
|
+
const isoDateWithTimezoneRegex = /^-?\d{4,}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(([+-])\d{2}(:)?\d{2}|Z)$/;
|
|
457
|
+
/**
|
|
458
|
+
* Checks whether given datetime string is absolute or relative
|
|
459
|
+
* @param str - datetime string
|
|
460
|
+
* @returns - true(if the timezone component is present) or false(if no timezone is present or if format is invalid)
|
|
461
|
+
*/
|
|
462
|
+
export function isAbsoluteDateString(str) {
|
|
463
|
+
return isoDateWithTimezoneRegex.test(str);
|
|
464
|
+
}
|
|
454
465
|
//# sourceMappingURL=utils.js.map
|