Skip to content

Commit e722a0b

Browse files
Fix for selection and duplicate terms
1 parent 579f517 commit e722a0b

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/controls/modernTaxonomyPicker/taxonomyTree/TaxonomyTree.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,7 @@ export function TaxonomyTree(props: ITaxonomyTreeProps): React.ReactElement<ITax
215215
if (props.termSetInfo.childrenCount > 0) {
216216
props.onLoadMoreData(Guid.parse(props.termSetInfo.id), props.anchorTermInfo ? Guid.parse(props.anchorTermInfo.id) : Guid.empty, '', props.hideDeprecatedTerms)
217217
.then((loadedTerms) => {
218-
const nonExistingTerms = loadedTerms.value.filter((term) => props.terms.every((prevTerm) => prevTerm.id !== term.id));
219-
const grps: IGroup[] = nonExistingTerms.map(term => {
218+
const grps: IGroup[] = loadedTerms.value.map(term => {
220219
let termNames = term.labels.filter((termLabel) => (termLabel.languageTag === props.languageTag && termLabel.isDefault === true));
221220
if (termNames.length === 0) {
222221
termNames = term.labels.filter((termLabel) => (termLabel.languageTag === props.termStoreInfo.defaultLanguageTag && termLabel.isDefault === true));
@@ -237,6 +236,7 @@ export function TaxonomyTree(props: ITaxonomyTreeProps): React.ReactElement<ITax
237236
return g;
238237
});
239238
props.setTerms((prevTerms) => {
239+
const nonExistingTerms = loadedTerms.value.filter((newTerm) => prevTerms.every((prevTerm) => prevTerm.id !== newTerm.id));
240240
return [...prevTerms, ...nonExistingTerms];
241241
});
242242
rootGroup.children = grps;
@@ -276,8 +276,7 @@ export function TaxonomyTree(props: ITaxonomyTreeProps): React.ReactElement<ITax
276276

277277
props.onLoadMoreData(Guid.parse(props.termSetInfo.id), Guid.parse(group.key), '', props.hideDeprecatedTerms)
278278
.then((loadedTerms) => {
279-
const nonExistingTerms = loadedTerms.value.filter((term) => props.terms.every((prevTerm) => prevTerm.id !== term.id));
280-
const grps: IGroup[] = nonExistingTerms.map(term => {
279+
const grps: IGroup[] = loadedTerms.value.map(term => {
281280
let termNames = term.labels.filter((termLabel) => (termLabel.languageTag === props.languageTag && termLabel.isDefault === true));
282281
if (termNames.length === 0) {
283282
termNames = term.labels.filter((termLabel) => (termLabel.languageTag === props.termStoreInfo.defaultLanguageTag && termLabel.isDefault === true));
@@ -299,10 +298,12 @@ export function TaxonomyTree(props: ITaxonomyTreeProps): React.ReactElement<ITax
299298
});
300299

301300
props.setTerms((prevTerms) => {
301+
const nonExistingTerms = loadedTerms.value.filter((newTerm) => prevTerms.every((prevTerm) => prevTerm.id !== newTerm.id));
302302
return [...prevTerms, ...nonExistingTerms];
303303
});
304304

305-
group.children = grps;
305+
const nonExistingChildren = grps.filter((grp) => group.children?.every((child) => child.key !== grp.key));
306+
group.children = nonExistingChildren;
306307
group.data.skiptoken = loadedTerms.skiptoken;
307308
group.hasMoreData = loadedTerms.skiptoken !== '';
308309
setGroupsLoading((prevGroupsLoading) => prevGroupsLoading.filter((value) => value !== group.key));
@@ -513,8 +514,7 @@ export function TaxonomyTree(props: ITaxonomyTreeProps): React.ReactElement<ITax
513514
setGroupsLoading((prevGroupsLoading) => [...prevGroupsLoading, footerProps.group.key]);
514515
props.onLoadMoreData(Guid.parse(props.termSetInfo.id), footerProps.group.key === props.termSetInfo.id ? Guid.empty : Guid.parse(footerProps.group.key), footerProps.group.data.skiptoken, props.hideDeprecatedTerms)
515516
.then((loadedTerms) => {
516-
const nonExistingTerms = loadedTerms.value.filter((term) => props.terms.every((prevTerm) => prevTerm.id !== term.id));
517-
const grps: IGroup[] = nonExistingTerms.map(term => {
517+
const grps: IGroup[] = loadedTerms.value.map(term => {
518518
let termNames = term.labels.filter((termLabel) => (termLabel.languageTag === props.languageTag && termLabel.isDefault === true));
519519
if (termNames.length === 0) {
520520
termNames = term.labels.filter((termLabel) => (termLabel.languageTag === props.termStoreInfo.defaultLanguageTag && termLabel.isDefault === true));
@@ -535,9 +535,11 @@ export function TaxonomyTree(props: ITaxonomyTreeProps): React.ReactElement<ITax
535535
return g;
536536
});
537537
props.setTerms((prevTerms) => {
538+
const nonExistingTerms = loadedTerms.value.filter((newTerm) => prevTerms.every((prevTerm) => prevTerm.id !== newTerm.id));
538539
return [...prevTerms, ...nonExistingTerms];
539540
});
540-
footerProps.group.children = [...footerProps.group.children, ...grps];
541+
const nonExistingChildren = grps.filter((grp) => footerProps.group.children?.every((child) => child.key !== grp.key));
542+
footerProps.group.children = [...footerProps.group.children, ...nonExistingChildren];
541543
footerProps.group.data.skiptoken = loadedTerms.skiptoken;
542544
footerProps.group.hasMoreData = loadedTerms.skiptoken !== '';
543545
setGroupsLoading((prevGroupsLoading) => prevGroupsLoading.filter((value) => value !== footerProps.group.key));

0 commit comments

Comments
 (0)