Я предположил, что этот элемент управления улучшен на GitHub .
Этот codepen Я получил ответ из полученного там ответа, показывает, как это делается намомент ...
const {
TagPicker, Fabric, mergeStyles
} = window.Fabric;
const _testTags: ITag[] = [
'black',
'blue',
'brown',
'cyan',
'green',
'magenta',
'mauve',
'orange',
'pink',
'purple',
'red',
'rose',
'violet',
'white',
'yellow'
].map(item => ({ key: item, name: item, isNewItem: false }));
const newItem = mergeStyles({ color: '#f00', background: '#ddf', padding: '10px' });
const existingItem = mergeStyles({ color: '#222', padding: '10px' });
class TagPickerBasicExample extends React.Component<{}, {}> {
private picker = React.createRef<IBasePicker<ITag>>();
public render() {
return <TagPicker
onResolveSuggestions={this.onResolveSuggestions}
componentRef={this.picker}
onRenderSuggestionsItem={this.onRenderSuggestionsItem}
onItemSelected={this.onItemSelected}
/>;
}
private onRenderSuggestionsItem = (props: any, itemProps: any): JSX.Element => {
console.log({props, itemProps})
return <div className={props.isNewItem ? newItem : existingItem} key={props.key}>
{props.name}
</div>;
};
private onResolveSuggestions = (filterText: string, tagList: ITag[]): ITag[] => {
console.log({filterText, tagList});
const existingMatches = filterText
? _testTags
.filter(tag => tag.name.toLowerCase().indexOf(filterText.toLowerCase()) === 0)
.filter(tag => !this.listContainsDocument(tag, tagList))
: [];
return existingMatches.some(a=> a.key === filterText) ?
existingMatches :
[{ key: filterText, name: filterText, isNewItem: true } as ITag].concat(existingMatches);
};
private onItemSelected = (item: ITag): ITag | null => {
if(item && item.isNewItem) {
alert("New item added, make any necessary backend calls.");
}
return item;
};
private listContainsDocument(tag: ITag, tagList?: ITag[]) {
if (!tagList || !tagList.length || tagList.length === 0) {
return false;
}
return tagList.filter(compareTag => compareTag.key === tag.key).length > 0;
}
}
ReactDOM.render(
<Fabric>
<TagPickerBasicExample />
</Fabric>,
document.getElementById('content')
);
Надеюсь, это поможет - это действительно помогло мне.