Merge pull request #1266 from automatisch/numbers/format-number

feat(formatter): Add format number transformer to numbers action
This commit is contained in:
Ali BARIN
2023-09-08 15:09:21 +02:00
committed by GitHub
6 changed files with 83 additions and 0 deletions

View File

@@ -31,9 +31,11 @@
"@rudderstack/rudder-sdk-node": "^1.1.2", "@rudderstack/rudder-sdk-node": "^1.1.2",
"@sentry/node": "^7.42.0", "@sentry/node": "^7.42.0",
"@sentry/tracing": "^7.42.0", "@sentry/tracing": "^7.42.0",
"@types/accounting": "^0.4.2",
"@types/luxon": "^2.3.1", "@types/luxon": "^2.3.1",
"@types/passport": "^1.0.12", "@types/passport": "^1.0.12",
"@types/xmlrpc": "^1.3.7", "@types/xmlrpc": "^1.3.7",
"accounting": "^0.4.1",
"ajv-formats": "^2.1.1", "ajv-formats": "^2.1.1",
"axios": "0.24.0", "axios": "0.24.0",
"bcrypt": "^5.0.1", "bcrypt": "^5.0.1",

View File

@@ -2,10 +2,12 @@ import defineAction from '../../../../helpers/define-action';
import performMathOperation from './transformers/perform-math-operation'; import performMathOperation from './transformers/perform-math-operation';
import randomNumber from './transformers/random-number'; import randomNumber from './transformers/random-number';
import formatNumber from './transformers/format-number';
const transformers = { const transformers = {
performMathOperation, performMathOperation,
randomNumber, randomNumber,
formatNumber,
}; };
export default defineAction({ export default defineAction({
@@ -23,6 +25,7 @@ export default defineAction({
options: [ options: [
{ label: 'Perform Math Operation', value: 'performMathOperation' }, { label: 'Perform Math Operation', value: 'performMathOperation' },
{ label: 'Random Number', value: 'randomNumber' }, { label: 'Random Number', value: 'randomNumber' },
{ label: 'Format Number', value: 'formatNumber' },
], ],
additionalFields: { additionalFields: {
type: 'query', type: 'query',

View File

@@ -0,0 +1,28 @@
import { IGlobalVariable } from '@automatisch/types';
import accounting from 'accounting';
const formatNumber = ($: IGlobalVariable) => {
const input = $.step.parameters.input as string;
const inputDecimalMark = $.step.parameters.inputDecimalMark as string;
const toFormat = $.step.parameters.toFormat as string;
const normalizedNumber = accounting.unformat(input, inputDecimalMark);
const decimalPart = normalizedNumber.toString().split('.')[1];
const precision = decimalPart ? decimalPart.length : 0;
if (toFormat === '0') {
// Comma for grouping & period for decimal
return accounting.formatNumber(normalizedNumber, precision, ',', '.');
} else if (toFormat === '1') {
// Period for grouping & comma for decimal
return accounting.formatNumber(normalizedNumber, precision, '.', ',');
} else if (toFormat === '2') {
// Space for grouping & period for decimal
return accounting.formatNumber(normalizedNumber, precision, ' ', '.');
} else if (toFormat === '3') {
// Space for grouping & comma for decimal
return accounting.formatNumber(normalizedNumber, precision, ' ', ',');
}
};
export default formatNumber;

View File

@@ -11,6 +11,7 @@ import trimWhitespace from './text/trim-whitespace';
import useDefaultValue from './text/use-default-value'; import useDefaultValue from './text/use-default-value';
import performMathOperation from './numbers/perform-math-operation'; import performMathOperation from './numbers/perform-math-operation';
import randomNumber from './numbers/random-number'; import randomNumber from './numbers/random-number';
import formatNumber from './numbers/format-number';
const options: IJSONObject = { const options: IJSONObject = {
capitalize, capitalize,
@@ -25,6 +26,7 @@ const options: IJSONObject = {
useDefaultValue, useDefaultValue,
performMathOperation, performMathOperation,
randomNumber, randomNumber,
formatNumber,
}; };
export default { export default {

View File

@@ -0,0 +1,38 @@
const formatNumber = [
{
label: 'Input',
key: 'input',
type: 'string' as const,
required: true,
description: 'The number you want to format.',
variables: true,
},
{
label: 'Input Decimal Mark',
key: 'inputDecimalMark',
type: 'dropdown' as const,
required: true,
description: 'The decimal mark of the input number.',
variables: true,
options: [
{ label: 'Comma', value: ',' },
{ label: 'Period', value: '.' },
],
},
{
label: 'To Format',
key: 'toFormat',
type: 'dropdown' as const,
required: true,
description: 'The format you want to convert the number to.',
variables: true,
options: [
{ label: 'Comma for grouping & period for decimal', value: '0' },
{ label: 'Period for grouping & comma for decimal', value: '1' },
{ label: 'Space for grouping & period for decimal', value: '2' },
{ label: 'Space for grouping & comma for decimal', value: '3' },
],
},
];
export default formatNumber;

View File

@@ -3735,6 +3735,11 @@
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
"@types/accounting@^0.4.2":
version "0.4.2"
resolved "https://registry.yarnpkg.com/@types/accounting/-/accounting-0.4.2.tgz#81239fc56bc62511a3d3ff535dde2e0bbf3c53c1"
integrity sha512-M8W6tsLZguGdRaSQMmg58PUM/5HgoDuBGVyMiYNGi0FZkLzJDjUBGGYRYj1J9OWELCTqfux+ogVyKObCzfWJgg==
"@types/aria-query@^4.2.0": "@types/aria-query@^4.2.0":
version "4.2.2" version "4.2.2"
resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc"
@@ -5050,6 +5055,11 @@ accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
mime-types "~2.1.34" mime-types "~2.1.34"
negotiator "0.6.3" negotiator "0.6.3"
accounting@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/accounting/-/accounting-0.4.1.tgz#87dd4103eff7f4460f1e186f5c677ed6cf566883"
integrity sha512-RU6KY9Y5wllyaCNBo1W11ZOTnTHMMgOZkIwdOOs6W5ibMTp72i4xIbEA48djxVGqMNTUNbvrP/1nWg5Af5m2gQ==
acorn-globals@^6.0.0: acorn-globals@^6.0.0:
version "6.0.0" version "6.0.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"