@@ -149,7 +149,7 @@ export default class SPTermStorePickerService {
149
149
* Retrieve all terms for the given term set
150
150
* @param termset
151
151
*/
152
- public async getAllTerms ( termset : string , hideDeprecatedTags ?: boolean , hideTagsNotAvailableForTagging ?: boolean ) : Promise < ITermSet > {
152
+ public async getAllTerms ( termset : string , hideDeprecatedTags ?: boolean , hideTagsNotAvailableForTagging ?: boolean , useSessionStorage : boolean = true ) : Promise < ITermSet > {
153
153
if ( Environment . type === EnvironmentType . Local ) {
154
154
// If the running environment is local, load the data from the mock
155
155
return this . getAllMockTerms ( ) ;
@@ -168,7 +168,7 @@ export default class SPTermStorePickerService {
168
168
}
169
169
}
170
170
171
- let childTerms = this . getTermsById ( termsetId ) ;
171
+ let childTerms = this . getTermsById ( termsetId , useSessionStorage ) ;
172
172
173
173
if ( childTerms ) {
174
174
return childTerms ;
@@ -231,7 +231,13 @@ export default class SPTermStorePickerService {
231
231
}
232
232
}
233
233
234
- sessionStorage . setItem ( termsetId , JSON . stringify ( termStoreResultTermSet ) ) ;
234
+ try {
235
+ if ( useSessionStorage && window . sessionStorage ) {
236
+ window . sessionStorage . setItem ( termsetId , JSON . stringify ( termStoreResultTermSet ) ) ;
237
+ }
238
+ } catch ( error ) {
239
+ // Do nothing, sometimes storage quota exceed error if too many items
240
+ }
235
241
return termStoreResultTermSet ;
236
242
}
237
243
return null ;
@@ -282,12 +288,21 @@ export default class SPTermStorePickerService {
282
288
}
283
289
}
284
290
285
- private getTermsById ( termId ) {
286
- var terms = sessionStorage . getItem ( termId ) ;
287
- if ( terms )
288
- return JSON . parse ( terms ) ;
289
- else
291
+ private getTermsById ( termId , useSessionStorage : boolean = true ) {
292
+ try {
293
+ if ( useSessionStorage && window . sessionStorage ) {
294
+ let terms = window . sessionStorage . getItem ( termId ) ;
295
+ if ( terms )
296
+ return JSON . parse ( terms ) ;
297
+ else {
298
+ return null ;
299
+ }
300
+ } else {
301
+ return null ;
302
+ }
303
+ } catch ( error ) {
290
304
return null ;
305
+ }
291
306
}
292
307
293
308
private searchTermsBySearchText ( terms , searchText ) {
@@ -303,7 +318,8 @@ export default class SPTermStorePickerService {
303
318
// If the running environment is local, load the data from the mock
304
319
return SPTermStoreMockHttpClient . searchTermsByName ( searchText ) ;
305
320
} else {
306
- var childTerms = this . getTermsById ( termId ) ;
321
+ const { useSessionStorage } = this . props ;
322
+ let childTerms = this . getTermsById ( termId , useSessionStorage ) ;
307
323
if ( childTerms ) {
308
324
return this . searchTermsBySearchText ( childTerms , searchText ) ;
309
325
}
@@ -318,7 +334,8 @@ export default class SPTermStorePickerService {
318
334
termsetNameOrID ,
319
335
termId ,
320
336
hideDeprecatedTags ,
321
- hideTagsNotAvailableForTagging ) ;
337
+ hideTagsNotAvailableForTagging ,
338
+ useSessionStorage ) ;
322
339
323
340
if ( terms ) {
324
341
return this . searchTermsBySearchText ( terms , searchText ) ;
@@ -332,7 +349,7 @@ export default class SPTermStorePickerService {
332
349
/**
333
350
* Retrieve all terms for the given term set and anchorId
334
351
*/
335
- public async getAllTermsByAnchorId ( termsetNameOrID : string , anchorId : string , hideDeprecatedTags ?: boolean , hideTagsNotAvailableForTagging ?: boolean ) : Promise < IPickerTerm [ ] > {
352
+ public async getAllTermsByAnchorId ( termsetNameOrID : string , anchorId : string , hideDeprecatedTags ?: boolean , hideTagsNotAvailableForTagging ?: boolean , useSessionStorage : boolean = true ) : Promise < IPickerTerm [ ] > {
336
353
337
354
let returnTerms : IPickerTerm [ ] = [ ] ;
338
355
@@ -343,7 +360,7 @@ export default class SPTermStorePickerService {
343
360
returnTerms . push ( this . convertTermToPickerTerm ( term ) ) ;
344
361
} ) ;
345
362
} else {
346
- const childTerms = this . getTermsById ( anchorId ) ;
363
+ const childTerms = this . getTermsById ( anchorId , useSessionStorage ) ;
347
364
if ( childTerms ) {
348
365
return childTerms ;
349
366
}
@@ -361,7 +378,13 @@ export default class SPTermStorePickerService {
361
378
returnTerms . push ( this . convertTermToPickerTerm ( term ) ) ;
362
379
} ) ;
363
380
364
- sessionStorage . setItem ( anchorId , JSON . stringify ( returnTerms ) ) ;
381
+ try {
382
+ if ( useSessionStorage && window . sessionStorage ) {
383
+ window . sessionStorage . setItem ( anchorId , JSON . stringify ( returnTerms ) ) ;
384
+ }
385
+ } catch ( error ) {
386
+ // Do nothing
387
+ }
365
388
}
366
389
} else {
367
390
terms . forEach ( term => {
0 commit comments