@@ -18,17 +18,17 @@ type Props = {
18
18
} ;
19
19
20
20
export interface RendererMixinType {
21
- render ?( value : any , table : UserTable , writer ?: WriterType ) : any ;
21
+ render ?( value : any , table : UserTable , writer ?: WriterType , position ?: PointType ) : any ;
22
22
stringify ?( cell : CellType ) : string ;
23
- string ?( value : string , table : UserTable , writer ?: WriterType ) : any ;
24
- bool ?( value : boolean , writer ?: WriterType ) : any ;
25
- number ?( value : number , writer ?: WriterType ) : any ;
26
- date ?( value : Date , writer ?: WriterType ) : any ;
27
- timedelta ?( value : TimeDelta , writer ?: WriterType ) : any ;
28
- array ?( value : any [ ] , writer ?: WriterType ) : any ;
29
- object ?( value : any , writer ?: WriterType ) : any ;
30
- null ?( value : null , writer ?: WriterType ) : any ;
31
- undefined ?( value : undefined , writer ?: WriterType ) : any ;
23
+ string ?( value : string , table : UserTable , writer ?: WriterType , position ?: PointType ) : any ;
24
+ bool ?( value : boolean , writer ?: WriterType , position ?: PointType ) : any ;
25
+ number ?( value : number , writer ?: WriterType , position ?: PointType ) : any ;
26
+ date ?( value : Date , writer ?: WriterType , position ?: PointType ) : any ;
27
+ timedelta ?( value : TimeDelta , writer ?: WriterType , position ?: PointType ) : any ;
28
+ array ?( value : any [ ] , writer ?: WriterType , position ?: PointType ) : any ;
29
+ object ?( value : any , writer ?: WriterType , position ?: PointType ) : any ;
30
+ null ?( value : null , writer ?: WriterType , position ?: PointType ) : any ;
31
+ undefined ?( value : undefined , writer ?: WriterType , position ?: PointType ) : any ;
32
32
}
33
33
34
34
export class Renderer implements RendererMixinType {
@@ -64,50 +64,50 @@ export class Renderer implements RendererMixinType {
64
64
const address = p2a ( point ) ;
65
65
const cache = table . getSolvedCache ( address ) ;
66
66
const value = cache || table . getByPoint ( point ) ?. value ;
67
- return this . render ( value , table , writer ) ;
67
+ return this . render ( value , table , writer , point ) ;
68
68
}
69
69
70
- public render ( value : any , table : Table , writer ?: WriterType ) : any {
70
+ public render ( value : any , table : Table , writer ?: WriterType , position ?: PointType ) : any {
71
71
if ( this . condition && ! this . condition ( value ) ) {
72
72
return this . complement ? this . complement ( value ) : this . stringify ( { value } ) ;
73
73
}
74
74
75
75
switch ( typeof value ) {
76
76
case 'object' :
77
77
if ( value instanceof Date ) {
78
- return this . date ( value , writer ) ;
78
+ return this . date ( value , writer , position ) ;
79
79
}
80
80
if ( value instanceof TimeDelta ) {
81
- return this . timedelta ( value , writer ) ;
81
+ return this . timedelta ( value , writer , position ) ;
82
82
}
83
83
if ( value == null ) {
84
- return this . null ( value , writer ) ;
84
+ return this . null ( value , writer , position ) ;
85
85
}
86
86
if ( value instanceof Table ) {
87
- return this . render ( value . getByPoint ( { y : value . top , x : value . left } ) ?. value , table , writer ) ;
87
+ return this . render ( value . getByPoint ( { y : value . top , x : value . left } ) ?. value , table , writer , position ) ;
88
88
}
89
89
if ( Array . isArray ( value ) ) {
90
- return this . array ( value , writer ) ;
90
+ return this . array ( value , writer , position ) ;
91
91
}
92
92
if ( value instanceof FormulaError ) {
93
93
throw value ;
94
94
}
95
- return this . object ( value , writer ) ;
95
+ return this . object ( value , writer , position ) ;
96
96
case 'string' :
97
- return this . string ( value , table , writer ) ;
97
+ return this . string ( value , table , writer , position ) ;
98
98
case 'number' :
99
- return this . number ( value , writer ) ;
99
+ return this . number ( value , writer , position ) ;
100
100
case 'boolean' :
101
- return this . bool ( value , writer ) ;
101
+ return this . bool ( value , writer , position ) ;
102
102
case 'undefined' :
103
- return this . undefined ( value , writer ) ;
103
+ return this . undefined ( value , writer , position ) ;
104
104
case 'function' :
105
105
return value ( ) as string ;
106
106
}
107
107
return '' ;
108
108
}
109
109
110
- stringify ( cell : CellType ) : string {
110
+ stringify ( cell : CellType , position ?: PointType ) : string {
111
111
const { value } = cell ;
112
112
if ( value instanceof Date ) {
113
113
return this . date ( value ) ;
@@ -122,7 +122,7 @@ export class Renderer implements RendererMixinType {
122
122
return value . toString ( ) ;
123
123
}
124
124
125
- string ( value : string , table : Table , writer ?: WriterType ) : any {
125
+ string ( value : string , table : Table , writer ?: WriterType , position ?: PointType ) : any {
126
126
if ( value [ 0 ] === "'" ) {
127
127
return value . substring ( 1 ) ;
128
128
}
@@ -145,41 +145,41 @@ export class Renderer implements RendererMixinType {
145
145
return value ;
146
146
}
147
147
148
- bool ( value : boolean , writer ?: WriterType ) : any {
148
+ bool ( value : boolean , writer ?: WriterType , position ?: PointType ) : any {
149
149
return value ? 'TRUE' : 'FALSE' ;
150
150
}
151
151
152
- number ( value : number , writer ?: WriterType ) : any {
152
+ number ( value : number , writer ?: WriterType , position ?: PointType ) : any {
153
153
if ( isNaN ( value ) ) {
154
154
return 'NaN' ;
155
155
}
156
156
return value ;
157
157
}
158
158
159
- date ( value : Date , writer ?: WriterType ) : any {
159
+ date ( value : Date , writer ?: WriterType , position ?: PointType ) : any {
160
160
if ( value . getHours ( ) + value . getMinutes ( ) + value . getSeconds ( ) === 0 ) {
161
161
return dayjs ( value ) . format ( this . dateFormat ) ;
162
162
}
163
163
return dayjs ( value ) . format ( this . datetimeFormat ) ;
164
164
}
165
165
166
- timedelta ( value : TimeDelta , writer ?: WriterType ) : any {
166
+ timedelta ( value : TimeDelta , writer ?: WriterType , position ?: PointType ) : any {
167
167
return value . stringify ( this . timeDeltaFormat ) ;
168
168
}
169
169
170
- array ( value : any [ ] , writer ?: WriterType ) : any {
170
+ array ( value : any [ ] , writer ?: WriterType , position ?: PointType ) : any {
171
171
return value . map ( ( v ) => this . stringify ( { value : v } ) ) . join ( ',' ) ;
172
172
}
173
173
174
- object ( value : any , writer ?: WriterType ) : any {
174
+ object ( value : any , writer ?: WriterType , position ?: PointType ) : any {
175
175
return JSON . stringify ( value ) ;
176
176
}
177
177
178
- null ( value : any , writer ?: WriterType ) : any {
178
+ null ( value : any , writer ?: WriterType , position ?: PointType ) : any {
179
179
return '' ;
180
180
}
181
181
182
- undefined ( value : undefined , writer ?: WriterType ) : any {
182
+ undefined ( value : undefined , writer ?: WriterType , position ?: PointType ) : any {
183
183
return '' ;
184
184
}
185
185
}
0 commit comments