@@ -149,7 +149,7 @@ export default class SPTermStorePickerService {
149149 * Retrieve all terms for the given term set
150150 * @param termset
151151 */
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 > {
153153 if ( Environment . type === EnvironmentType . Local ) {
154154 // If the running environment is local, load the data from the mock
155155 return this . getAllMockTerms ( ) ;
@@ -168,7 +168,7 @@ export default class SPTermStorePickerService {
168168 }
169169 }
170170
171- let childTerms = this . getTermsById ( termsetId ) ;
171+ let childTerms = this . getTermsById ( termsetId , useSessionStorage ) ;
172172
173173 if ( childTerms ) {
174174 return childTerms ;
@@ -231,7 +231,13 @@ export default class SPTermStorePickerService {
231231 }
232232 }
233233
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+ }
235241 return termStoreResultTermSet ;
236242 }
237243 return null ;
@@ -282,12 +288,21 @@ export default class SPTermStorePickerService {
282288 }
283289 }
284290
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 ) {
290304 return null ;
305+ }
291306 }
292307
293308 private searchTermsBySearchText ( terms , searchText ) {
@@ -303,7 +318,8 @@ export default class SPTermStorePickerService {
303318 // If the running environment is local, load the data from the mock
304319 return SPTermStoreMockHttpClient . searchTermsByName ( searchText ) ;
305320 } else {
306- var childTerms = this . getTermsById ( termId ) ;
321+ const { useSessionStorage } = this . props ;
322+ let childTerms = this . getTermsById ( termId , useSessionStorage ) ;
307323 if ( childTerms ) {
308324 return this . searchTermsBySearchText ( childTerms , searchText ) ;
309325 }
@@ -318,7 +334,8 @@ export default class SPTermStorePickerService {
318334 termsetNameOrID ,
319335 termId ,
320336 hideDeprecatedTags ,
321- hideTagsNotAvailableForTagging ) ;
337+ hideTagsNotAvailableForTagging ,
338+ useSessionStorage ) ;
322339
323340 if ( terms ) {
324341 return this . searchTermsBySearchText ( terms , searchText ) ;
@@ -332,7 +349,7 @@ export default class SPTermStorePickerService {
332349 /**
333350 * Retrieve all terms for the given term set and anchorId
334351 */
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 [ ] > {
336353
337354 let returnTerms : IPickerTerm [ ] = [ ] ;
338355
@@ -343,7 +360,7 @@ export default class SPTermStorePickerService {
343360 returnTerms . push ( this . convertTermToPickerTerm ( term ) ) ;
344361 } ) ;
345362 } else {
346- const childTerms = this . getTermsById ( anchorId ) ;
363+ const childTerms = this . getTermsById ( anchorId , useSessionStorage ) ;
347364 if ( childTerms ) {
348365 return childTerms ;
349366 }
@@ -361,7 +378,13 @@ export default class SPTermStorePickerService {
361378 returnTerms . push ( this . convertTermToPickerTerm ( term ) ) ;
362379 } ) ;
363380
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+ }
365388 }
366389 } else {
367390 terms . forEach ( term => {
0 commit comments