@@ -5,8 +5,9 @@ import { IIconProps } from 'office-ui-fabric-react/lib/components/Icon';
5
5
import { PrimaryButton , DefaultButton , IconButton , IButtonStyles } from 'office-ui-fabric-react/lib/Button' ;
6
6
import { Label } from 'office-ui-fabric-react/lib/Label' ;
7
7
import { Panel , PanelType } from 'office-ui-fabric-react/lib/Panel' ;
8
- import { ITag , TagPicker } from 'office-ui-fabric-react/lib/Pickers' ;
8
+ import { IBasePickerStyleProps , IBasePickerStyles , ITag , TagPicker } from 'office-ui-fabric-react/lib/Pickers' ;
9
9
import { IStackTokens , Stack } from 'office-ui-fabric-react/lib/Stack' ;
10
+ import { IStyleFunctionOrObject } from 'office-ui-fabric-react/lib/Utilities' ;
10
11
import { sp } from '@pnp/sp' ;
11
12
import { SPTaxonomyService } from '../../services/SPTaxonomyService' ;
12
13
import { TaxonomyForm } from './taxonomyForm' ;
@@ -15,7 +16,8 @@ import * as strings from 'ControlStrings';
15
16
import { TooltipHost } from '@microsoft/office-ui-fabric-react-bundle' ;
16
17
import { useId } from '@uifabric/react-hooks' ;
17
18
import { ITooltipHostStyles } from 'office-ui-fabric-react' ;
18
- import { ITermStoreInfo } from '@pnp/sp/taxonomy' ;
19
+ import { ITermInfo , ITermSetInfo , ITermStoreInfo } from '@pnp/sp/taxonomy' ;
20
+
19
21
export interface IModernTaxonomyPickerProps {
20
22
allowMultipleSelections : boolean ;
21
23
termSetId : string ;
@@ -36,13 +38,25 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
36
38
const [ selectedOptions , setSelectedOptions ] = React . useState < ITag [ ] > ( Object . prototype . toString . call ( props . initialValues ) === '[object Array]' ? props . initialValues : [ ] ) ;
37
39
const [ selectedPanelOptions , setSelectedPanelOptions ] = React . useState < ITag [ ] > ( [ ] ) ;
38
40
const [ termStoreInfo , setTermStoreInfo ] = React . useState < ITermStoreInfo > ( ) ;
41
+ const [ termSetInfo , setTermSetInfo ] = React . useState < ITermSetInfo > ( ) ;
42
+ const [ anchorTermInfo , setAnchorTermInfo ] = React . useState < ITermInfo > ( ) ;
39
43
40
44
React . useEffect ( ( ) => {
41
45
sp . setup ( props . context ) ;
42
46
taxonomyService . getTermStoreInfo ( )
43
47
. then ( ( localTermStoreInfo ) => {
44
48
setTermStoreInfo ( localTermStoreInfo ) ;
45
49
} ) ;
50
+ taxonomyService . getTermSetInfo ( Guid . parse ( props . termSetId ) )
51
+ . then ( ( localTermSetInfo ) => {
52
+ setTermSetInfo ( localTermSetInfo ) ;
53
+ } ) ;
54
+ if ( props . anchorTermId && props . anchorTermId !== Guid . empty . toString ( ) ) {
55
+ taxonomyService . getTermById ( Guid . parse ( props . termSetId ) , props . anchorTermId ? Guid . parse ( props . anchorTermId ) : Guid . empty )
56
+ . then ( ( localAnchorTermInfo ) => {
57
+ setAnchorTermInfo ( localAnchorTermInfo ) ;
58
+ } ) ;
59
+ }
46
60
} , [ ] ) ;
47
61
48
62
React . useEffect ( ( ) => {
@@ -74,14 +88,12 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
74
88
if ( filter === '' ) {
75
89
return [ ] ;
76
90
}
77
- const filteredTerms = await taxonomyService . searchTerm ( Guid . parse ( props . termSetId ) , filter , languageTag , props . anchorTermId ? Guid . parse ( props . anchorTermId ) : undefined ) ;
91
+ const filteredTerms = await taxonomyService . searchTerm ( Guid . parse ( props . termSetId ) , filter , languageTag , props . anchorTermId ? Guid . parse ( props . anchorTermId ) : Guid . empty ) ;
78
92
const filteredTermsWithoutSelectedItems = filteredTerms . filter ( ( term ) => {
79
93
if ( ! selectedItems || selectedItems . length === 0 ) {
80
94
return true ;
81
95
}
82
- for ( const selectedItem of selectedItems ) {
83
- return selectedItem . key !== term . id ;
84
- }
96
+ return selectedItems . every ( ( item ) => item . key !== term . id ) ;
85
97
} ) ;
86
98
const filteredTermsAndAvailable = filteredTermsWithoutSelectedItems . filter ( ( term ) => term . isAvailableForTagging . filter ( ( t ) => t . setId === props . termSetId ) [ 0 ] . isAvailable ) ;
87
99
const filteredTags = filteredTermsAndAvailable . map ( ( term ) => {
@@ -100,6 +112,7 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
100
112
const tooltipId = useId ( 'tooltip' ) ;
101
113
const hostStyles : Partial < ITooltipHostStyles > = { root : { display : 'inline-block' } } ;
102
114
const addTermButtonStyles : IButtonStyles = { rootHovered : { backgroundColor : "inherit" } , rootPressed : { backgroundColor : "inherit" } } ;
115
+ const tagPickerStyles : IStyleFunctionOrObject < IBasePickerStyleProps , IBasePickerStyles > = { input : { minheight : 34 } , text : { minheight : 34 } } ;
103
116
104
117
return (
105
118
< div className = { styles . modernTaxonomyPicker } >
@@ -112,6 +125,7 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
112
125
itemLimit = { props . allowMultipleSelections ? undefined : 1 }
113
126
selectedItems = { selectedOptions }
114
127
disabled = { props . disabled }
128
+ styles = { tagPickerStyles }
115
129
onChange = { ( itms ?: ITag [ ] ) => {
116
130
setSelectedOptions ( itms || [ ] ) ;
117
131
setSelectedPanelOptions ( itms || [ ] ) ;
@@ -162,7 +176,8 @@ export function ModernTaxonomyPicker(props: IModernTaxonomyPickerProps) {
162
176
allowMultipleSelections = { props . allowMultipleSelections }
163
177
onResolveSuggestions = { onResolveSuggestions }
164
178
onLoadMoreData = { taxonomyService . getTerms }
165
- getTermSetInfo = { taxonomyService . getTermSetInfo }
179
+ anchorTermInfo = { anchorTermInfo }
180
+ termSetInfo = { termSetInfo }
166
181
termStoreInfo = { termStoreInfo }
167
182
context = { props . context }
168
183
termSetId = { Guid . parse ( props . termSetId ) }
0 commit comments