1
1
/**
2
2
* conjoon
3
3
* extjs-app-webmail
4
- * Copyright (C) 2019-2022 Thorsten Suckow-Homberg https://github.com/conjoon/extjs-app-webmail
4
+ * Copyright (C) 2019-2023 Thorsten Suckow-Homberg https://github.com/conjoon/extjs-app-webmail
5
5
*
6
6
* Permission is hereby granted, free of charge, to any person
7
7
* obtaining a copy of this software and associated documentation
@@ -34,6 +34,15 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
34
34
35
35
extend : "Ext.grid.Panel" ,
36
36
37
+ statics : {
38
+ required : {
39
+ /**
40
+ * @type {conjoon.cn_mail.view.mail.EmailAddressLinkRenderer }
41
+ */
42
+ emailAddressLinkRenderer : "conjoon.cn_mail.view.mail.EmailAddressLinkRenderer"
43
+ }
44
+ } ,
45
+
37
46
requires : [
38
47
// @see conjoon/extjs-app-webmail#178
39
48
"Ext.grid.column.Date" ,
@@ -42,7 +51,8 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
42
51
"conjoon.cn_mail.view.mail.message.grid.feature.PreviewTextLazyLoad" ,
43
52
"conjoon.cn_mail.store.mail.message.MessageItemStore" ,
44
53
"coon.comp.grid.feature.RowFlyMenu" ,
45
- "coon.core.util.Date"
54
+ "coon.core.util.Date" ,
55
+ "conjoon.cn_mail.view.mail.EmailAddressTip"
46
56
] ,
47
57
48
58
alias : "widget.cn_mail-mailmessagegrid" ,
@@ -69,6 +79,13 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
69
79
* @param {conjoon.cn_mail.store.mail.message.MessageItemStore } store
70
80
*/
71
81
82
+ /**
83
+ * @param addressTip
84
+ * @type {conjoon.cn_mail.view.mail.EmailAddressTip }
85
+ * @private
86
+ */
87
+
88
+
72
89
/**
73
90
* "storeRelayers" was already taken
74
91
* @private
@@ -119,7 +136,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
119
136
*/
120
137
emptySubjectText : "(No subject)" ,
121
138
getPreviewTextRow : record => `<div class="previewText">${ Ext . util . Format . nbsp ( record . get ( "previewText" ) ) } </div>` ,
122
- getAdditionalData : function ( data , idx , record , orig ) {
139
+ getAdditionalData ( data , idx , record , orig ) {
123
140
124
141
const
125
142
me = this ,
@@ -181,7 +198,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
181
198
182
199
viewConfig : {
183
200
markDirty : false ,
184
- getRowClass : function ( record , rowIndex , rowParams , store ) {
201
+ getRowClass ( record , rowIndex , rowParams , store ) {
185
202
let cls = record . get ( "recent" ) ? "recent" : "" ;
186
203
cls += record . get ( "seen" ) ? "" : " boldFont" ;
187
204
@@ -205,7 +222,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
205
222
* record are specified in its arguments. might be an issue with the
206
223
* needsUpdate computing and considering argument values?
207
224
*/
208
- renderer : function ( value , metaData , record ) {
225
+ renderer ( value , metaData , record ) {
209
226
return "<span class=\"" + ( ! value ? "fas" : "far" ) + " fa-circle\"></span>" ;
210
227
} ,
211
228
menuDisabled : true ,
@@ -214,7 +231,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
214
231
dataIndex : "hasAttachments" ,
215
232
hideable : false ,
216
233
text : "<span class=\"x-fa fa-paperclip\"></span>" ,
217
- renderer : function ( value ) {
234
+ renderer ( value ) {
218
235
return value ? "<span class=\"x-fa fa-paperclip\"></span>" : "" ;
219
236
} ,
220
237
menuDisabled : true ,
@@ -227,23 +244,16 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
227
244
dataIndex : "to" ,
228
245
text : "To" ,
229
246
width : 240 ,
230
- renderer : function ( value , meta , record , rowIndex , colIndex , store , view ) {
231
- return view . grid . stringifyTo ( value ) ;
247
+ renderer ( value , meta , record , rowIndex , colIndex , store , view ) {
248
+ return view . grid . renderAddress ( value ) ;
232
249
233
250
}
234
251
} , {
235
252
dataIndex : "from" ,
236
253
text : "From" ,
237
254
width : 140 ,
238
- renderer : function ( value , meta , record , rowIndex , colIndex , store , view ) {
239
-
240
- var feature = view . getFeature ( "cn_mail-mailMessageFeature-messagePreview" ) ;
241
-
242
- if ( ! feature . disabled ) {
243
- meta . tdCls += "previewLarge" ;
244
- }
245
-
246
- return value ? value . name : "" ;
255
+ renderer ( value , meta , record , rowIndex , colIndex , store , view ) {
256
+ return view . grid . renderAddress ( value ) ;
247
257
}
248
258
} , {
249
259
dataIndex : "draftDisplayAddress" ,
@@ -277,7 +287,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
277
287
*
278
288
* @protected
279
289
*/
280
- setRepresentedFolderType : function ( representedFolderType ) {
290
+ setRepresentedFolderType ( representedFolderType ) {
281
291
282
292
const me = this ;
283
293
@@ -288,7 +298,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
288
298
/**
289
299
* @inheritdoc
290
300
*/
291
- initComponent : function ( ) {
301
+ initComponent ( ) {
292
302
293
303
const me = this ;
294
304
@@ -297,7 +307,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
297
307
// apply Renderer to draftDisplayAddress columns
298
308
for ( let i = 0 , len = me . columns . length ; i < len ; i ++ ) {
299
309
if ( me . columns [ i ] . dataIndex === "draftDisplayAddress" ) {
300
- me . columns [ i ] . renderer = me . renderDraftDisplayAddress ;
310
+ me . columns [ i ] . renderer = me . renderDisplayAddress ;
301
311
}
302
312
}
303
313
@@ -311,8 +321,46 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
311
321
} ,
312
322
313
323
324
+ initTip ( ) {
325
+
326
+ const
327
+ me = this ,
328
+ view = me . getView ( ) ;
329
+
330
+ me . addressTip = Ext . create ( "conjoon.cn_mail.view.mail.EmailAddressTip" , {
331
+ target : view . el ,
332
+ delegate : view . itemSelector + " a.address" ,
333
+ queryAddress ( node ) {
334
+ const addrIndex = node . getAttribute ( "address-idx" ) ;
335
+
336
+ while ( node && ! node . getAttribute ( "data-recordId" ) ) {
337
+ node = node . parentNode ;
338
+ }
339
+
340
+ if ( ! node ) {
341
+ return ;
342
+ }
343
+
344
+ const
345
+ record = view . getRecord ( node ) ,
346
+ address = me . getAddressBasedOnCurrentInboxContext ( record , me . representedFolderType ) ;
347
+
348
+ return ( address . length && address [ addrIndex ] ) ? address [ addrIndex ] : address ;
349
+ }
350
+ } ) ;
351
+ } ,
352
+
353
+
354
+ getAddressBasedOnCurrentInboxContext ( record , representedFolderType ) {
355
+ if ( record . get ( "draft" ) || representedFolderType === "SENT" ) {
356
+ return record . get ( "to" ) ;
357
+ }
358
+ return record . get ( "from" ) ;
359
+ } ,
360
+
361
+
314
362
/**
315
- * Renderer for the draftDisplayAddress-column.
363
+ * Renderer for the from/ draftDisplayAddress-column.
316
364
*
317
365
* @param value
318
366
* @param meta
@@ -325,18 +373,24 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
325
373
*
326
374
* @private
327
375
*/
328
- renderDraftDisplayAddress : function ( value , meta , record , rowIndex , colIndex , store , view ) {
329
- const me = this ,
376
+ renderDisplayAddress ( value , meta , record , rowIndex , colIndex , store , view ) {
377
+
378
+ const
379
+ me = this ,
330
380
feature = view . getFeature ( "cn_mail-mailMessageFeature-messagePreview" ) ;
331
381
332
- if ( ! feature . disabled ) {
333
- meta . tdCls += "previewLarge" ;
334
- if ( record . get ( "draft" ) || me . representedFolderType === "SENT" ) {
335
- return view . grid . stringifyTo ( record . get ( "to" ) ) ;
336
- }
382
+ if ( feature . disabled ) {
383
+ return record . get ( "from" ) ? record . get ( "from" ) . name : "" ;
337
384
}
338
385
339
- return record . get ( "from" ) ? record . get ( "from" ) . name : "" ;
386
+ meta . tdCls += " previewLarge" ;
387
+
388
+ return view . grid . renderAddress (
389
+ me . getAddressBasedOnCurrentInboxContext (
390
+ record , me . representedFolderType
391
+ )
392
+ ) ;
393
+
340
394
} ,
341
395
342
396
@@ -350,7 +404,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
350
404
* @param {Boolean } enable true to switch to the grid view, falsy to
351
405
* switch to preview mode.
352
406
*/
353
- enableRowPreview : function ( enable ) {
407
+ enableRowPreview ( enable ) {
354
408
355
409
const me = this ,
356
410
view = me . getView ( ) ,
@@ -391,7 +445,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
391
445
*
392
446
* @inheritdoc
393
447
*/
394
- bindStore : function ( store , initial ) {
448
+ bindStore ( store , initial ) {
395
449
396
450
const me = this ;
397
451
@@ -416,7 +470,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
416
470
*
417
471
* @inheritdoc
418
472
*/
419
- unbindStore : function ( store ) {
473
+ unbindStore ( store ) {
420
474
421
475
const me = this ;
422
476
@@ -437,7 +491,7 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
437
491
*
438
492
* @param {conjoon.cn_mail.model.mail.message.reader.MessageItem } record
439
493
*/
440
- updateRowFlyMenu : function ( record ) {
494
+ updateRowFlyMenu ( record ) {
441
495
442
496
const me = this ,
443
497
feature = me . view . getFeature ( "cn_mail-mailMessageFeature-rowFlyMenu" ) ,
@@ -469,18 +523,17 @@ Ext.define("conjoon.cn_mail.view.mail.message.MessageGrid", {
469
523
* Helper function to return an array containing address-like objects (keyed
470
524
* with "address" and "name") as a string.
471
525
*
472
- * @param {Array } toAddresses
526
+ * @param {Array } addresses
473
527
*
474
528
* @return {String }
475
529
*/
476
- stringifyTo : function ( toAddresses ) {
477
- const names = [ ] ;
530
+ renderAddress ( addresses ) {
531
+ const me = this ;
478
532
479
- for ( var i = 0 , len = toAddresses . length ; i < len ; i ++ ) {
480
- names . push ( toAddresses [ i ] . name ) ;
481
- }
482
- return names . join ( ", " ) ;
533
+ addresses = [ ] . concat ( addresses ) ;
534
+ return addresses . map (
535
+ ( item , index ) => me . emailAddressLinkRenderer . render ( { ... item , index } )
536
+ ) . join ( "" ) ;
483
537
}
484
538
485
-
486
539
} ) ;
0 commit comments