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",
|
||||
"@sentry/node": "^7.42.0",
|
||||
"@sentry/tracing": "^7.42.0",
|
||||
"@types/accounting": "^0.4.2",
|
||||
"@types/luxon": "^2.3.1",
|
||||
"@types/passport": "^1.0.12",
|
||||
"@types/xmlrpc": "^1.3.7",
|
||||
"accounting": "^0.4.1",
|
||||
"ajv-formats": "^2.1.1",
|
||||
"axios": "0.24.0",
|
||||
"bcrypt": "^5.0.1",
|
||||
|
@@ -2,10 +2,12 @@ import defineAction from '../../../../helpers/define-action';
|
||||
|
||||
import performMathOperation from './transformers/perform-math-operation';
|
||||
import randomNumber from './transformers/random-number';
|
||||
import formatNumber from './transformers/format-number';
|
||||
|
||||
const transformers = {
|
||||
performMathOperation,
|
||||
randomNumber,
|
||||
formatNumber,
|
||||
};
|
||||
|
||||
export default defineAction({
|
||||
@@ -23,6 +25,7 @@ export default defineAction({
|
||||
options: [
|
||||
{ label: 'Perform Math Operation', value: 'performMathOperation' },
|
||||
{ label: 'Random Number', value: 'randomNumber' },
|
||||
{ label: 'Format Number', value: 'formatNumber' },
|
||||
],
|
||||
additionalFields: {
|
||||
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 performMathOperation from './numbers/perform-math-operation';
|
||||
import randomNumber from './numbers/random-number';
|
||||
import formatNumber from './numbers/format-number';
|
||||
|
||||
const options: IJSONObject = {
|
||||
capitalize,
|
||||
@@ -25,6 +26,7 @@ const options: IJSONObject = {
|
||||
useDefaultValue,
|
||||
performMathOperation,
|
||||
randomNumber,
|
||||
formatNumber,
|
||||
};
|
||||
|
||||
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"
|
||||
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":
|
||||
version "4.2.2"
|
||||
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"
|
||||
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:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
|
||||
|
Reference in New Issue
Block a user