import * as React from 'react'; import { DefaultButton, IButtonStyles } from '@fluentui/react/lib/Button'; import { Checkbox } from '@fluentui/react/lib/Checkbox'; import { IPersonaProps, Persona } from '@fluentui/react/lib/Persona'; import { IBasePickerSuggestionsProps, NormalPeoplePicker } from '@fluentui/react/lib/Pickers'; import { people } from '@fluentui/example-data'; const suggestionProps: IBasePickerSuggestionsProps = { suggestionsHeaderText: 'Suggested People', mostRecentlyUsedHeaderText: 'Suggested Contacts', noResultsFoundText: 'No results found', loadingText: 'Loading', showRemoveButtons: true, suggestionsAvailableAlertText: 'People Picker Suggestions available', suggestionsContainerAriaLabel: 'Suggested contacts', }; const checkboxStyles = { root: { marginTop: 10, }, }; const defaultButtonStyles: Partial = { root: { height: 'auto' } }; export const PeoplePickerControlledExample: React.FunctionComponent = () => { const [currentSelectedItems, setCurrentSelectedItems] = React.useState([]); const [delayResults, setDelayResults] = React.useState(false); const [isPickerDisabled, setIsPickerDisabled] = React.useState(false); const [peopleList] = React.useState(people); const picker = React.useRef(null); const onFilterChanged = ( filterText: string, currentPersonas: IPersonaProps[], limitResults?: number, ): IPersonaProps[] | Promise => { if (filterText) { let filteredPersonas: IPersonaProps[] = filterPersonasByText(filterText); filteredPersonas = removeDuplicates(filteredPersonas, currentPersonas); filteredPersonas = limitResults ? filteredPersonas.slice(0, limitResults) : filteredPersonas; return filterPromise(filteredPersonas); } else { return []; } }; const filterPersonasByText = (filterText: string): IPersonaProps[] => { return peopleList.filter(item => doesTextStartWith(item.text as string, filterText)); }; const filterPromise = (personasToReturn: IPersonaProps[]): IPersonaProps[] | Promise => { if (delayResults) { return convertResultsToPromise(personasToReturn); } else { return personasToReturn; } }; const onItemsChange = (items: any[]): void => { setCurrentSelectedItems(items); }; const controlledItems = []; for (let i = 0; i < 5; i++) { const item = peopleList[i]; if (currentSelectedItems!.indexOf(item) === -1) { controlledItems.push(peopleList[i]); } } const onDisabledButtonClick = (): void => { setIsPickerDisabled(!isPickerDisabled); }; const onToggleDelayResultsChange = (): void => { setDelayResults(!delayResults); }; return (
) => console.log('onBlur called'), onFocus: (ev: React.FocusEvent) => console.log('onFocus called'), 'aria-label': 'Contacts', }} componentRef={picker} resolveDelay={300} disabled={isPickerDisabled} /> {controlledItems.map((item, index) => (
setCurrentSelectedItems(currentSelectedItems.concat([item]))} >
))}
); }; function doesTextStartWith(text: string, filterText: string): boolean { return text.toLowerCase().indexOf(filterText.toLowerCase()) === 0; } function removeDuplicates(personas: IPersonaProps[], possibleDupes: IPersonaProps[]) { return personas.filter(persona => !listContainsPersona(persona, possibleDupes)); } function listContainsPersona(persona: IPersonaProps, personas: IPersonaProps[]) { if (!personas || !personas.length || personas.length === 0) { return false; } return personas.filter(item => item.text === persona.text).length > 0; } function convertResultsToPromise(results: IPersonaProps[]): Promise { return new Promise((resolve, reject) => setTimeout(() => resolve(results), 2000)); } function getTextFromItem(persona: IPersonaProps): string { return persona.text as string; }