Skip to content

Commit 6c8278d

Browse files
committed
unused import removal
1 parent 5a637a5 commit 6c8278d

File tree

2 files changed

+47
-5
lines changed

2 files changed

+47
-5
lines changed

docs/documentation/docs/controls/ModernTaxonomyPicker.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ The ModernTaxonomyPicker control can be configured with the following properties
176176
| isLightDismiss | boolean | no | Whether the panel can be light dismissed. |
177177
| isBlocking | boolean | no | Whether the panel uses a modal overlay or not. |
178178
| onRenderActionButton | function | no | Optional custom renderer for adding e.g. a button with additional actions to the terms in the tree view. |
179+
| isPathRendred | boolean | no | Whether the terms will be rendered with the term label or the full path up to the root. |
179180

180181
## Standalone TaxonomyTree control
181182

src/controls/modernTaxonomyPicker/ModernTaxonomyPicker.tsx

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,13 @@ import { ModernTermPicker } from './modernTermPicker/ModernTermPicker';
4040
import { IModernTermPickerProps, ITermItemProps } from './modernTermPicker/ModernTermPicker.types';
4141
import { TermItem } from './termItem/TermItem';
4242
import { IReadonlyTheme } from '@microsoft/sp-component-base';
43+
import { ITermLabel } from '@pnp/sp/taxonomy/types';
4344

4445
export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
4546

4647
export interface IModernTaxonomyPickerProps {
4748
allowMultipleSelections?: boolean;
49+
isPathRendered?: boolean;
4850
termSetId: string;
4951
anchorTermId?: string;
5052
panelTitle: string;
@@ -126,12 +128,36 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
126128
onClosePanel();
127129
}
128130

131+
async function getParentTree(term: ITermInfo): Promise<ITermInfo> {
132+
let currentParent = term.parent;
133+
if(!currentParent) {
134+
const fullTerm = await taxonomyService.getTermById(Guid.parse(props.termSetId), Guid.parse(term.id));
135+
currentParent = fullTerm.parent;
136+
}
137+
if(!currentParent) { // Top-level term reached, no parents.
138+
return undefined;
139+
} else {
140+
currentParent.parent = await getParentTree(currentParent);
141+
return currentParent;
142+
}
143+
}
144+
145+
async function addParentInformationToTerms(filteredTerms: ITermInfo[]): Promise<ITermInfo[]> {
146+
for(const filteredTerm of filteredTerms) {
147+
const termParent = await getParentTree(filteredTerm);
148+
filteredTerm.parent = termParent;
149+
}
150+
151+
return filteredTerms;
152+
}
153+
129154
async function onResolveSuggestions(filter: string, selectedItems?: ITermInfo[]): Promise<ITermInfo[]> {
130155
if (filter === '') {
131156
return [];
132157
}
133158
const filteredTerms = await taxonomyService.searchTerm(Guid.parse(props.termSetId), filter, currentLanguageTag, props.anchorTermId ? Guid.parse(props.anchorTermId) : Guid.empty);
134-
const filteredTermsWithoutSelectedItems = filteredTerms.filter((term) => {
159+
const filteredTermsWithParentInformation = props.isPathRendered ? await addParentInformationToTerms(filteredTerms) : filteredTerms;
160+
const filteredTermsWithoutSelectedItems = filteredTermsWithParentInformation.filter((term) => {
135161
if (!selectedItems || selectedItems.length === 0) {
136162
return true;
137163
}
@@ -171,14 +197,29 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
171197
);
172198
}
173199

174-
function onRenderItem(itemProps: ITermItemProps): JSX.Element {
175-
let labels = itemProps.item.labels.filter((name) => name.languageTag === currentLanguageTag && name.isDefault);
200+
function getLabelsForCurrentLanguage(item: ITermInfo): ITermLabel[] {
201+
let labels = item.labels.filter((name) => name.languageTag === currentLanguageTag && name.isDefault);
176202
if (labels.length === 0) {
177-
labels = itemProps.item.labels.filter((name) => name.languageTag === currentTermStoreInfo.defaultLanguageTag && name.isDefault);
203+
labels = item.labels.filter((name) => name.languageTag === currentTermStoreInfo.defaultLanguageTag && name.isDefault);
178204
}
205+
return labels;
206+
}
179207

208+
function onRenderItem(itemProps: ITermItemProps): JSX.Element {
209+
const labels = getLabelsForCurrentLanguage(itemProps.item);
210+
let fullParentPrefixes: string[] = [ labels[0].name ];
211+
212+
if(props.isPathRendered) {
213+
let currentTermProps = itemProps.item;
214+
while(currentTermProps.parent !== undefined) {
215+
let currentParentLabels = getLabelsForCurrentLanguage(currentTermProps.parent);
216+
fullParentPrefixes.push(currentParentLabels[0].name);
217+
currentTermProps = currentTermProps.parent;
218+
}
219+
fullParentPrefixes = fullParentPrefixes.reverse();
220+
}
180221
return labels.length > 0 ? (
181-
<TermItem languageTag={currentLanguageTag} termStoreInfo={currentTermStoreInfo} {...itemProps}>{labels[0].name}</TermItem>
222+
<TermItem languageTag={currentLanguageTag} termStoreInfo={currentTermStoreInfo} {...itemProps}>{fullParentPrefixes.join(":")}</TermItem>
182223
) : null;
183224
}
184225

0 commit comments

Comments
 (0)