UNPKG

office-ui-fabric-react

Version:

Reusable React components for building experiences for Office 365.

141 lines • 6.83 kB
import * as tslib_1 from "tslib"; /* tslint:disable */ import * as React from 'react'; /* tslint:enable */ import { assign } from 'office-ui-fabric-react/lib/Utilities'; import { SuggestionsStore } from '../../Suggestions/SuggestionsStore'; import { FloatingPeoplePicker } from 'office-ui-fabric-react/lib/FloatingPicker'; import { people, mru } from 'office-ui-fabric-react/lib/ExtendedPicker'; import { SearchBox } from 'office-ui-fabric-react/lib/SearchBox'; import './FloatingPeoplePicker.Basic.Example.scss'; var FloatingPeoplePickerTypesExample = /** @class */ (function (_super) { tslib_1.__extends(FloatingPeoplePickerTypesExample, _super); function FloatingPeoplePickerTypesExample(props) { var _this = _super.call(this, props) || this; _this._onFocus = function () { if (_this._picker) { _this._picker.showPicker(); } }; _this._setInputElementRef = function (ref) { if (ref && ref.getElementsByClassName('ms-SearchBox-field').length > 0) { _this._inputElement = ref.getElementsByClassName('ms-SearchBox-field')[0]; } }; _this._setComponentRef = function (component) { _this._picker = component; }; _this._onSearchChange = function (newValue) { if (newValue !== _this.state.searchValue) { _this.setState({ searchValue: newValue }); _this._picker.onQueryStringChanged(newValue); } }; _this._onPickerChange = function (selectedSuggestion) { _this.setState({ searchValue: selectedSuggestion.text ? selectedSuggestion.text : '' }); _this._picker.hidePicker(); }; _this._onRemoveSuggestion = function (item) { var _a = _this.state, peopleList = _a.peopleList, mruState = _a.mostRecentlyUsed; var indexPeopleList = peopleList.indexOf(item); var indexMostRecentlyUsed = mruState.indexOf(item); if (indexPeopleList >= 0) { var newPeople = peopleList .slice(0, indexPeopleList) .concat(peopleList.slice(indexPeopleList + 1)); _this.setState({ peopleList: newPeople }); } if (indexMostRecentlyUsed >= 0) { var newSuggestedPeople = mruState .slice(0, indexMostRecentlyUsed) .concat(mruState.slice(indexMostRecentlyUsed + 1)); _this.setState({ mostRecentlyUsed: newSuggestedPeople }); } }; _this._onFilterChanged = function (filterText, currentPersonas, limitResults) { if (filterText) { var filteredPersonas = _this._filterPersonasByText(filterText); filteredPersonas = _this._removeDuplicates(filteredPersonas, currentPersonas); filteredPersonas = limitResults ? filteredPersonas.splice(0, limitResults) : filteredPersonas; return filteredPersonas; } else { return []; } }; _this._validateInput = function (input) { if (input.indexOf('@') !== -1) { return true; } else if (input.length > 1) { return false; } else { return false; } }; var peopleList = []; people.forEach(function (persona) { var target = {}; assign(target, persona); peopleList.push(target); }); _this.state = { peopleList: peopleList, mostRecentlyUsed: mru, currentSelectedItems: [], searchValue: '' }; return _this; } FloatingPeoplePickerTypesExample.prototype.render = function () { return (React.createElement("div", null, React.createElement("div", { className: "ms-SearchBoxSmallExample", ref: this._setInputElementRef }, React.createElement(SearchBox, { placeholder: 'Search a person', onChange: this._onSearchChange, value: this.state.searchValue, onFocus: this._onFocus })), this._renderFloatingPicker())); }; FloatingPeoplePickerTypesExample.prototype._renderFloatingPicker = function () { var _this = this; var suggestionProps = { footerItemsProps: [ { renderItem: function () { return React.createElement("div", null, "Showing ", _this._picker.suggestions.length, " results"); }, shouldShow: function () { return _this._picker.suggestions.length > 0; } } ] }; return (React.createElement(FloatingPeoplePicker, { suggestionsStore: new SuggestionsStore(), onResolveSuggestions: this._onFilterChanged, getTextFromItem: this._getTextFromItem, pickerSuggestionsProps: suggestionProps, key: 'normal', onRemoveSuggestion: this._onRemoveSuggestion, onValidateInput: this._validateInput, componentRef: this._setComponentRef, onChange: this._onPickerChange, inputElement: this._inputElement, resolveDelay: 300 })); }; FloatingPeoplePickerTypesExample.prototype._getTextFromItem = function (persona) { return persona.text; }; FloatingPeoplePickerTypesExample.prototype._listContainsPersona = function (persona, personas) { if (!personas || !personas.length || personas.length === 0) { return false; } return personas.filter(function (item) { return item.text === persona.text; }).length > 0; }; FloatingPeoplePickerTypesExample.prototype._filterPersonasByText = function (filterText) { var _this = this; return this.state.peopleList.filter(function (item) { return _this._doesTextStartWith(item.text, filterText); }); }; FloatingPeoplePickerTypesExample.prototype._doesTextStartWith = function (text, filterText) { return text.toLowerCase().indexOf(filterText.toLowerCase()) === 0; }; FloatingPeoplePickerTypesExample.prototype._removeDuplicates = function (personas, possibleDupes) { var _this = this; return personas.filter(function (persona) { return !_this._listContainsPersona(persona, possibleDupes); }); }; return FloatingPeoplePickerTypesExample; }(React.Component)); export { FloatingPeoplePickerTypesExample }; //# sourceMappingURL=FloatingPeoplePicker.Basic.Example.js.map