diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/replace.js b/packages/backend/src/apps/formatter/actions/text/transformers/replace.js index 4aa08b7f..401ae467 100644 --- a/packages/backend/src/apps/formatter/actions/text/transformers/replace.js +++ b/packages/backend/src/apps/formatter/actions/text/transformers/replace.js @@ -1,8 +1,26 @@ const replace = ($) => { const input = $.step.parameters.input; - const find = $.step.parameters.find; const replace = $.step.parameters.replace; + const useRegex = $.step.parameters.useRegex; + + if (useRegex) { + const ignoreCase = $.step.parameters.ignoreCase; + + const flags = [ignoreCase && 'i', 'g'].filter(Boolean).join(''); + + const timeoutId = setTimeout(() => { + $.execution.exit(); + }, 100); + + const regex = new RegExp(find, flags); + + const replacedValue = input.replaceAll(regex, replace); + + clearTimeout(timeoutId); + + return replacedValue; + } return input.replaceAll(find, replace); }; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/index.js b/packages/backend/src/apps/formatter/dynamic-fields/index.js index 41ca2e37..7ab9d1e0 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/index.js +++ b/packages/backend/src/apps/formatter/dynamic-fields/index.js @@ -1,3 +1,4 @@ import listTransformOptions from './list-transform-options/index.js'; +import listReplaceRegexOptions from './list-replace-regex-options/index.js'; -export default [listTransformOptions]; +export default [listTransformOptions, listReplaceRegexOptions]; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-replace-regex-options/index.js b/packages/backend/src/apps/formatter/dynamic-fields/list-replace-regex-options/index.js new file mode 100644 index 00000000..6c62a280 --- /dev/null +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-replace-regex-options/index.js @@ -0,0 +1,23 @@ +export default { + name: 'List replace regex options', + key: 'listReplaceRegexOptions', + + async run($) { + if (!$.step.parameters.useRegex) return []; + + return [ + { + label: 'Ignore case', + key: 'ignoreCase', + type: 'dropdown', + required: true, + description: 'Ignore case sensitivity.', + variables: true, + options: [ + { label: 'Yes', value: true }, + { label: 'No', value: false }, + ], + }, + ]; + }, +}; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.js b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.js index dfeb39ae..835e9ee7 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.js +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.js @@ -23,6 +23,33 @@ const replace = [ description: 'Text that will replace the found text.', variables: true, }, + { + label: 'Use Regular Expression', + key: 'useRegex', + type: 'dropdown', + required: true, + description: 'Use regex to search values.', + variables: true, + value: false, + options: [ + { label: 'Yes', value: true }, + { label: 'No', value: false }, + ], + additionalFields: { + type: 'query', + name: 'getDynamicFields', + arguments: [ + { + name: 'key', + value: 'listReplaceRegexOptions', + }, + { + name: 'parameters.useRegex', + value: '{parameters.useRegex}', + }, + ], + }, + }, ]; export default replace;