Merge pull request #1266 from automatisch/numbers/format-number
feat(formatter): Add format number transformer to numbers action
This commit is contained in:
@@ -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",
|
||||||
|
@@ -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',
|
||||||
|
@@ -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;
|
@@ -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 {
|
||||||
|
@@ -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;
|
10
yarn.lock
10
yarn.lock
@@ -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"
|
||||||
|
Reference in New Issue
Block a user