UNPKG

10.7 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7
8var _react = _interopRequireDefault(require("react"));
9
10var _reactSelect = require("react-select");
11
12var _async = _interopRequireDefault(require("react-select/async"));
13
14var _cond = _interopRequireDefault(require("sharyn/util/cond"));
15
16var _core = require("@material-ui/core");
17
18var _styles = require("./styles");
19
20var _propTypes = _interopRequireDefault(require("prop-types"));
21
22function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
24function _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); }
25
26function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { if (i % 2) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } else { Object.defineProperties(target, Object.getOwnPropertyDescriptors(arguments[i])); } } return target; }
27
28function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
30function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
31
32function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
33
34var CustomMenu = function CustomMenu(_ref) {
35 var menuProps = _ref.menuProps,
36 creationAllowed = _ref.creationAllowed,
37 createOptionLabel = _ref.createOptionLabel;
38 // eslint-disable-next-line
39 var children = menuProps.children;
40 return _react["default"].createElement(_reactSelect.components.Menu, menuProps, children, creationAllowed && createOptionLabel);
41};
42
43CustomMenu.propTypes = {
44 menuProps: _propTypes["default"].object.isRequired,
45 creationAllowed: _propTypes["default"].bool,
46 createOptionLabel: _propTypes["default"].any
47};
48
49var MultiSelectJSX = function MultiSelectJSX(_ref2) {
50 var searchBy = _ref2.searchBy,
51 input = _ref2.input,
52 defaultOptions = _ref2.defaultOptions,
53 multiValues = _ref2.multiValues,
54 handleChange = _ref2.handleChange,
55 handleInputChange = _ref2.handleInputChange,
56 getData = _ref2.getData,
57 disabled = _ref2.disabled,
58 label = _ref2.label,
59 isLoading = _ref2.isLoading,
60 _noOptionsMessage = _ref2.noOptionsMessage,
61 loadingMessage = _ref2.loadingMessage,
62 cancelToken = _ref2.cancelToken,
63 _ref2$withDebounce = _ref2.withDebounce,
64 withDebounce = _ref2$withDebounce === void 0 ? true : _ref2$withDebounce,
65 _ref2$debounceInterva = _ref2.debounceInterval,
66 debounceInterval = _ref2$debounceInterva === void 0 ? 300 : _ref2$debounceInterva,
67 theme = _ref2.theme,
68 _ref2$creationAllowed = _ref2.creationAllowed,
69 creationAllowed = _ref2$creationAllowed === void 0 ? false : _ref2$creationAllowed,
70 createOptionLabel = _ref2.createOptionLabel,
71 customComponents = _ref2.components,
72 rest = _objectWithoutProperties(_ref2, ["searchBy", "input", "defaultOptions", "multiValues", "handleChange", "handleInputChange", "getData", "disabled", "label", "isLoading", "noOptionsMessage", "loadingMessage", "cancelToken", "withDebounce", "debounceInterval", "theme", "creationAllowed", "createOptionLabel", "components"]);
73
74 var customStyles = {
75 option: function option(provided, state) {
76 return _objectSpread({}, provided, {
77 color: theme.palette.secondary.dark,
78 background: state.isSelected ? 'rgba(0, 0, 0, 0.14)' : 'none',
79 height: 'auto',
80 padding: '11px 16px',
81 lineHeight: '1.5rem',
82 fontSize: '1.14rem',
83 fontWeight: 400,
84 opacity: state.isDisabled ? 0.5 : 1
85 });
86 },
87 control: function control(provided, state) {
88 return _objectSpread({}, provided, {
89 borderStyle: 'solid',
90 borderWidth: '2px',
91 borderRadius: 8,
92 borderColor: (0, _cond["default"])([[state.isDisabled, 'transparent'], [state.isFocused, theme.palette.secondary.dark]], theme.palette.secondary.light),
93 backgroundColor: state.isDisabled ? _styles.secondaryColorExtraLight : 'inherit',
94 boxShadow: 'none',
95 caretColor: theme.palette.primary.main,
96 color: theme.palette.secondary.dark,
97 '&:hover': {
98 borderColor: theme.palette.secondary.dark
99 }
100 });
101 },
102 input: function input() {
103 return {
104 padding: 'calc(1.33rem - 2px) calc(1rem - 8px)',
105 fontSize: '0.875rem',
106 lineHeight: '1.25',
107 fontWeight: 700,
108 '& *': {
109 fontSize: '0.875rem',
110 lineHeight: '1.25',
111 fontWeight: 700
112 }
113 };
114 },
115 placeholder: function placeholder() {
116 return {
117 padding: 'calc(1.33rem - 2px) calc(1rem - 8px)',
118 fontSize: '0.875rem',
119 lineHeight: '1.25',
120 fontWeight: 700,
121 color: theme.palette.secondary.main,
122 position: 'absolute'
123 };
124 },
125 singleValue: function singleValue(provided, state) {
126 return _objectSpread({}, provided, {
127 padding: '1.33rem 0 1.33rem calc(1rem - 8px)',
128 fontSize: '0.875rem',
129 lineHeight: '1.25',
130 fontWeight: 700,
131 color: state.isDisabled ? theme.palette.secondary.main : 'inherit'
132 });
133 },
134 multiValue: function multiValue(provided, state) {
135 return _objectSpread({}, provided, {
136 fontSize: '0.875rem',
137 lineHeight: '1.25',
138 fontWeight: 700,
139 color: state.isDisabled ? theme.palette.secondary.main : 'inherit'
140 });
141 },
142 multiValueRemove: function multiValueRemove(provided, state) {
143 return _objectSpread({}, provided, {
144 display: state.isDisabled ? 'none' : 'flex'
145 });
146 },
147 menuList: function menuList(provided) {
148 return _objectSpread({}, provided, {
149 background: 'white'
150 });
151 },
152 menu: function menu(provided) {
153 return _objectSpread({}, provided, {
154 zIndex: 3
155 });
156 } // let lastCallTime = null
157
158 };
159 var delayedCall = null; // Et le debounce est activé (true par défaut) ,
160 // on empêche l'émission de plus d'une requete toutes les 300ms (par défault, modifiable via debounceInterval)
161 // Si un cancel token est renseigné, on annule la requête précédemment émise par le multiSelect
162
163 var loadOptions = getData ? function (event) {
164 var options = new Promise(function (resolve) {
165 cancelToken && (cancelToken === null || cancelToken === void 0 ? void 0 : cancelToken.cancel) && cancelToken.cancel();
166
167 if (withDebounce) {
168 delayedCall && clearTimeout(delayedCall);
169 delayedCall = setTimeout(function () {
170 getData(event).then(function (data) {
171 return resolve(data);
172 });
173 }, debounceInterval);
174 } else {
175 getData(event).then(function (data) {
176 return resolve(data);
177 });
178 }
179 });
180 return options;
181 } : null;
182 return _react["default"].createElement(_react["default"].Fragment, null, label && _react["default"].createElement("div", {
183 style: {
184 position: 'relative'
185 }
186 }, _react["default"].createElement("span", {
187 style: {
188 zIndex: 2,
189 position: 'absolute',
190 padding: '0 0.25rem',
191 fontSize: '0.875rem',
192 fontWeight: 700,
193 lineHeight: 1,
194 background: disabled ? 'none' : '#FFFFFF',
195 color: theme.palette.secondary.dark,
196 transform: 'translate(0.9rem, -0.5rem)'
197 }
198 }, label)), _react["default"].createElement(_async["default"], _extends({
199 key: searchBy,
200 isDisabled: disabled,
201 defaultValue: input
202 }, {
203 defaultOptions: defaultOptions,
204 loadingMessage: loadingMessage,
205 loadOptions: loadOptions
206 }, {
207 onChange: handleChange,
208 cacheOptions: false,
209 isMulti: multiValues,
210 onInputChange: handleInputChange,
211 styles: customStyles,
212 noOptionsMessage: function noOptionsMessage() {
213 return isLoading ? loadingMessage && loadingMessage() : _noOptionsMessage && _noOptionsMessage();
214 },
215 components: _objectSpread({}, customComponents, {
216 Menu: function Menu(menuProps) {
217 return _react["default"].createElement(CustomMenu, {
218 menuProps: menuProps,
219 creationAllowed: creationAllowed,
220 createOptionLabel: createOptionLabel
221 });
222 }
223 })
224 }, rest)));
225};
226
227MultiSelectJSX.propTypes = {
228 searchBy: _propTypes["default"].string,
229 input: _propTypes["default"].arrayOf(_propTypes["default"].object.isRequired),
230 defaultOptions: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].arrayOf(_propTypes["default"].object.isRequired)]).isRequired,
231 multiValues: _propTypes["default"].bool,
232 handleChange: _propTypes["default"].func,
233 handleInputChange: _propTypes["default"].func,
234 getData: _propTypes["default"].func,
235 disabled: _propTypes["default"].bool,
236 label: _propTypes["default"].string,
237 isLoading: _propTypes["default"].bool,
238 noOptionsMessage: _propTypes["default"].func,
239 loadingMessage: _propTypes["default"].func,
240 cancelToken: _propTypes["default"].any,
241 withDebounce: _propTypes["default"].bool,
242 debounceInterval: _propTypes["default"].number,
243 theme: _propTypes["default"].object.isRequired,
244 creationAllowed: _propTypes["default"].bool,
245 createOptionLabel: _propTypes["default"].any,
246 components: _propTypes["default"].object
247};
248
249var _default = (0, _core.withTheme)()(MultiSelectJSX);
250
251exports["default"] = _default;
\No newline at end of file