Skip to content

Commit e22e68d

Browse files
authored
fix: Fix column data appearing incorrectly when multiplier null (#1194)
- Issue with Formatting values - Enterprise uses `multiplier: null` for the default settings, but in Community we only expected `undefined` or `number`. - Just handle when `multiplier` is `null` as well - Fixes #1193 - Tested by manually adding a formatter with `multiplier: null` in LocalWorkspaceStorage, e.g.: ``` formatter: [ { columnType: 'decimal', columnName: 'Bid', format: { label: '', type: 'type-global', formatString: '###,##0.00###', multiplier: null, }, }, ], ```
1 parent 66d8053 commit e22e68d

5 files changed

Lines changed: 90 additions & 9 deletions

File tree

__mocks__/dh-core.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1812,11 +1812,10 @@ class NumberFormat {
18121812
}
18131813

18141814
static format(pattern, number) {
1815-
if (pattern.indexOf('.') >= 0) {
1816-
return number.toFixed(4);
1817-
} else {
1818-
return number.toFixed(0);
1819-
}
1815+
const decimalIndex = pattern.indexOf('.');
1816+
const decimalCount =
1817+
decimalIndex >= 0 ? pattern.length - decimalIndex - 1 : 0;
1818+
return number.toFixed(decimalCount);
18201819
}
18211820
}
18221821

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import DecimalColumnFormatter from './DecimalColumnFormatter';
2+
3+
describe('multiplier tests', () => {
4+
const formatter = new DecimalColumnFormatter();
5+
const value = 10.4;
6+
it('handles null multiplier correctly', () => {
7+
expect(
8+
formatter.format(value, {
9+
multiplier: null,
10+
})
11+
).toBe('10.4000');
12+
});
13+
it('handles undefined multiplier correctly', () => {
14+
expect(
15+
formatter.format(value, {
16+
multiplier: undefined,
17+
})
18+
).toBe('10.4000');
19+
});
20+
it('ignores 0 multiplier correctly', () => {
21+
expect(
22+
formatter.format(value, {
23+
multiplier: 0,
24+
})
25+
).toBe('10.4000');
26+
});
27+
it('handles 1 multiplier correctly', () => {
28+
expect(
29+
formatter.format(value, {
30+
multiplier: 1,
31+
})
32+
).toBe('10.4000');
33+
});
34+
it('handles 2 multiplier correctly', () => {
35+
expect(
36+
formatter.format(value, {
37+
multiplier: 2,
38+
})
39+
).toBe('20.8000');
40+
});
41+
});

packages/jsapi-utils/src/formatters/DecimalColumnFormatter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import TableColumnFormatter, {
88
const log = Log.module('DecimalColumnFormatter');
99

1010
export type DecimalColumnFormat = TableColumnFormat & {
11-
multiplier?: number;
11+
multiplier?: number | null;
1212
};
1313

1414
export type DecimalColumnFormatterOptions = {
@@ -175,7 +175,7 @@ export class DecimalColumnFormatter extends TableColumnFormatter<number> {
175175
? format.formatString
176176
: this.defaultFormatString;
177177
const value =
178-
format.multiplier !== undefined && format.multiplier !== 0
178+
format.multiplier != null && format.multiplier !== 0
179179
? valueParam * format.multiplier
180180
: valueParam;
181181
try {
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import IntegerColumnFormatter from './IntegerColumnFormatter';
2+
3+
describe('multiplier tests', () => {
4+
const formatter = new IntegerColumnFormatter();
5+
const value = 10;
6+
it('handles null multiplier correctly', () => {
7+
expect(
8+
formatter.format(value, {
9+
multiplier: null,
10+
})
11+
).toBe('10');
12+
});
13+
it('handles undefined multiplier correctly', () => {
14+
expect(
15+
formatter.format(value, {
16+
multiplier: undefined,
17+
})
18+
).toBe('10');
19+
});
20+
it('ignores 0 multiplier correctly', () => {
21+
expect(
22+
formatter.format(value, {
23+
multiplier: 0,
24+
})
25+
).toBe('10');
26+
});
27+
it('handles 1 multiplier correctly', () => {
28+
expect(
29+
formatter.format(value, {
30+
multiplier: 1,
31+
})
32+
).toBe('10');
33+
});
34+
it('handles 2 multiplier correctly', () => {
35+
expect(
36+
formatter.format(value, {
37+
multiplier: 2,
38+
})
39+
).toBe('20');
40+
});
41+
});

packages/jsapi-utils/src/formatters/IntegerColumnFormatter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import TableColumnFormatter, {
88
const log = Log.module('IntegerColumnFormatter');
99

1010
export type IntegerColumnFormat = TableColumnFormat & {
11-
multiplier?: number;
11+
multiplier?: number | null;
1212
};
1313

1414
export type IntegerColumnFormatterOptions = {
@@ -150,7 +150,7 @@ export class IntegerColumnFormatter extends TableColumnFormatter<number> {
150150
? format.formatString
151151
: this.defaultFormatString;
152152
const value =
153-
format.multiplier !== undefined && format.multiplier !== 0
153+
format.multiplier != null && format.multiplier !== 0
154154
? valueParam * format.multiplier
155155
: valueParam;
156156
try {

0 commit comments

Comments
 (0)