1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports["default"] = void 0;
|
7 |
|
8 | var _react = _interopRequireWildcard(require("react"));
|
9 |
|
10 | var _CircularProgress = _interopRequireDefault(require("@material-ui/core/CircularProgress"));
|
11 |
|
12 | var _ClickAwayListener = _interopRequireDefault(require("@material-ui/core/ClickAwayListener"));
|
13 |
|
14 | var _Chip = _interopRequireDefault(require("@material-ui/core/Chip"));
|
15 |
|
16 | var _Fade = _interopRequireDefault(require("@material-ui/core/Fade"));
|
17 |
|
18 | var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
|
19 |
|
20 | var _Paper = _interopRequireDefault(require("@material-ui/core/Paper"));
|
21 |
|
22 | var _Popper = _interopRequireDefault(require("@material-ui/core/Popper"));
|
23 |
|
24 | var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
|
25 |
|
26 | var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
27 |
|
28 | var _withStyles = _interopRequireDefault(require("@material-ui/core/styles/withStyles"));
|
29 |
|
30 | var _compose = _interopRequireDefault(require("recompose/compose"));
|
31 |
|
32 | var _i18n = require("../i18n");
|
33 |
|
34 | var _propTypes = _interopRequireDefault(require("prop-types"));
|
35 |
|
36 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
37 |
|
38 | function _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 |
|
40 | function _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 |
|
42 | function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
|
43 |
|
44 | function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
|
45 |
|
46 | function _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 |
|
48 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
49 |
|
50 | var translations = {
|
51 | 'no suggestions': {
|
52 | fr: 'Pas de suggestions',
|
53 | en: 'No suggestions',
|
54 | es: 'No hay sugerencias'
|
55 | }
|
56 | };
|
57 | var language = (0, _i18n.getLanguage)();
|
58 |
|
59 | var 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 |
|
179 | AsyncSelectJSX.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 | };
|
193 | var 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);
|
230 | var AsyncSelect = (0, _compose["default"])()(AsyncSelectCmp);
|
231 | var _default = AsyncSelect;
|
232 | exports["default"] = _default; |
\ | No newline at end of file |