@@ -9,6 +9,7 @@ export interface ITermItemSuggestionProps<T> extends ISuggestionItemProps<T> {
99 term : ITermInfo ;
1010 languageTag ?: string ;
1111 termStoreInfo ?: ITermStoreInfo ;
12+ searchFilter ?: string ;
1213 onLoadParentLabel ?: ( termId : Guid ) => Promise < string > ;
1314}
1415
@@ -27,28 +28,44 @@ export function TermItemSuggestion(props: ITermItemSuggestionProps<ITermInfo>):
2728 }
2829 } , [ ] ) ;
2930
30- let labels : {
31- name : string ;
32- isDefault : boolean ;
33- languageTag : string ;
34- } [ ] ;
31+ const filterLabels = ( isDefault : boolean , nameFilter ?: ( name : string ) => boolean ) : {
32+ name : string ;
33+ isDefault : boolean ;
34+ languageTag : string ;
35+ } [ ] => {
3536
36- if ( props . languageTag && props . termStoreInfo ) {
37- labels = props . term . labels . filter ( ( name ) => name . languageTag === props . languageTag && name . isDefault ) ;
38- if ( labels . length === 0 ) {
39- labels = props . term . labels . filter ( ( name ) => name . languageTag === props . termStoreInfo . defaultLanguageTag && name . isDefault ) ;
37+ nameFilter = nameFilter || ( ( ) => true ) ;
38+
39+ if ( props . languageTag && props . termStoreInfo ) {
40+ let labels = props . term . labels . filter ( ( name ) => name . languageTag === props . languageTag && name . isDefault === isDefault && nameFilter ( name . name ) ) ;
41+ if ( labels . length === 0 ) {
42+ labels = props . term . labels . filter ( ( name ) => name . languageTag === props . termStoreInfo . defaultLanguageTag && name . isDefault === isDefault && nameFilter ( name . name ) ) ;
43+ }
44+ return labels ;
45+ }
46+ else {
47+ return props . term . labels . filter ( ( name ) => name . isDefault === isDefault && nameFilter ( name . name ) ) ;
4048 }
4149 }
42- else {
43- labels = props . term . labels . filter ( ( name ) => name . isDefault ) ;
44- }
50+
51+ const labels = filterLabels ( true ) ;
52+ const synonyms = props . searchFilter ? filterLabels ( false , ( name ) => {
53+ const prefix = props . searchFilter ! ;
54+ if ( prefix . length > name . length )
55+ return false ;
56+ const compareTo = name . substring ( 0 , prefix . length ) ;
57+ return compareTo . localeCompare ( prefix , undefined , { sensitivity : 'base' } ) === 0 ;
58+ } ) : [ ] ;
4559
4660 return (
4761 < div className = { styles . termSuggestionContainer } title = { labels [ 0 ] ?. name } >
4862 { labels [ 0 ] ?. name }
4963 { parentLabel !== "" && < div >
5064 < span className = { styles . termSuggestionPath } > { `${ strings . ModernTaxonomyPickerSuggestionInLabel } ${ parentLabel } ` } </ span >
5165 </ div > }
66+ { synonyms . length > 0 && < ul className = { styles . termSynonymList } >
67+ { synonyms . map ( ( synonym ) => < li key = { synonym . name } > < span className = { styles . synonymPrefix } > { synonym . name . substring ( 0 , props . searchFilter ! . length ) } </ span > < span > { synonym . name . substring ( props . searchFilter ! . length ) } </ span > </ li > ) }
68+ </ ul > }
5269 </ div >
5370 ) ;
5471}
0 commit comments