Skip to content

Commit b1023ce

Browse files
committed
Add useSessionStorage property and fix errors
1 parent df6445b commit b1023ce

File tree

5 files changed

+51
-19
lines changed

5 files changed

+51
-19
lines changed

src/common/utilities/LocalesHelper.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { findIndex } from '@microsoft/sp-lodash-subset';
2+
13
export class LocalesHelper {
24

35
private static locales = {
@@ -53,7 +55,7 @@ export class LocalesHelper {
5355
10266: 'sr-Cyrl-RS',
5456
};
5557
public static getLocaleId(localeName: string): number {
56-
const pos: number = Object.keys(this.locales).findIndex(locKey => this.locales[locKey] === localeName);
58+
const pos: number = findIndex(Object.keys(this.locales), locKey => this.locales[locKey] === localeName);
5759
if (pos > -1) {
5860
return parseInt(Object.keys(this.locales)[pos]);
5961
}

src/controls/listView/ListView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class ListView extends React.Component<IListViewProps, IListViewState> {
2525
private dropArea = null;
2626
private dropRef = element => {
2727
this.dropArea = element;
28-
};
28+
}
2929

3030
constructor(props: IListViewProps) {
3131
super(props);

src/controls/taxonomyPicker/ITaxonomyPicker.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ export interface ITaxonomyPickerProps {
120120
* Note that error message should be specified in onGetErrorMessage
121121
*/
122122
required?: boolean;
123+
124+
/**
125+
* Specifies if you want to use session storage
126+
* Default will be true
127+
*/
128+
useSessionStorage?: boolean;
123129
}
124130

125131
/**

src/controls/taxonomyPicker/TaxonomyPicker.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
111111
hideTagsNotAvailableForTagging,
112112
initialValues,
113113
validateOnLoad,
114-
termsetNameOrID
114+
termsetNameOrID,
115+
useSessionStorage
115116
} = this.props;
116117

117118
let isValidateOnLoad = validateOnLoad && initialValues && initialValues.length >= 1;
@@ -120,7 +121,7 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
120121
const notFoundTerms: string[] = [];
121122
const notFoundTermIds: string[] = [];
122123

123-
const termSet = await this.termsService.getAllTerms(termsetNameOrID, hideDeprecatedTags, hideTagsNotAvailableForTagging);
124+
const termSet = await this.termsService.getAllTerms(termsetNameOrID, hideDeprecatedTags, hideTagsNotAvailableForTagging, useSessionStorage);
124125
const allTerms = termSet.Terms;
125126

126127
for (let i = 0, len = initialValues.length; i < len; i++) {
@@ -152,7 +153,7 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
152153
// });
153154
}
154155

155-
this.termsService.getAllTerms(this.props.termsetNameOrID, this.props.hideDeprecatedTags, this.props.hideTagsNotAvailableForTagging).then((response: ITermSet) => {
156+
this.termsService.getAllTerms(this.props.termsetNameOrID, this.props.hideDeprecatedTags, this.props.hideTagsNotAvailableForTagging, this.props.useSessionStorage).then((response: ITermSet) => {
156157
// Check if a response was retrieved
157158
let termSetAndTerms = response ? response : null;
158159
this.setState({
@@ -166,7 +167,7 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
166167
* Force update of the taxonomy tree - required by term action in case the term has been added, deleted or moved.
167168
*/
168169
private async updateTaxonomyTree(): Promise<void> {
169-
const termSetAndTerms = await this.termsService.getAllTerms(this.props.termsetNameOrID, this.props.hideDeprecatedTags, this.props.hideTagsNotAvailableForTagging);
170+
const termSetAndTerms = await this.termsService.getAllTerms(this.props.termsetNameOrID, this.props.hideDeprecatedTags, this.props.hideTagsNotAvailableForTagging, this.props.useSessionStorage);
170171

171172
this.setState({
172173
termSetAndTerms

src/services/SPTermStorePickerService.ts

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)