@@ -2,16 +2,14 @@ import * as React from 'react';
22
33import findIndex from 'lodash/findIndex' ;
44import 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' ;
59import {
6- Dropdown ,
7- type IDropdownOption ,
8- SearchBox ,
9- Spinner ,
10- SpinnerSize ,
11- mergeStyleSets ,
1210 ISelectableOption ,
1311 SelectableOptionMenuItemType ,
14- } from '@fluentui/react' ;
12+ } from '@fluentui/react/lib/utilities/selectableOption/SelectableOption.types ' ;
1513
1614import { Async } from '@uifabric/utilities/lib/Async' ;
1715
@@ -23,6 +21,7 @@ import {
2321 getHubSites ,
2422} from '../../services/SPSitesService' ;
2523import { ISite , ISitePickerProps } from './ISitePicker' ;
24+ import { Icon } from '@fluentui/react' ;
2625
2726const styles = mergeStyleSets ( {
2827 loadingSpinnerContainer : {
@@ -60,6 +59,10 @@ const styles = mergeStyleSets({
6059 overflow : 'hidden' ,
6160 textOverflow : 'ellipsis' ,
6261 } ,
62+ customChevronContainer : {
63+ display : 'flex' ,
64+ gap : '10px' ,
65+ } ,
6366} ) ;
6467
6568const async = new Async ( ) ;
@@ -113,6 +116,30 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (
113116 [ allSites ]
114117 ) ;
115118
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+
116143 const onSelectionChange = React . useCallback (
117144 ( e , item : IDropdownOption , index : number ) => {
118145 let newSelectedSites : ISite [ ] = [ ] ;
@@ -337,14 +364,13 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (
337364 < Dropdown
338365 label = { label }
339366 placeholder = { placeholder }
367+ onRenderCaretDown = { CustomChevron }
340368 options = { getOptions ( ) }
341369 selectedKey = {
342- multiSelect === false && ! ! sites && ! ! sites [ 0 ]
343- ? sites [ 0 ] . url
344- : undefined
370+ multiSelect === false && ! ! sites && ! ! sites [ 0 ] ? sites [ 0 ] . url : [ ]
345371 }
346372 selectedKeys = {
347- multiSelect !== false && ! ! sites ? sites . map ( ( s ) => s . url ) : undefined
373+ multiSelect !== false && ! ! sites ? sites . map ( ( s ) => s . url ) : [ ]
348374 }
349375 disabled = { disabled }
350376 multiSelect = { multiSelect !== false }
0 commit comments