UNPKG

@kineticdata/react

Version:
118 lines (116 loc) 5.09 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserSelect = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray")); var _react = _interopRequireDefault(require("react")); var _Typeahead = require("./Typeahead"); var _apis = require("../../apis"); var _immutable = require("immutable"); var emailPattern = /^.+@.+\..+$/; var validateCustomOption = function validateCustomOption(value) { return value.match(emailPattern); }; var fields = { username: 'Username', displayName: 'Display Name', email: 'Email' }; var searchUsers = function searchUsers(_ref) { var _ref$search = _ref.search, search = _ref$search === void 0 ? (0, _immutable.Map)() : _ref$search; return function (searchField, value, callback) { return (0, _apis.fetchUsers)({ q: Object.keys(fields).filter(function (field) { return !searchField || field === searchField; }).map(function (field) { return "".concat(field, " =* \"").concat(value, "\""); }).join(' OR '), limit: search.get('limit') || 25, include: search.get('include') || '', "public": !!search.get('public') }).then(function (_ref2) { var users = _ref2.users, error = _ref2.error, nextPageToken = _ref2.nextPageToken; return { suggestions: users || [], error: error, nextPageToken: nextPageToken }; }).then(callback); }; }; var userToValue = function userToValue(user) { return user && (user.get('username') || user.get('email') || '') || ''; }; // Converts a typed in value to an option object. Used when adding custom values // when allowNew is true. var valueToCustomUser = function valueToCustomUser(_ref3) { var allowNew = _ref3.allowNew; return function (value) { return value.length > 0 ? typeof allowNew === 'function' && allowNew(value) || validateCustomOption(value) ? { email: value } : null : null; }; }; var getStatusProps = function getStatusProps(_ref4) { var _ref4$search = _ref4.search, search = _ref4$search === void 0 ? (0, _immutable.Map)() : _ref4$search, _ref4$messages = _ref4.messages, _ref4$messages2 = _ref4$messages === void 0 ? {} : _ref4$messages, _ref4$messages2$short = _ref4$messages2["short"], _short = _ref4$messages2$short === void 0 ? 'Type to find a user.' : _ref4$messages2$short, _ref4$messages2$empty = _ref4$messages2.empty, empty = _ref4$messages2$empty === void 0 ? 'No matching users.' : _ref4$messages2$empty, _ref4$messages2$custo = _ref4$messages2.custom, custom = _ref4$messages2$custo === void 0 ? 'No matching users. You may also enter a valid email.' : _ref4$messages2$custo, _ref4$messages2$pendi = _ref4$messages2.pending, pending = _ref4$messages2$pendi === void 0 ? 'Searching...' : _ref4$messages2$pendi, _ref4$messages2$more = _ref4$messages2.more, more = _ref4$messages2$more === void 0 ? "Too many users, first ".concat(search.get('limit') || '', " shown. Please refine your search.") : _ref4$messages2$more, _ref4$messages2$error = _ref4$messages2.error, error = _ref4$messages2$error === void 0 ? 'There was an error fetching users.' : _ref4$messages2$error; return function (props) { return { meta: props.searchField ? "Find Users by ".concat(fields[props.searchField]) : null, info: props["short"] ? _short : props.pending ? pending : null, warning: props.error || props.more || props.empty ? props.error && props.error.key === 'too_many_matches' ? 'Too many users to display. Please refine your search below.' : props.more ? more : props.empty && !props.custom ? empty : props.empty && props.custom ? custom : error : null, clearFilterField: props.searchField ? props.setSearchField(null) : null, filterFieldOptions: props.error && props.error.key === 'too_many_matches' ? Object.entries(props.error.errorData.matches).map(function (_ref5) { var _ref6 = (0, _slicedToArray2["default"])(_ref5, 2), field = _ref6[0], count = _ref6[1]; return { field: field, count: count, label: fields[field], value: props.value, onClick: props.setSearchField(field) }; }) : null }; }; }; var UserSelect = exports.UserSelect = function UserSelect(props) { return /*#__PURE__*/_react["default"].createElement(_Typeahead.Typeahead, { components: props.components || {}, disabled: props.disabled, multiple: props.multiple, custom: props.allowNew && valueToCustomUser(props), search: searchUsers(props), minSearchLength: props.minSearchLength, getSuggestionValue: userToValue, getStatusProps: getStatusProps(props), value: props.value, onChange: props.onChange, onFocus: props.onFocus, onBlur: props.onBlur, placeholder: props.placeholder, id: props.id, form: props.form, invalid: props.invalid }); };