office-ui-fabric-react
Version:
Reusable React components for building experiences for Office 365.
97 lines • 4.81 kB
JavaScript
import * as tslib_1 from "tslib";
import * as React from 'react';
import { FloatingPeoplePicker, SuggestionsStore } from 'office-ui-fabric-react/lib/FloatingPicker';
import { SearchBox } from 'office-ui-fabric-react/lib/SearchBox';
import { people } from '@uifabric/example-data';
var FloatingPeoplePickerTypesExample = /** @class */ (function (_super) {
tslib_1.__extends(FloatingPeoplePickerTypesExample, _super);
function FloatingPeoplePickerTypesExample(props) {
var _this = _super.call(this, props) || this;
_this._picker = React.createRef();
_this._onFocus = function () {
if (_this._picker.current) {
_this._picker.current.showPicker();
}
};
_this._setInputElementRef = function (ref) {
var inputElements = ref && ref.getElementsByClassName('ms-SearchBox-field');
if (inputElements && inputElements.length > 0) {
_this._inputElement = inputElements[0];
}
};
_this._onSearchChange = function (ev, newValue) {
if (newValue !== _this.state.searchValue && _this._picker.current) {
_this.setState({ searchValue: newValue });
_this._picker.current.onQueryStringChanged(newValue);
}
};
_this._onPickerChange = function (selectedSuggestion) {
_this.setState({ searchValue: selectedSuggestion.text || '' });
if (_this._picker.current) {
_this._picker.current.hidePicker();
}
};
_this._onRemoveSuggestion = function (item) {
var peopleList = _this.state.peopleList;
var itemIndex = peopleList.indexOf(item);
if (itemIndex >= 0) {
_this.setState({
peopleList: peopleList.slice(0, itemIndex).concat(peopleList.slice(itemIndex + 1))
});
}
};
_this._onFilterChanged = function (filterText, currentPersonas) {
if (filterText) {
// Filter by items starting with the current filter text, then remove duplicates
return _this.state.peopleList
.filter(function (item) { return _startsWith(item.text || '', filterText); })
.filter(function (persona) { return !_this._listContainsPersona(persona, currentPersonas); });
}
return [];
};
_this._getTextFromItem = function (persona) {
return persona.text || '';
};
_this._validateInput = function (input) {
return input.indexOf('@') !== -1;
};
_this.state = {
peopleList: people,
searchValue: ''
};
return _this;
}
FloatingPeoplePickerTypesExample.prototype.render = function () {
var _this = this;
var suggestionProps = {
footerItemsProps: [
{
renderItem: function () {
var picker = _this._picker.current;
return React.createElement("div", null,
"Showing ",
picker ? picker.suggestions.length : 0,
" results");
},
shouldShow: function () {
var picker = _this._picker.current;
return !!picker && picker.suggestions.length > 0;
}
}
]
};
return (React.createElement("div", null,
React.createElement("div", { style: { width: 208 }, ref: this._setInputElementRef },
React.createElement(SearchBox, { placeholder: "Search for person", onChange: this._onSearchChange, value: this.state.searchValue, onFocus: this._onFocus })),
React.createElement(FloatingPeoplePicker, { suggestionsStore: new SuggestionsStore(), onResolveSuggestions: this._onFilterChanged, getTextFromItem: this._getTextFromItem, pickerSuggestionsProps: suggestionProps, key: "normal", onRemoveSuggestion: this._onRemoveSuggestion, onValidateInput: this._validateInput, componentRef: this._picker, onChange: this._onPickerChange, inputElement: this._inputElement, resolveDelay: 300 })));
};
FloatingPeoplePickerTypesExample.prototype._listContainsPersona = function (persona, personas) {
return !!personas && personas.some(function (item) { return item.text === persona.text; });
};
return FloatingPeoplePickerTypesExample;
}(React.Component));
export { FloatingPeoplePickerTypesExample };
function _startsWith(text, filterText) {
return text.toLowerCase().indexOf(filterText.toLowerCase()) === 0;
}
//# sourceMappingURL=FloatingPeoplePicker.Basic.Example.js.map