1
+ import DOMPurify from 'dompurify' ;
1
2
import { type MultipleSelectInstance , multipleSelect } from 'multiple-select-vanilla' ;
2
3
3
4
import avatar1 from './images/avatar1.png' ;
@@ -8,24 +9,62 @@ import avatar5 from './images/avatar5.png';
8
9
import './example16.scss' ;
9
10
10
11
export default class Example {
11
- ms ?: MultipleSelectInstance ;
12
+ ms1 ?: MultipleSelectInstance ;
13
+ ms2 ?: MultipleSelectInstance ;
12
14
13
15
mount ( ) {
14
- this . ms = multipleSelect ( '. data' , {
16
+ this . ms1 = multipleSelect ( '[ data-test=select1] ' , {
15
17
data : [
16
18
{ value : '1' , text : `<img alt="avatar1" src="${ avatar1 } " class="avatar"> Eric` } ,
17
19
{ value : '2' , text : `<img alt="avatar2" src="${ avatar2 } " class="avatar"> Smith` } ,
18
20
{ value : '3' , text : `<img alt="avatar3" src="${ avatar3 } " class="avatar"> Erika` } ,
19
21
{ value : '4' , text : `<img alt="avatar4" src="${ avatar4 } " class="avatar"> Julia` } ,
20
22
{ value : '5' , text : `<img alt="avatar5" src="${ avatar5 } " class="avatar"> Catherine` } ,
21
23
] ,
24
+ infiniteScroll : true ,
22
25
renderOptionLabelAsHtml : true , // without this flag, html code will be showing as plain text
23
26
} ) as MultipleSelectInstance ;
27
+
28
+ this . ms2 = multipleSelect ( '[data-test=select2]' , {
29
+ singleRadio : true ,
30
+ renderOptionLabelAsHtml : true , // without this flag, html code will be showing as plain text
31
+ textTemplate : el => {
32
+ const [ name , job ] = el . textContent ! . split ( '::' ) ;
33
+ return `<div class="image-container"><img alt="avatar${ el . value } " src="${ this . getAvatarByIdx (
34
+ el . value ,
35
+ ) } " class="avatar"><div class="text-container"><div class="name-section">${ name } </div><div class="job-section">${ job } </div></div></div>`;
36
+ } ,
37
+ sanitizer : html => DOMPurify . sanitize ( html , { RETURN_TRUSTED_TYPE : true } ) ,
38
+ } ) as MultipleSelectInstance ;
24
39
}
25
40
26
41
unmount ( ) {
27
42
// destroy ms instance(s) to avoid DOM leaks
28
- this . ms ?. destroy ( ) ;
29
- this . ms = undefined ;
43
+ this . ms1 ?. destroy ( ) ;
44
+ this . ms2 ?. destroy ( ) ;
45
+ this . ms1 = undefined ;
46
+ this . ms2 = undefined ;
47
+ }
48
+
49
+ protected getAvatarByIdx ( idx : number | string ) {
50
+ let avatar : any ;
51
+ switch ( + idx ) {
52
+ case 1 :
53
+ avatar = avatar1 ;
54
+ break ;
55
+ case 2 :
56
+ avatar = avatar2 ;
57
+ break ;
58
+ case 3 :
59
+ avatar = avatar3 ;
60
+ break ;
61
+ case 4 :
62
+ avatar = avatar4 ;
63
+ break ;
64
+ case 5 :
65
+ avatar = avatar5 ;
66
+ break ;
67
+ }
68
+ return avatar ;
30
69
}
31
70
}
0 commit comments