-
-
Notifications
You must be signed in to change notification settings - Fork 146
/
cellUtils.js
102 lines (97 loc) · 3.45 KB
/
cellUtils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import React from 'react';
import parseISO from 'date-fns/parseISO';
/* eslint-disable no-useless-escape */
export const isoDateRegex = /^\d{4}-(0[1-9]|1[0-2])-([12]\d|0[1-9]|3[01])([T\s](([01]\d|2[0-3])\:[0-5]\d|24\:00)(\:[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3])\:?([0-5]\d)?)?)?$/;
/* eslint-enable no-useless-escape */
export function getEmptyValue(emptyValue = '', props = {}) {
if (typeof emptyValue === 'function') {
return props.columnDef.emptyValue(props.rowData);
} else {
return emptyValue;
}
}
export function getCurrencyValue(currencySetting, value) {
if (currencySetting !== undefined) {
return new Intl.NumberFormat(
currencySetting.locale !== undefined ? currencySetting.locale : 'en-US',
{
style: 'currency',
currency:
currencySetting.currencyCode !== undefined
? currencySetting.currencyCode
: 'USD',
minimumFractionDigits:
currencySetting.minimumFractionDigits !== undefined
? currencySetting.minimumFractionDigits
: 2,
maximumFractionDigits:
currencySetting.maximumFractionDigits !== undefined
? currencySetting.maximumFractionDigits
: 2
}
).format(value !== undefined ? value : 0);
} else {
return new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
}).format(value !== undefined ? value : 0);
}
}
export function getRenderValue(props, icons, type) {
const dateLocale =
props.columnDef.dateSetting && props.columnDef.dateSetting.locale
? props.columnDef.dateSetting.locale
: undefined;
if (
props.columnDef.emptyValue !== undefined &&
(props.value === undefined || props.value === null)
) {
return getEmptyValue(props.columnDef.emptyValue, props);
}
if (
props.rowData === undefined &&
props.value &&
props.columnDef.groupRender
) {
return props.columnDef.groupRender(props.value);
} else if (props.columnDef.render && props.rowData) {
return props.columnDef.render(props.rowData);
} else if (props.columnDef.type === 'boolean') {
const style = { textAlign: 'left', verticalAlign: 'middle', width: 48 };
if (props.value) {
return <icons.Check style={style} />;
} else {
return <icons.ThirdStateCheck style={style} />;
}
} else if (props.columnDef.type === 'date') {
if (props.value instanceof Date) {
return props.value.toLocaleDateString(dateLocale);
} else if (isoDateRegex.exec(props.value)) {
return parseISO(props.value).toLocaleDateString(dateLocale);
} else {
return props.value;
}
} else if (props.columnDef.type === 'time') {
if (props.value instanceof Date) {
return props.value.toLocaleTimeString();
} else if (isoDateRegex.exec(props.value)) {
return parseISO(props.value).toLocaleTimeString(dateLocale);
} else {
return props.value;
}
} else if (props.columnDef.type === 'datetime') {
if (props.value instanceof Date) {
return props.value.toLocaleString();
} else if (isoDateRegex.exec(props.value)) {
return parseISO(props.value).toLocaleString(dateLocale);
} else {
return props.value;
}
} else if (props.columnDef.type === 'currency') {
return getCurrencyValue(props.columnDef.currencySetting, props.value);
} else if (typeof props.value === 'boolean') {
// To avoid forwardref boolean children.
return props.value.toString();
}
return props.value;
}