@@ -5,16 +5,24 @@ import numeral from "numeral";
5
5
import { isString , isArray , isUndefined , isFinite , isNil , toString } from "lodash" ;
6
6
import { visualizationsSettings } from "@/visualizations/visualizationsSettings" ;
7
7
8
+
8
9
numeral . options . scalePercentBy100 = false ;
9
10
10
11
// eslint-disable-next-line
11
12
const urlPattern = / ( ^ | [ \s \n ] | < b r \/ ? > ) ( (?: h t t p s ? | f t p ) : \/ \/ [ \- A - Z 0 - 9 + \u0026 \u2019 @ # \/ % ? = ( ) ~ _ | ! : , . ; ] * [ \- A - Z 0 - 9 + \u0026 @ # \/ % = ~ ( ) _ | ] ) / gi;
12
13
13
14
const hasOwnProperty = Object . prototype . hasOwnProperty ;
14
15
16
+ function NullValueComponent ( ) {
17
+ return < span className = "display-as-null" > { visualizationsSettings . nullValue } </ span > ;
18
+ }
19
+
15
20
export function createTextFormatter ( highlightLinks : any ) {
16
21
if ( highlightLinks ) {
17
22
return ( value : any ) => {
23
+ if ( value === null ) {
24
+ return < NullValueComponent />
25
+ }
18
26
if ( isString ( value ) ) {
19
27
const Link = visualizationsSettings . LinkComponent ;
20
28
value = value . replace ( urlPattern , ( unused , prefix , href ) => {
@@ -29,7 +37,7 @@ export function createTextFormatter(highlightLinks: any) {
29
37
return toString ( value ) ;
30
38
} ;
31
39
}
32
- return ( value : any ) => toString ( value ) ;
40
+ return ( value : any ) => value === null ? < NullValueComponent /> : toString ( value ) ;
33
41
}
34
42
35
43
function toMoment ( value : any ) {
@@ -46,18 +54,24 @@ function toMoment(value: any) {
46
54
export function createDateTimeFormatter ( format : any ) {
47
55
if ( isString ( format ) && format !== "" ) {
48
56
return ( value : any ) => {
57
+ if ( value === null ) {
58
+ return < NullValueComponent /> ;
59
+ }
49
60
const wrapped = toMoment ( value ) ;
50
61
return wrapped . isValid ( ) ? wrapped . format ( format ) : toString ( value ) ;
51
62
} ;
52
63
}
53
- return ( value : any ) => toString ( value ) ;
64
+ return ( value : any ) => value === null ? < NullValueComponent /> : toString ( value ) ;
54
65
}
55
66
56
67
export function createBooleanFormatter ( values : any ) {
57
68
if ( isArray ( values ) ) {
58
69
if ( values . length >= 2 ) {
59
70
// Both `true` and `false` specified
60
71
return ( value : any ) => {
72
+ if ( value === null ) {
73
+ return < NullValueComponent /> ;
74
+ }
61
75
if ( isNil ( value ) ) {
62
76
return "" ;
63
77
}
@@ -69,19 +83,30 @@ export function createBooleanFormatter(values: any) {
69
83
}
70
84
}
71
85
return ( value : any ) => {
86
+ if ( value === null ) {
87
+ return < NullValueComponent /> ;
88
+ }
72
89
if ( isNil ( value ) ) {
73
90
return "" ;
74
91
}
75
92
return value ? "true" : "false" ;
76
93
} ;
77
94
}
78
95
79
- export function createNumberFormatter ( format : any ) {
96
+ export function createNumberFormatter ( format : any , canReturnHTMLElement : boolean = false ) {
80
97
if ( isString ( format ) && format !== "" ) {
81
98
const n = numeral ( 0 ) ; // cache `numeral` instance
82
- return ( value : any ) => ( value === null || value === "" ? "" : n . set ( value ) . format ( format ) ) ;
99
+ return ( value : any ) => {
100
+ if ( canReturnHTMLElement && value === null ) {
101
+ return < NullValueComponent /> ;
102
+ }
103
+ if ( value === "" || value === null ) {
104
+ return "" ;
105
+ }
106
+ return n . set ( value ) . format ( format ) ;
107
+ }
83
108
}
84
- return ( value : any ) => toString ( value ) ;
109
+ return ( value : any ) => ( canReturnHTMLElement && value === null ) ? < NullValueComponent /> : toString ( value ) ;
85
110
}
86
111
87
112
export function formatSimpleTemplate ( str : any , data : any ) {
0 commit comments