Skip to content

Commit a3d3ce0

Browse files
DevPioAJIXuMuKmichaelmaillot
authored
feat: 🎨 adding close icon to clear field (#1839)
Co-authored-by: Alex Terentiev <[email protected]> Co-authored-by: Michaël Maillot <[email protected]>
1 parent fadbbf5 commit a3d3ce0

File tree

1 file changed

+37
-11
lines changed

1 file changed

+37
-11
lines changed

src/controls/sitePicker/SitePicker.tsx

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@ import * as React from 'react';
22

33
import findIndex from 'lodash/findIndex';
44
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';
59
import {
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

1614
import { Async } from '@uifabric/utilities/lib/Async';
1715

@@ -23,6 +21,7 @@ import {
2321
getHubSites,
2422
} from '../../services/SPSitesService';
2523
import { ISite, ISitePickerProps } from './ISitePicker';
24+
import { Icon } from '@fluentui/react';
2625

2726
const 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

6568
const 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

Comments
 (0)