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' ;
9
2
import findIndex from 'lodash/findIndex' ;
3
+ import orderBy from 'lodash/orderBy' ;
4
+ import { Dropdown , IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown' ;
10
5
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
+
13
11
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' ;
14
15
15
16
const styles = mergeStyleSets ( {
16
17
loadingSpinnerContainer : {
@@ -69,11 +70,12 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
69
70
placeholder,
70
71
searchPlaceholder,
71
72
deferredSearchTime,
72
- className
73
+ className,
74
+ selectedSites
73
75
} = props ;
74
76
75
77
const [ isLoading , setIsLoading ] = React . useState < boolean > ( ) ;
76
- const [ selectedSites , setSelectedSites ] = React . useState < ISite [ ] > ( ) ;
78
+ const [ sites , setSites ] = React . useState < ISite [ ] > ( ) ;
77
79
const [ allSites , setAllSites ] = React . useState < ISite [ ] > ( ) ;
78
80
const [ filteredSites , setFilteredSites ] = React . useState < ISite [ ] > ( ) ;
79
81
const [ searchQuery , setSearchQuery ] = React . useState < string > ( ) ;
@@ -92,9 +94,9 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
92
94
93
95
const onSelectionChange = React . useCallback ( ( e , item : IDropdownOption , index : number ) => {
94
96
let newSelectedSites : ISite [ ] = [ ] ;
95
-
97
+ //debugger;
96
98
if ( multiSelect !== false ) {
97
- newSelectedSites = selectedSites ? [ ...selectedSites ] : [ ] ;
99
+ newSelectedSites = sites ? [ ...sites ] : [ ] ;
98
100
const existingIndex = findIndex ( newSelectedSites , s => s . url === item . key ) ;
99
101
100
102
if ( existingIndex >= 0 ) {
@@ -116,9 +118,9 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
116
118
onChange ( newSelectedSites ) ;
117
119
}
118
120
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 ] ) ;
122
124
123
125
const getOptions = React . useCallback ( ( ) : IDropdownOption [ ] => {
124
126
@@ -140,7 +142,7 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
140
142
} ) ;
141
143
}
142
144
143
- const selectedSitesIds : string [ ] = selectedSites ? selectedSites . map ( s => s . url ! ) : [ ] ;
145
+ const selectedSitesIds : string [ ] = sites ? sites . map ( s => s . url ! ) : [ ] ;
144
146
145
147
if ( filteredSites ) {
146
148
filteredSites . forEach ( s => {
@@ -154,7 +156,7 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
154
156
}
155
157
156
158
return result ;
157
- } , [ allowSearch , selectedSites , filteredSites , allSites ] ) ;
159
+ } , [ allowSearch , sites , filteredSites , allSites ] ) ;
158
160
159
161
const onRenderOption = ( option ?: ISelectableOption , defaultRender ?: ( props ?: ISelectableOption ) => JSX . Element | null ) : JSX . Element | null => {
160
162
if ( ! props ) {
@@ -194,17 +196,26 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
194
196
telemetry . track ( 'ReactSitePicker' ) ;
195
197
} , [ ] ) ;
196
198
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 ] ) ;
197
207
198
208
React . useEffect ( ( ) => {
199
209
if ( ! initialSites ) {
200
210
return ;
201
211
}
202
212
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}`);
205
216
return initialSites ;
206
217
}
207
-
218
+ // console.log(`second useeffect part b set sites to ${sites[0].title}`);
208
219
return sites ;
209
220
} ) ;
210
221
@@ -261,8 +272,8 @@ export const SitePicker: React.FunctionComponent<ISitePickerProps> = (props: Rea
261
272
label = { label }
262
273
placeholder = { placeholder }
263
274
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 }
266
277
disabled = { disabled }
267
278
multiSelect = { multiSelect !== false }
268
279
onRenderOption = { onRenderOption }
0 commit comments