Skip to content

Commit df16dd5

Browse files
committed
Correct validation and text localization
1 parent f4316c4 commit df16dd5

File tree

4 files changed

+37
-17
lines changed

4 files changed

+37
-17
lines changed

src/controls/taxonomyPicker/ITaxonomyPicker.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ export interface ITaxonomyPickerProps {
123123
export interface ITaxonomyPickerState {
124124
termSetAndTerms? : ITermSet;
125125
errorMessage?: string;
126+
/**
127+
* Error message populated in the component. errorMessage takes precedence over this.
128+
*/
129+
internalErrorMessage?: string;
126130
openPanel?: boolean;
127131
loaded?: boolean;
128132
activeNodes?: IPickerTerms;

src/controls/taxonomyPicker/TaxonomyPicker.tsx

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -95,26 +95,39 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
9595
}
9696
}
9797

98-
/**
99-
* it checks, if all entries still exist in term store. if allowMultipleSelections is true. it have to validate all values
100-
*/
101-
private async validateTerms() {
102-
let isValidateOnLoad = this.props.validateOnLoad && this.props.initialValues != null && this.props.initialValues.length >= 1;
98+
/**
99+
* it checks, if all entries still exist in term store. if allowMultipleSelections is true. it have to validate all values
100+
*/
101+
private async validateTerms(): Promise<void> {
102+
103+
const {
104+
hideDeprecatedTags,
105+
hideTagsNotAvailableForTagging,
106+
initialValues,
107+
validateOnLoad,
108+
termsetNameOrID
109+
} = this.props;
110+
111+
let isValidateOnLoad = validateOnLoad && initialValues && initialValues.length >= 1;
103112
if (isValidateOnLoad) {
104-
this.props.initialValues.forEach(async pickerTerm => {
105-
if (pickerTerm.termSet == null) {
106-
return;
113+
114+
let notFoundTerms: string[] = [];
115+
const termSet = await this.termsService.getAllTerms(termsetNameOrID, hideDeprecatedTags, hideTagsNotAvailableForTagging);
116+
const allTerms = termSet.Terms;
117+
118+
for (let i = 0, len = initialValues.length; i < len; i++) {
119+
const pickerTerm = initialValues[i];
120+
121+
if (!allTerms.filter(t => t.Id === pickerTerm.key).length) {
122+
notFoundTerms.push(pickerTerm.name);
107123
}
124+
}
108125

109-
this.termsService.getAllTerms(pickerTerm.termSet, this.props.hideDeprecatedTags, this.props.hideTagsNotAvailableForTagging).then((response: ITermSet) => {
110-
let selectedTerms = response ? response : null;
111-
if (selectedTerms == null) {
112-
this.setState({
113-
errorMessage: `The selected term '${pickerTerm.name}' could not be found in term store.`
114-
});
115-
}
126+
if (notFoundTerms.length) {
127+
this.setState({
128+
internalErrorMessage: strings.TaxonomyPickerTermsNotFound.replace('{0}', notFoundTerms.join(', '))
116129
});
117-
});
130+
}
118131
}
119132
}
120133

@@ -365,6 +378,7 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
365378
const {
366379
activeNodes,
367380
errorMessage,
381+
internalErrorMessage,
368382
openPanel,
369383
loaded,
370384
termSetAndTerms
@@ -392,7 +406,7 @@ export class TaxonomyPicker extends React.Component<ITaxonomyPickerProps, ITaxon
392406
</div>
393407
</div>
394408

395-
<FieldErrorMessage errorMessage={errorMessage} />
409+
<FieldErrorMessage errorMessage={errorMessage || internalErrorMessage} />
396410

397411
<Panel
398412
isOpen={openPanel}

src/loc/en-us.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ define([], () => {
4545
"TaxonomyPickerMenuTermSet": "Menu for Term Set",
4646
"TaxonomyPickerInLabel": "in",
4747
"TaxonomyPickerTermSetLabel": "Term Set",
48+
"TaxonomyPickerTermsNotFound": "The next selected term(s) could not be found in the term store: {0}",
4849

4950
peoplePickerComponentTooltipMessage: "People Picker",
5051
peoplePickerComponentErrorMessage: "Required Field",

src/loc/mystrings.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ declare interface IControlStrings {
2626
TaxonomyPickerMenuTermSet: string;
2727
TaxonomyPickerInLabel: string;
2828
TaxonomyPickerTermSetLabel: string;
29+
TaxonomyPickerTermsNotFound: string;
2930

3031
ListItemPickerSelectValue: string;
3132

0 commit comments

Comments
 (0)