diff --git a/packages/backend/src/apps/formatter/actions/text/index.ts b/packages/backend/src/apps/formatter/actions/text/index.ts index 6c5e65ed..9653c6e8 100644 --- a/packages/backend/src/apps/formatter/actions/text/index.ts +++ b/packages/backend/src/apps/formatter/actions/text/index.ts @@ -4,6 +4,7 @@ import htmlToMarkdown from './transformers/html-to-markdown'; import markdownToHtml from './transformers/markdown-to-html'; import useDefaultValue from './transformers/use-default-value'; import extractEmailAddress from './transformers/extract-email-address'; +import extractNumber from './transformers/extract-number'; const transformers = { capitalize, @@ -11,6 +12,7 @@ const transformers = { markdownToHtml, useDefaultValue, extractEmailAddress, + extractNumber, }; export default defineAction({ @@ -32,6 +34,7 @@ export default defineAction({ { label: 'Convert Markdown to HTML', value: 'markdownToHtml' }, { label: 'Use Default Value', value: 'useDefaultValue' }, { label: 'Extract Email Address', value: 'extractEmailAddress' }, + { label: 'Extract Number', value: 'extractNumber' }, ], additionalFields: { type: 'query', diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/extract-number.ts b/packages/backend/src/apps/formatter/actions/text/transformers/extract-number.ts new file mode 100644 index 00000000..ef845169 --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/text/transformers/extract-number.ts @@ -0,0 +1,26 @@ +import { IGlobalVariable } from '@automatisch/types'; + +const extractNumber = ($: IGlobalVariable) => { + const input = $.step.parameters.input as string; + + // Example numbers that's supported: + // 123 + // -123 + // 123456 + // -123456 + // 121,234 + // -121,234 + // 121.234 + // -121.234 + // 1,234,567.89 + // -1,234,567.89 + // 1.234.567,89 + // -1.234.567,89 + + const numberRegexp = /-?((\d{1,3})+\.?,?)+/g; + + const numbers = input.match(numberRegexp); + return numbers ? numbers[0] : ''; +}; + +export default extractNumber; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts index cc4ae277..68adbdd5 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts @@ -4,6 +4,7 @@ import htmlToMarkdown from './options/html-to-markdown'; import markdownToHtml from './options/markdown-to-html'; import useDefaultValue from './options/use-default-value'; import extractEmailAddress from './options/extract-email-address'; +import extractNumber from './options/extract-number'; const options: IJSONObject = { capitalize, @@ -11,6 +12,7 @@ const options: IJSONObject = { markdownToHtml, useDefaultValue, extractEmailAddress, + extractNumber, }; export default { diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/options/extract-number.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/options/extract-number.ts new file mode 100644 index 00000000..cfb62957 --- /dev/null +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/options/extract-number.ts @@ -0,0 +1,12 @@ +const extractNumber = [ + { + label: 'Input', + key: 'input', + type: 'string' as const, + required: true, + description: 'Text that will be searched for a number.', + variables: true, + }, +]; + +export default extractNumber;