UNPKG

8.92 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7
8var _react = _interopRequireWildcard(require("react"));
9
10var _CircularProgress = _interopRequireDefault(require("@material-ui/core/CircularProgress"));
11
12var _ClickAwayListener = _interopRequireDefault(require("@material-ui/core/ClickAwayListener"));
13
14var _Chip = _interopRequireDefault(require("@material-ui/core/Chip"));
15
16var _Fade = _interopRequireDefault(require("@material-ui/core/Fade"));
17
18var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
19
20var _Paper = _interopRequireDefault(require("@material-ui/core/Paper"));
21
22var _Popper = _interopRequireDefault(require("@material-ui/core/Popper"));
23
24var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
25
26var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
27
28var _withStyles = _interopRequireDefault(require("@material-ui/core/styles/withStyles"));
29
30var _compose = _interopRequireDefault(require("recompose/compose"));
31
32var _i18n = require("../i18n");
33
34var _propTypes = _interopRequireDefault(require("prop-types"));
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
37
38function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } }
39
40function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
41
42function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
43
44function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
45
46function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
47
48function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
49
50var translations = {
51 'no suggestions': {
52 fr: 'Pas de suggestions',
53 en: 'No suggestions',
54 es: 'No hay sugerencias'
55 }
56};
57var language = (0, _i18n.getLanguage)();
58
59var AsyncSelectJSX = function AsyncSelectJSX(props) {
60 var css = props.classes,
61 _props$chipsColor = props.chipsColor,
62 chipsColor = _props$chipsColor === void 0 ? 'default' : _props$chipsColor,
63 _props$chipsVariant = props.chipsVariant,
64 chipsVariant = _props$chipsVariant === void 0 ? 'default' : _props$chipsVariant,
65 _props$inputMargin = props.inputMargin,
66 inputMargin = _props$inputMargin === void 0 ? 'none' : _props$inputMargin,
67 _props$inputVariant = props.inputVariant,
68 inputVariant = _props$inputVariant === void 0 ? 'standard' : _props$inputVariant,
69 isLoading = props.isLoading,
70 label = props.label,
71 _onDelete = props.onDelete,
72 onSelect = props.onSelect,
73 onSearch = props.onSearch,
74 suggestions = props.suggestions,
75 selected = props.selected;
76
77 var _useState = (0, _react.useState)(null),
78 _useState2 = _slicedToArray(_useState, 2),
79 inputRef = _useState2[0],
80 setInputRef = _useState2[1];
81
82 var _useState3 = (0, _react.useState)(''),
83 _useState4 = _slicedToArray(_useState3, 2),
84 inputValue = _useState4[0],
85 setInputValue = _useState4[1];
86
87 var _useState5 = (0, _react.useState)(false),
88 _useState6 = _slicedToArray(_useState5, 2),
89 isOpen = _useState6[0],
90 setIsOpen = _useState6[1];
91
92 var _useState7 = (0, _react.useState)(null),
93 _useState8 = _slicedToArray(_useState7, 2),
94 popperAnchor = _useState8[0],
95 setPopperAnchor = _useState8[1];
96
97 return _react["default"].createElement("div", {
98 className: css.container
99 }, _react["default"].createElement(_TextField["default"], {
100 variant: inputVariant,
101 margin: inputMargin,
102 label: label,
103 value: inputValue,
104 onChange: function onChange(e) {
105 setInputValue(e.target.value);
106 setIsOpen(e.target.value.length > 2);
107 onSearch(e);
108 },
109 fullWidth: true,
110 inputRef: function inputRef(node) {
111 setInputRef(node);
112 setPopperAnchor(node && node.parentElement);
113 },
114 onKeyDown: function onKeyDown(e) {
115 if (selected.length && !inputValue.length && e.key === 'Backspace') {
116 _onDelete(selected[selected.length - 1]);
117 }
118 },
119 InputProps: {
120 classes: {
121 root: css.inputRoot,
122 input: css.inputInput
123 },
124 startAdornment: selected.map(function (s) {
125 return _react["default"].createElement(_Chip["default"], {
126 color: chipsColor,
127 variant: chipsVariant,
128 key: s.value,
129 label: s.label,
130 onDelete: function onDelete() {
131 return _onDelete(s);
132 },
133 className: css.chip
134 });
135 })
136 }
137 }), _react["default"].createElement(_Popper["default"], {
138 anchorEl: popperAnchor,
139 open: isOpen,
140 transition: true
141 }, function (_ref) {
142 var TransitionProps = _ref.TransitionProps;
143 return _react["default"].createElement(_Fade["default"], _extends({}, TransitionProps, {
144 timeout: 200
145 }), _react["default"].createElement(_Paper["default"], {
146 square: true,
147 style: {
148 width: popperAnchor ? popperAnchor.clientWidth : null
149 }
150 }, isLoading ? _react["default"].createElement("div", {
151 className: css.loading
152 }, _react["default"].createElement(_CircularProgress["default"], {
153 thickness: 4,
154 size: 60
155 })) : _react["default"].createElement(_ClickAwayListener["default"], {
156 onClickAway: function onClickAway() {
157 setIsOpen(false);
158 }
159 }, suggestions.length > 0 ? _react["default"].createElement("div", null, suggestions.map(function (r) {
160 return _react["default"].createElement(_MenuItem["default"], {
161 key: r.value,
162 value: r.value,
163 onClick: function onClick(e) {
164 setInputValue('');
165 setIsOpen(false);
166 onSelect(e, r);
167 inputRef && inputRef.focus();
168 },
169 className: css.suggestion
170 }, r.label);
171 })) : _react["default"].createElement("div", {
172 className: css.loading
173 }, _react["default"].createElement(_Typography["default"], {
174 variant: "h6"
175 }, (0, _i18n.getTranslation)(translations, language, 'no suggestions'))))));
176 }));
177};
178
179AsyncSelectJSX.propTypes = {
180 classes: _propTypes["default"].object.isRequired,
181 chipsColor: _propTypes["default"].oneOf(["default", "primary", "secondary"]),
182 chipsVariant: _propTypes["default"].oneOf(["default", "outlined"]),
183 inputMargin: _propTypes["default"].oneOf(["none", "dense", "normal"]),
184 inputVariant: _propTypes["default"].oneOf(["standard", "outlined", "filled"]),
185 isLoading: _propTypes["default"].bool,
186 label: _propTypes["default"].string.isRequired,
187 onDelete: _propTypes["default"].func.isRequired,
188 onSelect: _propTypes["default"].func.isRequired,
189 onSearch: _propTypes["default"].func.isRequired,
190 suggestions: _propTypes["default"].arrayOf(_propTypes["default"].object.isRequired).isRequired,
191 selected: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].object.isRequired), _propTypes["default"].object]).isRequired
192};
193var AsyncSelectCmp = (0, _withStyles["default"])(function (theme) {
194 return {
195 chip: {
196 margin: theme.spacing.unit / 4,
197 '&:last-of-type': {
198 marginRight: theme.spacing.unit
199 }
200 },
201 chipsContainer: {
202 marginRight: theme.spacing.unit
203 },
204 container: {
205 flexGrow: 1,
206 position: 'relative'
207 },
208 inputInput: {
209 width: 'auto',
210 flexGrow: 1
211 },
212 inputRoot: {
213 flexGrow: 1,
214 flexWrap: 'wrap'
215 },
216 loading: {
217 display: 'flex',
218 justifyContent: 'center',
219 alignItems: 'center',
220 height: 120
221 },
222 suggestion: {
223 borderBottom: '1px solid lightgrey',
224 '&:hover': {
225 backgroundColor: '#00000024'
226 }
227 }
228 };
229})(AsyncSelectJSX);
230var AsyncSelect = (0, _compose["default"])()(AsyncSelectCmp);
231var _default = AsyncSelect;
232exports["default"] = _default;
\No newline at end of file