Skip to content

Commit 4dbfd40

Browse files
committed
added selectedSites Property
1 parent 2d4aa82 commit 4dbfd40

File tree

2 files changed

+39
-24
lines changed

2 files changed

+39
-24
lines changed

src/controls/sitePicker/ISitePicker.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ export interface ISitePickerProps {
4242
* Intial data to load in the 'Selected sites' area (optional)
4343
*/
4444
initialSites?: ISite[];
45+
/**
46+
* used to update the sites currently Selected in the contol
47+
*/
48+
selectedSites?: ISite[];
4549
/**
4650
* Define if you want to allow multi site selection. True by default.
4751
*/

src/controls/sitePicker/SitePicker.tsx

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
import * as React from 'react';
2-
import { mergeStyleSets } from 'office-ui-fabric-react/lib/Styling';
3-
import { Spinner, SpinnerSize } from 'office-ui-fabric-react/lib/Spinner';
4-
import { ISite, ISitePickerProps } from './ISitePicker';
5-
import { getAllSites, getHubSites } from '../../services/SPSitesService';
6-
import { IDropdownOption, Dropdown } from 'office-ui-fabric-react/lib/Dropdown';
7-
import { ISelectableOption, SelectableOptionMenuItemType } from 'office-ui-fabric-react/lib/utilities/selectableOption/SelectableOption.types';
8-
import orderBy from 'lodash/orderBy';
1+
import { Async } from '@uifabric/utilities/lib/Async';
92
import findIndex from 'lodash/findIndex';
3+
import orderBy from 'lodash/orderBy';
4+
import { Dropdown, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';
105
import { SearchBox } from 'office-ui-fabric-react/lib/SearchBox';
11-
import { toRelativeUrl } from '../../common/utilities/GeneralHelper';
12-
import { Async } from '@uifabric/utilities/lib/Async';
6+
import { Spinner, SpinnerSize } from 'office-ui-fabric-react/lib/Spinner';
7+
import { mergeStyleSets } from 'office-ui-fabric-react/lib/Styling';
8+
import { ISelectableOption, SelectableOptionMenuItemType } from 'office-ui-fabric-react/lib/utilities/selectableOption/SelectableOption.types';
9+
import * as React from 'react';
10+
1311
import * as telemetry from '../../common/telemetry';
12+
import { toRelativeUrl } from '../../common/utilities/GeneralHelper';
13+
import { getAllSites, getHubSites } from '../../services/SPSitesService';
14+
import { ISite, ISitePickerProps } from './ISitePicker';
1415

1516
const styles = mergeStyleSets({
1617
loadingSpinnerContainer: {
@@ -69,11 +70,12 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
6970
placeholder,
7071
searchPlaceholder,
7172
deferredSearchTime,
72-
className
73+
className,
74+
selectedSites
7375
} = props;
7476

7577
const [isLoading, setIsLoading] = React.useState<boolean>();
76-
const [selectedSites, setSelectedSites] = React.useState<ISite[]>();
78+
const [sites, setSites] = React.useState<ISite[]>();
7779
const [allSites, setAllSites] = React.useState<ISite[]>();
7880
const [filteredSites, setFilteredSites] = React.useState<ISite[]>();
7981
const [searchQuery, setSearchQuery] = React.useState<string>();
@@ -92,9 +94,9 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
9294

9395
const onSelectionChange = React.useCallback((e, item: IDropdownOption, index: number) => {
9496
let newSelectedSites: ISite[] = [];
95-
97+
//debugger;
9698
if (multiSelect !== false) {
97-
newSelectedSites = selectedSites ? [...selectedSites] : [];
99+
newSelectedSites = sites ? [...sites] : [];
98100
const existingIndex = findIndex(newSelectedSites, s => s.url === item.key);
99101

100102
if (existingIndex >= 0) {
@@ -116,9 +118,9 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
116118
onChange(newSelectedSites);
117119
}
118120

119-
setSelectedSites(newSelectedSites);
120-
121-
}, [selectedSites, multiSelect, onChange]);
121+
setSites(newSelectedSites);
122+
//console.log(`onselction change set sites to ${newSelectedSites[0].title}`);
123+
}, [sites, multiSelect, onChange]);
122124

123125
const getOptions = React.useCallback((): IDropdownOption[] => {
124126

@@ -140,7 +142,7 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
140142
});
141143
}
142144

143-
const selectedSitesIds: string[] = selectedSites ? selectedSites.map(s => s.url!) : [];
145+
const selectedSitesIds: string[] = sites ? sites.map(s => s.url!) : [];
144146

145147
if (filteredSites) {
146148
filteredSites.forEach(s => {
@@ -154,7 +156,7 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
154156
}
155157

156158
return result;
157-
}, [allowSearch, selectedSites, filteredSites, allSites]);
159+
}, [allowSearch, sites, filteredSites, allSites]);
158160

159161
const onRenderOption = (option?: ISelectableOption, defaultRender?: (props?: ISelectableOption) => JSX.Element | null): JSX.Element | null => {
160162
if (!props) {
@@ -194,17 +196,26 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
194196
telemetry.track('ReactSitePicker');
195197
}, []);
196198

199+
React.useEffect(() => {
200+
//debugger;
201+
setSites(selectedSites);
202+
// console.log(`firt useeffect set sites to ${selectedSites[0].title}`);
203+
if (!allSites) {
204+
setIsLoading(true);
205+
}
206+
}, [selectedSites]);
197207

198208
React.useEffect(() => {
199209
if (!initialSites) {
200210
return;
201211
}
202212

203-
setSelectedSites(sites => {
204-
if (!sites) { // we want to set the state one time only
213+
setSites(osites => {
214+
if (!osites) { // we want to set the state one time only
215+
// console.log(`second useeffect part a set sites to ${initialSites[0].title}`);
205216
return initialSites;
206217
}
207-
218+
// console.log(`second useeffect part b set sites to ${sites[0].title}`);
208219
return sites;
209220
});
210221

@@ -261,8 +272,8 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
261272
label={label}
262273
placeholder={placeholder}
263274
options={getOptions()}
264-
selectedKey={multiSelect === false && !!selectedSites && !!selectedSites[0] ? selectedSites[0].url : undefined}
265-
selectedKeys={multiSelect !== false && !!selectedSites ? selectedSites.map(s => s.url) : undefined}
275+
selectedKey={multiSelect === false && !!sites && !!sites[0] ? sites[0].url : undefined}
276+
selectedKeys={multiSelect !== false && !!sites ? sites.map(s => s.url) : undefined}
266277
disabled={disabled}
267278
multiSelect={multiSelect !== false}
268279
onRenderOption={onRenderOption}

0 commit comments

Comments
 (0)