@@ -2,16 +2,14 @@ import * as React from 'react';
2
2
3
3
import findIndex from 'lodash/findIndex' ;
4
4
import orderBy from 'lodash/orderBy' ;
5
+ import { Dropdown , IDropdownOption } from '@fluentui/react/lib/Dropdown' ;
6
+ import { SearchBox } from '@fluentui/react/lib/SearchBox' ;
7
+ import { Spinner , SpinnerSize } from '@fluentui/react/lib/Spinner' ;
8
+ import { mergeStyleSets } from '@fluentui/react/lib/Styling' ;
5
9
import {
6
- Dropdown ,
7
- type IDropdownOption ,
8
- SearchBox ,
9
- Spinner ,
10
- SpinnerSize ,
11
- mergeStyleSets ,
12
10
ISelectableOption ,
13
11
SelectableOptionMenuItemType ,
14
- } from '@fluentui/react' ;
12
+ } from '@fluentui/react/lib/utilities/selectableOption/SelectableOption.types ' ;
15
13
16
14
import { Async } from '@uifabric/utilities/lib/Async' ;
17
15
@@ -23,6 +21,7 @@ import {
23
21
getHubSites ,
24
22
} from '../../services/SPSitesService' ;
25
23
import { ISite , ISitePickerProps } from './ISitePicker' ;
24
+ import { Icon } from '@fluentui/react' ;
26
25
27
26
const styles = mergeStyleSets ( {
28
27
loadingSpinnerContainer : {
@@ -60,6 +59,10 @@ const styles = mergeStyleSets({
60
59
overflow : 'hidden' ,
61
60
textOverflow : 'ellipsis' ,
62
61
} ,
62
+ customChevronContainer : {
63
+ display : 'flex' ,
64
+ gap : '10px' ,
65
+ } ,
63
66
} ) ;
64
67
65
68
const async = new Async ( ) ;
@@ -113,6 +116,30 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (
113
116
[ allSites ]
114
117
) ;
115
118
119
+ const clearItems = React . useCallback (
120
+ ( event : React . MouseEvent < HTMLElement , MouseEvent > ) => {
121
+ event . stopPropagation ( ) ;
122
+ return setSites ( [ ] ) ;
123
+ } ,
124
+ [ sites ]
125
+ ) ;
126
+
127
+ const CustomChevron = ( ) => {
128
+ if ( sites && sites . length > 0 ) {
129
+ return (
130
+ < div className = { styles . customChevronContainer } >
131
+ < Icon iconName = "Cancel" onClick = { clearItems } />
132
+ < Icon iconName = "ChevronDown" />
133
+ </ div >
134
+ ) ;
135
+ }
136
+ return (
137
+ < div className = { styles . customChevronContainer } >
138
+ < Icon iconName = "ChevronDown" />
139
+ </ div >
140
+ ) ;
141
+ } ;
142
+
116
143
const onSelectionChange = React . useCallback (
117
144
( e , item : IDropdownOption , index : number ) => {
118
145
let newSelectedSites : ISite [ ] = [ ] ;
@@ -337,14 +364,13 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (
337
364
< Dropdown
338
365
label = { label }
339
366
placeholder = { placeholder }
367
+ onRenderCaretDown = { CustomChevron }
340
368
options = { getOptions ( ) }
341
369
selectedKey = {
342
- multiSelect === false && ! ! sites && ! ! sites [ 0 ]
343
- ? sites [ 0 ] . url
344
- : undefined
370
+ multiSelect === false && ! ! sites && ! ! sites [ 0 ] ? sites [ 0 ] . url : [ ]
345
371
}
346
372
selectedKeys = {
347
- multiSelect !== false && ! ! sites ? sites . map ( ( s ) => s . url ) : undefined
373
+ multiSelect !== false && ! ! sites ? sites . map ( ( s ) => s . url ) : [ ]
348
374
}
349
375
disabled = { disabled }
350
376
multiSelect = { multiSelect !== false }
0 commit comments