1
1
import * as React from 'react' ;
2
2
import styles from './TaxonomyForm.module.scss' ;
3
3
import { Checkbox , ChoiceGroup , GroupedList , GroupHeader , IBasePickerStyleProps , IBasePickerStyles , ICheckboxStyleProps , ICheckboxStyles , IChoiceGroupOption , IChoiceGroupOptionStyleProps , IChoiceGroupOptionStyles , IGroup , IGroupedList , IGroupFooterProps , IGroupHeaderProps , IGroupHeaderStyleProps , IGroupHeaderStyles , IGroupRenderProps , IGroupShowAllProps , ILabelStyleProps , ILabelStyles , ILinkStyleProps , ILinkStyles , IListProps , IRenderFunction , ISpinnerStyleProps , ISpinnerStyles , IStyleFunctionOrObject , ITag , Label , Link , Spinner , TagPicker } from 'office-ui-fabric-react' ;
4
- import { ITermInfo , ITermSetInfo } from '@pnp/sp/taxonomy' ;
4
+ import { ITermInfo , ITermSetInfo , ITermStoreInfo } from '@pnp/sp/taxonomy' ;
5
5
import { Guid } from '@microsoft/sp-core-library' ;
6
6
import { BaseComponentContext } from '@microsoft/sp-component-base' ;
7
7
import { css } from '@uifabric/utilities/lib/css' ;
@@ -17,6 +17,7 @@ export interface ITaxonomyFormProps {
17
17
onResolveSuggestions : ( filter : string , selectedItems ?: ITag [ ] ) => ITag [ ] | PromiseLike < ITag [ ] > ;
18
18
onLoadMoreData : ( termSetId : Guid , parentTermId ?: Guid , skiptoken ?: string , hideDeprecatedTerms ?: boolean , pageSize ?: number ) => Promise < { value : ITermInfo [ ] , skiptoken : string } > ;
19
19
getTermSetInfo : ( termSetId : Guid ) => Promise < ITermSetInfo | undefined > ;
20
+ termStoreInfo : ITermStoreInfo ;
20
21
placeHolder : string ;
21
22
}
22
23
@@ -30,18 +31,25 @@ export function TaxonomyForm(props: ITaxonomyFormProps): React.ReactElement<ITax
30
31
React . useEffect ( ( ) => {
31
32
props . getTermSetInfo ( props . termSetId )
32
33
. then ( ( termSetInfo ) => {
33
- const languageTag = props . context . pageContext . cultureInfo . currentUICultureName !== '' ? props . context . pageContext . cultureInfo . currentUICultureName : props . context . pageContext . web . languageName ;
34
-
35
- const termSetName = termSetInfo . localizedNames . filter ( ( name ) => name . languageTag === languageTag ) [ 0 ] . name ;
34
+ const languageTag = props . context . pageContext . cultureInfo . currentUICultureName !== '' ? props . context . pageContext . cultureInfo . currentUICultureName : props . termStoreInfo . defaultLanguageTag ;
35
+ let termSetNames = termSetInfo . localizedNames . filter ( ( name ) => name . languageTag === languageTag ) ;
36
+ if ( termSetNames . length === 0 ) {
37
+ termSetNames = termSetInfo . localizedNames . filter ( ( name ) => name . languageTag === props . termStoreInfo . defaultLanguageTag ) ;
38
+ }
39
+ const termSetName = termSetNames [ 0 ] . name ;
36
40
const rootGroup : IGroup = { name : termSetName , key : termSetInfo . id , startIndex : - 1 , count : 50 , level : 0 , isCollapsed : false , data : { skiptoken : '' } , hasMoreData : termSetInfo . childrenCount > 0 } ;
37
41
setGroups ( [ rootGroup ] ) ;
38
42
setGroupsLoading ( ( prevGroupsLoading ) => [ ...prevGroupsLoading , termSetInfo . id ] ) ;
39
43
if ( termSetInfo . childrenCount > 0 ) {
40
44
props . onLoadMoreData ( props . termSetId , Guid . empty , '' , true )
41
45
. then ( ( terms ) => {
42
46
const grps : IGroup [ ] = terms . value . map ( term => {
47
+ let termNames = term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === languageTag && termLabel . isDefault === true ) ) ;
48
+ if ( termNames . length === 0 ) {
49
+ termNames = term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === props . termStoreInfo . defaultLanguageTag && termLabel . isDefault === true ) ) ;
50
+ }
43
51
const g : IGroup = {
44
- name : term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === languageTag && termLabel . isDefault === true ) ) [ 0 ] ?. name ,
52
+ name : termNames [ 0 ] ?. name ,
45
53
key : term . id ,
46
54
startIndex : - 1 ,
47
55
count : 50 ,
@@ -66,7 +74,7 @@ export function TaxonomyForm(props: ITaxonomyFormProps): React.ReactElement<ITax
66
74
} , [ ] ) ;
67
75
68
76
const onToggleCollapse = ( group : IGroup ) : void => {
69
- const languageTag = props . context . pageContext . cultureInfo . currentUICultureName !== '' ? props . context . pageContext . cultureInfo . currentUICultureName : props . context . pageContext . web . languageName ;
77
+ const languageTag = props . context . pageContext . cultureInfo . currentUICultureName !== '' ? props . context . pageContext . cultureInfo . currentUICultureName : props . termStoreInfo . defaultLanguageTag ;
70
78
71
79
if ( group . isCollapsed === true ) {
72
80
setGroups ( ( prevGroups ) => {
@@ -96,8 +104,12 @@ export function TaxonomyForm(props: ITaxonomyFormProps): React.ReactElement<ITax
96
104
props . onLoadMoreData ( props . termSetId , Guid . parse ( group . key ) , '' , true )
97
105
. then ( ( terms ) => {
98
106
const grps : IGroup [ ] = terms . value . map ( term => {
107
+ let termNames = term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === languageTag && termLabel . isDefault === true ) ) ;
108
+ if ( termNames . length === 0 ) {
109
+ termNames = term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === props . termStoreInfo . defaultLanguageTag && termLabel . isDefault === true ) ) ;
110
+ }
99
111
const g : IGroup = {
100
- name : term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === languageTag && termLabel . isDefault === true ) ) [ 0 ] ?. name ,
112
+ name : termNames [ 0 ] ?. name ,
101
113
key : term . id ,
102
114
startIndex : - 1 ,
103
115
count : 50 ,
@@ -229,7 +241,7 @@ export function TaxonomyForm(props: ITaxonomyFormProps): React.ReactElement<ITax
229
241
230
242
const onRenderFooter = ( footerProps : IGroupFooterProps ) : JSX . Element => {
231
243
if ( ( footerProps . group . hasMoreData || footerProps . group . children && footerProps . group . children . length === 0 ) && ! footerProps . group . isCollapsed ) {
232
- const languageTag = props . context . pageContext . cultureInfo . currentUICultureName !== '' ? props . context . pageContext . cultureInfo . currentUICultureName : props . context . pageContext . web . languageName ;
244
+ const languageTag = props . context . pageContext . cultureInfo . currentUICultureName !== '' ? props . context . pageContext . cultureInfo . currentUICultureName : props . termStoreInfo . defaultLanguageTag ;
233
245
234
246
if ( groupsLoading . some ( value => value === footerProps . group . key ) ) {
235
247
const spinnerStyles : IStyleFunctionOrObject < ISpinnerStyleProps , ISpinnerStyles > = { circle : { verticalAlign : 'middle' } } ;
@@ -247,8 +259,12 @@ export function TaxonomyForm(props: ITaxonomyFormProps): React.ReactElement<ITax
247
259
props . onLoadMoreData ( props . termSetId , footerProps . group . key === props . termSetId . toString ( ) ? Guid . empty : Guid . parse ( footerProps . group . key ) , footerProps . group . data . skiptoken , true )
248
260
. then ( ( terms ) => {
249
261
const grps : IGroup [ ] = terms . value . map ( term => {
262
+ let termNames = term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === languageTag && termLabel . isDefault === true ) ) ;
263
+ if ( termNames . length === 0 ) {
264
+ termNames = term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === props . termStoreInfo . defaultLanguageTag && termLabel . isDefault === true ) ) ;
265
+ }
250
266
const g : IGroup = {
251
- name : term . labels . filter ( ( termLabel ) => ( termLabel . languageTag === languageTag && termLabel . isDefault === true ) ) [ 0 ] ?. name ,
267
+ name : termNames [ 0 ] ?. name ,
252
268
key : term . id ,
253
269
startIndex : - 1 ,
254
270
count : 50 ,
0 commit comments