@kineticdata/react
Version:
A React library for the Kinetic Platform
113 lines (111 loc) • 4.86 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TeamSelect = 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 fields = {
name: 'Full Name',
localName: 'Local Name'
};
var searchTeams = function searchTeams(_ref) {
var _ref$search = _ref.search,
search = _ref$search === void 0 ? (0, _immutable.Map)() : _ref$search;
return function (field, value, callback) {
return (0, _apis.fetchTeams)({
q: Object.keys(fields).filter(function (searchField) {
return !field || searchField === field;
}).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 teams = _ref2.teams,
error = _ref2.error,
nextPageToken = _ref2.nextPageToken;
return {
suggestions: teams || [],
error: error,
nextPageToken: nextPageToken
};
}).then(callback);
};
};
var teamToValue = function teamToValue(team) {
return team && team.get('name') || '';
};
// Converts a typed in value to an option object. Used when adding custom values
// when allowNew is true.
var valueToCustomTeam = function valueToCustomTeam(_ref3) {
var allowNew = _ref3.allowNew;
return function (value) {
return value.length > 0 ? typeof allowNew !== 'function' || allowNew(value) ? {
name: 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 team.' : _ref4$messages2$short,
_ref4$messages2$empty = _ref4$messages2.empty,
empty = _ref4$messages2$empty === void 0 ? 'No matching teams.' : _ref4$messages2$empty,
_ref4$messages2$custo = _ref4$messages2.custom,
custom = _ref4$messages2$custo === void 0 ? 'No matching teams. Type to enter a custom option.' : _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 teams, first ".concat(search.get('limit') || 25, " 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 teams.' : _ref4$messages2$error;
return function (props) {
return {
meta: props.searchField ? "Find Teams 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 teams 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 TeamSelect = exports.TeamSelect = function TeamSelect(props) {
return /*#__PURE__*/_react["default"].createElement(_Typeahead.Typeahead, {
components: props.components || {},
disabled: props.disabled,
multiple: props.multiple,
custom: props.allowNew && valueToCustomTeam(props),
search: searchTeams(props),
minSearchLength: props.minSearchLength,
getSuggestionValue: teamToValue,
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
});
};