@hipay/hipay-material-ui 2.0.0-beta.60 → 2.0.0-beta.62

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/HiDatePicker/HiDatePicker.js +37 -12
  3. package/HiDatePicker/HiDateRangePicker.js +71 -57
  4. package/HiDatePicker/HiDateRangeSelector.js +34 -20
  5. package/HiDatePicker/stylesheet.js +32 -17
  6. package/HiSelect/HiSelect.js +489 -607
  7. package/HiSelect/index.js +41 -3
  8. package/HiSelectableList/HiSelectableList.js +68 -3
  9. package/HiSelectableList/HiSelectableListItem.js +22 -10
  10. package/README.md +15 -0
  11. package/es/HiDatePicker/HiDatePicker.js +30 -10
  12. package/es/HiDatePicker/HiDateRangePicker.js +38 -21
  13. package/es/HiDatePicker/HiDateRangeSelector.js +24 -13
  14. package/es/HiDatePicker/stylesheet.js +32 -17
  15. package/es/{HiSelectNew → HiSelect}/HiNestedSelect.js +1 -1
  16. package/es/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +1 -1
  17. package/es/HiSelect/HiSelect.js +441 -564
  18. package/es/{HiSelectNew → HiSelect}/HiSelectContent.js +1 -1
  19. package/es/HiSelect/index.js +4 -1
  20. package/es/HiSelectableList/HiSelectableList.js +65 -4
  21. package/es/HiSelectableList/HiSelectableListItem.js +18 -10
  22. package/es/styles/createPalette.js +1 -1
  23. package/es/utils/helpers.js +9 -1
  24. package/index.es.js +1 -1
  25. package/index.js +1 -1
  26. package/package.json +1 -1
  27. package/styles/createPalette.js +1 -1
  28. package/umd/hipay-material-ui.development.js +7860 -7749
  29. package/umd/hipay-material-ui.production.min.js +2 -2
  30. package/utils/helpers.js +9 -1
  31. package/HiSelect/SelectInput.js +0 -369
  32. package/HiSelectNew/HiSelect.js +0 -929
  33. package/HiSelectNew/HiSelectField.js +0 -146
  34. package/HiSelectNew/index.js +0 -69
  35. package/es/HiSelect/SelectInput.js +0 -321
  36. package/es/HiSelectNew/HiSelect.js +0 -852
  37. package/es/HiSelectNew/HiSelectField.js +0 -111
  38. package/es/HiSelectNew/index.js +0 -6
  39. /package/{HiSelectNew → HiSelect}/HiDynamicSelect.js +0 -0
  40. /package/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  41. /package/{HiSelectNew → HiSelect}/HiNestedSelect.js +0 -0
  42. /package/{HiSelectNew → HiSelect}/HiNestedSelectContent.js +0 -0
  43. /package/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  44. /package/{HiSelectNew → HiSelect}/HiSelectContent.js +0 -0
  45. /package/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
  46. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelect.js +0 -0
  47. /package/es/{HiSelectNew → HiSelect}/HiDynamicSelectField.js +0 -0
  48. /package/es/{HiSelectNew → HiSelect}/HiNestedSelectField.js +0 -0
  49. /package/es/{HiSelectNew → HiSelect}/HiSelectInput.js +0 -0
@@ -1,929 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = exports.styles = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
-
14
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
22
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
-
24
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
25
-
26
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
27
-
28
- var _react = _interopRequireDefault(require("react"));
29
-
30
- var _propTypes = _interopRequireDefault(require("prop-types"));
31
-
32
- var _reactCustomScrollbars = _interopRequireDefault(require("react-custom-scrollbars"));
33
-
34
- var _Grow = _interopRequireDefault(require("@material-ui/core/Grow"));
35
-
36
- var _Paper = _interopRequireDefault(require("@material-ui/core/Paper"));
37
-
38
- var _Popper = _interopRequireDefault(require("@material-ui/core/Popper"));
39
-
40
- var _ClickAwayListener = _interopRequireDefault(require("@material-ui/core/ClickAwayListener"));
41
-
42
- var _HiSelectableList = _interopRequireDefault(require("../HiSelectableList"));
43
-
44
- var _HiInput = _interopRequireDefault(require("../HiForm/HiInput"));
45
-
46
- var _HiSelectInput = _interopRequireDefault(require("./HiSelectInput"));
47
-
48
- var _withStyles = _interopRequireDefault(require("../styles/withStyles"));
49
-
50
- var _helpers = require("../utils/helpers");
51
-
52
- var _HiIcon = _interopRequireDefault(require("../HiIcon"));
53
-
54
- var _keycode = _interopRequireDefault(require("keycode"));
55
-
56
- var _classnames = _interopRequireDefault(require("classnames"));
57
-
58
- var styles = function styles(theme) {
59
- return {
60
- root: {
61
- backgroundColor: theme.palette.background2,
62
- maxWidth: 500,
63
- width: '100%',
64
- position: 'relative'
65
- },
66
- popper: {
67
- zIndex: 1200
68
- },
69
- popperWidth: {
70
- width: '100% !important'
71
- },
72
- popperRightAlign: {
73
- right: 0,
74
- left: 'unset!important'
75
- },
76
- paper: {
77
- borderRadius: '0px 2px',
78
- maxHeight: 480,
79
- transition: 'none !important'
80
- },
81
- labelIcon: {
82
- marginRight: 10
83
- },
84
- labelImg: {
85
- height: 18,
86
- width: 'auto',
87
- margin: '0 4px',
88
- verticalAlign: 'middle'
89
- },
90
- selectIconLabel: (0, _extends2.default)({
91
- whiteSpace: 'nowrap',
92
- overflow: 'hidden',
93
- textOverflow: 'ellipsis',
94
- paddingRight: 16
95
- }, theme.typography.b1, {
96
- display: 'inline-flex',
97
- width: '100%'
98
- }),
99
- selectImgLabel: (0, _extends2.default)({
100
- whiteSpace: 'nowrap',
101
- overflow: 'hidden',
102
- textOverflow: 'ellipsis',
103
- paddingRight: 16
104
- }, theme.typography.b1, {
105
- display: 'inline-flex',
106
- width: '100%'
107
- }),
108
- separator: {
109
- borderTop: "1px solid ".concat(theme.palette.input.bottomLine)
110
- }
111
- };
112
- };
113
-
114
- exports.styles = styles;
115
-
116
- function filterValue(item, search) {
117
- return search === '' || (0, _helpers.foldAccents)(item.label.toString().toLowerCase()).search((0, _helpers.foldAccents)(search.toLowerCase())) !== -1;
118
- }
119
- /**
120
- *
121
- * Utilisé pour tous types de selects dans les formulaires.
122
- * - single / multiple ( multi-select )
123
- * - avec / sans checkboxes
124
- * - avec / sans barre de recherche
125
- * - avec / sans option "All"
126
- * - prise en compte du type des éléments (text, image, icon, ...)
127
- *
128
- * Ce composant réuni les sous-composants
129
- * - HiSelectInput : affiche l'élément dans le formulaire
130
- * - HiSearchField : intègre une barre de recherche dans le Popper, il filtre la liste des suggestions
131
- * - HiSelectableList : affiche la liste des suggestions selon le type des éléments
132
- */
133
-
134
-
135
- var HiSelect =
136
- /*#__PURE__*/
137
- function (_React$PureComponent) {
138
- (0, _inherits2.default)(HiSelect, _React$PureComponent);
139
-
140
- function HiSelect(props) {
141
- var _this;
142
-
143
- (0, _classCallCheck2.default)(this, HiSelect);
144
- _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(HiSelect).call(this, props));
145
-
146
- _this.buildSelectProps = function (options) {
147
- var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
148
- var search = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
149
- var loading = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
150
- // build item list
151
- var itemList = [].concat((0, _toConsumableArray2.default)(loading ? [{
152
- id: '_loading',
153
- type: 'loader',
154
- disabled: true,
155
- centered: true,
156
- hideCheckbox: true,
157
- label: 'loading'
158
- }] : []), (0, _toConsumableArray2.default)(search !== '' ? (0, _toConsumableArray2.default)(options.filter(function (item) {
159
- return _this.props.filterFunc(item, search);
160
- })) : [].concat((0, _toConsumableArray2.default)(_this.props.hasAll ? [(0, _extends2.default)({
161
- id: '_all',
162
- label: _this.props.translations.all
163
- }, _this.props.iconAll && {
164
- type: 'icon',
165
- icon: _this.props.iconAll
166
- })] : []), (0, _toConsumableArray2.default)(options))));
167
- return {
168
- itemList: itemList,
169
- inputValue: _this.buildInputValue(options, value, loading)
170
- };
171
- };
172
-
173
- _this.buildInputValue = function (options) {
174
- var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
175
- var loading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
176
- var _this$props = _this.props,
177
- classes = _this$props.classes,
178
- hasAll = _this$props.hasAll,
179
- translations = _this$props.translations,
180
- type = _this$props.type; // build input value
181
-
182
- var inputValue;
183
-
184
- if (loading && value.length === 1) {
185
- inputValue = translations.one_item_selected;
186
- } else if (hasAll && options.length === value.length) {
187
- inputValue = translations.all;
188
- value.unshift('_all');
189
- } else if (value.length > 1) {
190
- inputValue = translations.n_items_selected.replace('%s', value.length);
191
- } else if (value.length === 1) {
192
- var item = options.find(function (o) {
193
- return o.id === value[0];
194
- });
195
-
196
- if (item === undefined) {
197
- inputValue = translations.one_item_selected;
198
- } else if (type === 'icon' || item.type === 'icon') {
199
- inputValue = _react.default.createElement("span", {
200
- className: classes.selectIconLabel
201
- }, _react.default.createElement(_HiIcon.default, {
202
- className: classes.labelIcon,
203
- icon: item.icon
204
- }), item.label);
205
- } else if (type === 'image' || item.type === 'image') {
206
- inputValue = _react.default.createElement("span", {
207
- className: classes.selectIconLabel
208
- }, _react.default.createElement("img", {
209
- className: classes.labelImg,
210
- src: item.img,
211
- alt: item.label,
212
- onError: function onError(e) {
213
- if (item.fallbackImage) {
214
- e.target.src = "".concat(item.fallbackImage);
215
- } else {
216
- e.target.style.display = 'none';
217
- }
218
- }
219
- }), item.label);
220
- } else {
221
- inputValue = item.label;
222
- }
223
- }
224
-
225
- return inputValue;
226
- };
227
-
228
- _this.focusOnFirstItem = function () {
229
- if (_this.overlay && _this.overlay.getElementsByTagName('li')[0]) {
230
- setTimeout(function () {
231
- var item = _this.overlay.getElementsByTagName('li')[0];
232
-
233
- item.focus();
234
- }, 1);
235
- }
236
- };
237
-
238
- _this.getInputElement = function (el) {
239
- _this.searchField = el;
240
-
241
- if (_this.props.inputRef) {
242
- _this.props.inputRef(_this.searchField);
243
- }
244
- };
245
-
246
- _this.handleBlur = function () {
247
- _this.handleSearchReset();
248
-
249
- _this.setState({
250
- focused: false
251
- });
252
- };
253
-
254
- _this.handleClick = function () {
255
- if (_this.state.open) {
256
- _this.handleClose();
257
- } else {
258
- _this.setState({
259
- open: true
260
- });
261
-
262
- _this.handleSuggestions(_this.props.options);
263
-
264
- if (_this.props.onClick) _this.props.onClick(); // Gestion du focus
265
-
266
- if (!_this.props.searchable) {
267
- // Sinon focus sur l'élément sélectionné
268
- _this.focusOnSelectedItem(_this.props.value);
269
- }
270
- }
271
- };
272
-
273
- _this.focusOnSelectedItem = function (selectedValue) {
274
- setTimeout(function () {
275
- // On initialise au premier élément pour être sûr de ne pas se retrouver avec un focus of undefined
276
- var item = _this.overlay.getElementsByTagName('li')[0];
277
-
278
- if (selectedValue && typeof selectedValue === 'string') {
279
- item = _this.overlay.getElementsByTagName('li')[selectedValue];
280
- } else if (selectedValue && typeof selectedValue === 'number') {
281
- item = _this.overlay.getElementsByTagName('li')[selectedValue - 1];
282
- }
283
-
284
- if (item) {
285
- item.focus();
286
- }
287
- }, 1);
288
- };
289
-
290
- _this.handleClickAway = function (event) {
291
- // Au clic sur le bouton, on laisse le handleClick fermer le select
292
- if (!_this.inputEl.contains(event.target)) {
293
- _this.handleClose(event);
294
- }
295
- };
296
-
297
- _this.handleClose = function () {
298
- _this.handleSearchReset();
299
-
300
- _this.setState({
301
- open: false
302
- });
303
-
304
- if (_this.props.onClose) {
305
- _this.props.onClose();
306
- }
307
-
308
- if (_this.inputEl) {
309
- _this.inputEl.focus();
310
- }
311
- };
312
-
313
- _this.handleFocus = function () {
314
- _this.setState({
315
- focused: true
316
- });
317
- };
318
-
319
- _this.handleKeyDownInput = function (event) {
320
- var key = (0, _keycode.default)(event);
321
-
322
- if (key === 'down' || key === 'up') {
323
- _this.handleClick();
324
- } else if (key === 'enter' && _this.props.onSubmit) {
325
- event.preventDefault();
326
-
327
- _this.props.onSubmit(event);
328
- }
329
- };
330
-
331
- _this.handleKeyDown = function (event) {
332
- var nextItem;
333
- var key = (0, _keycode.default)(event);
334
-
335
- if (key === 'down') {
336
- event.preventDefault();
337
- nextItem = (0, _helpers.getNextItemSelectable)(document.activeElement, 'down');
338
- } else if (key === 'up') {
339
- event.preventDefault();
340
- nextItem = (0, _helpers.getNextItemSelectable)(document.activeElement, 'up');
341
- } else if (key === 'tab' || key === 'esc') {
342
- _this.setState({
343
- open: false
344
- });
345
- } else if (key === 'space') {
346
- // Cancel scroll
347
- event.preventDefault();
348
- }
349
-
350
- if (nextItem) {
351
- nextItem.focus();
352
- }
353
- };
354
-
355
- _this.getItemById = function (id) {
356
- var item;
357
-
358
- if (_this.props.hasAll && String(id) === '_all') {
359
- return {
360
- id: '_all'
361
- };
362
- }
363
-
364
- for (var i = 0; i < _this.props.options.length; i += 1) {
365
- var elem = _this.props.options[i];
366
-
367
- if (String(elem.id) === String(id)) {
368
- item = elem;
369
- break;
370
- }
371
-
372
- if (elem.children) {
373
- for (var j = 0; j < elem.children.length; j += 1) {
374
- if (String(elem.children[j].id) === String(id)) {
375
- item = elem.children[j];
376
- break;
377
- }
378
- }
379
- }
380
- }
381
-
382
- return item;
383
- };
384
-
385
- _this.handleKeyUp = function (event) {
386
- var key = (0, _keycode.default)(event);
387
-
388
- if (key === 'esc') {
389
- _this.setState({
390
- open: false
391
- });
392
- } else if (key === 'space' || key === 'enter' && !_this.props.multiple) {
393
- event.preventDefault();
394
-
395
- var item = _this.getItemById(event.target.id);
396
-
397
- if (item) {
398
- // Select for nested select
399
- if (_this.props.hiSelectableListProps && _this.props.hiSelectableListProps.onSelect) {
400
- _this.props.hiSelectableListProps.onSelect(null, item);
401
- } else {
402
- _this.handleSelect(null, item);
403
- }
404
- } else {
405
- console.warn("Can not find item #".concat(event.target.id));
406
- }
407
- } else if (key === 'enter' && _this.props.multiple) {
408
- event.preventDefault();
409
-
410
- _this.handleClose();
411
- }
412
- };
413
-
414
- _this.handleKeyDownSearch = function (event) {
415
- var key = (0, _keycode.default)(event);
416
-
417
- if (_this.overlay && (key === 'down' || key === 'up')) {
418
- _this.focusOnFirstItem();
419
- } else if (_this.overlay && key === 'esc' || key === 'enter') {
420
- event.preventDefault();
421
-
422
- _this.handleClose();
423
- } else if (key === 'tab') {
424
- _this.setState({
425
- open: false
426
- });
427
- }
428
- };
429
-
430
- _this.handleScroll = function (e) {
431
- if (e.target.scrollHeight - e.target.clientHeight - e.target.scrollTop < 15) {
432
- _this.props.onScrollReachBottom();
433
- }
434
- };
435
-
436
- _this.handleSelect = function (event, item) {
437
- var _this$props2 = _this.props,
438
- hasAll = _this$props2.hasAll,
439
- multiple = _this$props2.multiple,
440
- onChange = _this$props2.onChange,
441
- options = _this$props2.options,
442
- value = _this$props2.value;
443
-
444
- if (!multiple) {
445
- // single value
446
- _this.handleClose();
447
-
448
- onChange(event, item.id, item);
449
- } else if (hasAll && item.id === '_all') {
450
- if (value.length === options.length) {
451
- // unselect _all options
452
- onChange(event, [], item);
453
- } else {
454
- // select _all options
455
- onChange(event, options.map(function (option) {
456
- return option.id;
457
- }), item);
458
- }
459
- } else if (value.includes(item.id)) {
460
- // unselect item
461
- onChange(event, value.filter(function (id) {
462
- return id !== item.id;
463
- }), item);
464
- } else {
465
- onChange(event, [].concat((0, _toConsumableArray2.default)(value), [item.id]), item);
466
- }
467
- };
468
-
469
- _this.handleSuggestions = function (suggestions) {
470
- var _this$props3 = _this.props,
471
- hasAll = _this$props3.hasAll,
472
- iconAll = _this$props3.iconAll,
473
- translations = _this$props3.translations;
474
-
475
- if (suggestions.length === 0) {
476
- // Add '_no_result' suggestion
477
- _this.setState(function (prevState) {
478
- return (0, _extends2.default)({}, prevState, {
479
- suggestions: [{
480
- id: '_no_result',
481
- type: 'text',
482
- disabled: true,
483
- centered: true,
484
- hideCheckbox: true,
485
- label: translations.no_result_match
486
- }]
487
- });
488
- });
489
- } else {
490
- _this.setState({
491
- suggestions: [].concat((0, _toConsumableArray2.default)(hasAll ? [(0, _extends2.default)({
492
- id: '_all',
493
- label: translations.all
494
- }, iconAll && {
495
- type: 'icon',
496
- icon: iconAll
497
- })] : []), (0, _toConsumableArray2.default)(suggestions))
498
- });
499
- }
500
- };
501
-
502
- _this.handleSearch = function (e, inputValue) {
503
- var searchValue = inputValue && e.target.value ? inputValue : e.target.value;
504
-
505
- if (_this.props.onSearch) {
506
- _this.props.onSearch(e, searchValue);
507
- } else {
508
- _this.setState({
509
- searchValue: searchValue
510
- });
511
- }
512
- };
513
-
514
- _this.handleSearchReset = function () {
515
- _this.handleSearch({
516
- target: {
517
- value: ''
518
- }
519
- }, '');
520
- };
521
-
522
- _this.state = {
523
- open: false,
524
- focused: false,
525
- searchValue: props.searchValue ? undefined : '',
526
- suggestions: props.options,
527
- openDown: true
528
- };
529
- _this.handleBlur = _this.handleBlur.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
530
- _this.handleClick = _this.handleClick.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
531
- _this.handleClose = _this.handleClose.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
532
- _this.handleClickAway = _this.handleClickAway.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
533
- _this.handleFocus = _this.handleFocus.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
534
- _this.handleKeyDownInput = _this.handleKeyDownInput.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
535
- _this.handleSearch = _this.handleSearch.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
536
- _this.handleSearchReset = _this.handleSearchReset.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
537
- _this.handleSelect = _this.handleSelect.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
538
- _this.handleSuggestions = _this.handleSuggestions.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
539
- _this.getInputElement = _this.getInputElement.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
540
- return _this;
541
- }
542
-
543
- (0, _createClass2.default)(HiSelect, [{
544
- key: "render",
545
- value: function render() {
546
- var _classNames,
547
- _this2 = this;
548
-
549
- var _this$props4 = this.props,
550
- classes = _this$props4.classes,
551
- disabled = _this$props4.disabled,
552
- error = _this$props4.error,
553
- loading = _this$props4.loading,
554
- options = _this$props4.options,
555
- searchable = _this$props4.searchable,
556
- displayAsChip = _this$props4.displayAsChip,
557
- type = _this$props4.type,
558
- value = _this$props4.value,
559
- multiple = _this$props4.multiple,
560
- translations = _this$props4.translations,
561
- hiSearchInputProps = _this$props4.hiSearchInputProps,
562
- hiSelectableListProps = _this$props4.hiSelectableListProps,
563
- hiSelectInputProps = _this$props4.hiSelectInputProps,
564
- id = _this$props4.id,
565
- onScrollReachBottom = _this$props4.onScrollReachBottom,
566
- onSubmit = _this$props4.onSubmit,
567
- placeholder = _this$props4.placeholder,
568
- startAdornment = _this$props4.startAdornment,
569
- staticPosition = _this$props4.staticPosition,
570
- _this$props4$searchVa = _this$props4.searchValue,
571
- searchValue = _this$props4$searchVa === void 0 ? this.state.searchValue : _this$props4$searchVa,
572
- _this$props4$buildSel = _this$props4.buildSelectProps,
573
- buildSelectProps = _this$props4$buildSel === void 0 ? this.buildSelectProps : _this$props4$buildSel;
574
- var _this$state = this.state,
575
- open = _this$state.open,
576
- focused = _this$state.focused;
577
-
578
- if (multiple) {
579
- if (!Array.isArray(value)) {
580
- throw new Error('HiPay Material-UI: the `value` property must be an array ' + 'when using the `HiSelect` component with `multiple`.');
581
- }
582
- }
583
-
584
- var selectedItemIdList = [];
585
-
586
- if (value) {
587
- selectedItemIdList = multiple ? (0, _toConsumableArray2.default)(value) : [value];
588
- }
589
-
590
- var _buildSelectProps = buildSelectProps(options, selectedItemIdList, searchValue, loading),
591
- itemList = _buildSelectProps.itemList,
592
- _buildSelectProps$inp = _buildSelectProps.inputValue,
593
- inputValue = _buildSelectProps$inp === void 0 ? this.buildInputValue(options, selectedItemIdList, loading) : _buildSelectProps$inp;
594
-
595
- var popperStyle = {};
596
-
597
- if (this.props.containerWidth > 0) {
598
- popperStyle = {
599
- width: this.props.containerWidth
600
- };
601
-
602
- if (!staticPosition) {
603
- popperStyle.position = 'absolute';
604
- }
605
- }
606
-
607
- var popperClass = (0, _classnames.default)(classes.popper, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.popperWidth, !this.props.containerWidth), (0, _defineProperty2.default)(_classNames, classes.popperRightAlign, this.props.containerWidth && this.props.align === 'right'), _classNames));
608
-
609
- var searchInput = function searchInput(position) {
610
- if (searchable) {
611
- return _react.default.createElement(_HiInput.default, (0, _extends2.default)({
612
- value: searchValue,
613
- autoFocus: true,
614
- inputRef: _this2.getInputElement,
615
- onKeyDown: _this2.handleKeyDownSearch,
616
- onChange: _this2.handleSearch,
617
- onReset: _this2.handleSearchReset,
618
- placeholder: translations.search,
619
- startAdornment: 'search',
620
- tabIndex: 0,
621
- className: (0, _classnames.default)((0, _defineProperty2.default)({}, classes.separator, position === 'top'))
622
- }, hiSearchInputProps));
623
- }
624
-
625
- return null;
626
- }; // Replace popper onSearch when popper displayed on top of selectButton
627
-
628
-
629
- if (this.placement && this.placement.indexOf('top') >= 0 && !!searchable) {
630
- // +1 for search input
631
- var nbItems = itemList.length <= 10 ? itemList.length + 1 : 11;
632
- popperStyle.transform = "translate3d(-1px, -".concat(nbItems * 40 + 2, "px, 0px)");
633
- } else if (this.placement && this.placement.indexOf('top') < 0 && !!searchable) {
634
- popperStyle.transform = 'translate3d(-1px, 40px, 0px)';
635
- }
636
-
637
- var content = function content(_ref) {
638
- var placement = _ref.placement;
639
-
640
- if (placement !== _this2.placement) {
641
- _this2.placement = placement;
642
- }
643
-
644
- return _react.default.createElement(_ClickAwayListener.default, {
645
- onClickAway: _this2.handleClickAway
646
- }, _react.default.createElement(_Grow.default, {
647
- in: open,
648
- id: "menu-list",
649
- style: {
650
- transformOrigin: '0 0 0'
651
- }
652
- }, _react.default.createElement(_Paper.default, {
653
- className: classes.paper
654
- }, (_this2.placement && _this2.placement.indexOf('bottom') >= 0 || staticPosition) && searchInput('bottom'), startAdornment, _react.default.createElement(_reactCustomScrollbars.default, (0, _extends2.default)({
655
- ref: function ref(contentEl) {
656
- _this2.optionsContent = contentEl;
657
- },
658
- autoHeight: true,
659
- autoHeightMax: 400 // TODO ?
660
-
661
- }, onScrollReachBottom && {
662
- onScroll: _this2.handleScroll
663
- }), _react.default.createElement(_HiSelectableList.default, (0, _extends2.default)({
664
- type: type,
665
- itemList: itemList,
666
- onKeyDown: _this2.handleKeyDown,
667
- onKeyUp: _this2.handleKeyUp,
668
- onSelect: _this2.handleSelect,
669
- selectedItemIdList: selectedItemIdList,
670
- fallbackImage: _this2.props.fallbackImage
671
- }, hiSelectableListProps))), _this2.placement && _this2.placement.indexOf('top') >= 0 && !staticPosition && searchInput('top'))));
672
- };
673
-
674
- return _react.default.createElement("div", {
675
- className: classes.root,
676
- ref: function ref(el) {
677
- _this2.overlay = el;
678
- }
679
- }, _react.default.createElement(_HiSelectInput.default, (0, _extends2.default)({
680
- id: id,
681
- value: inputValue,
682
- open: open,
683
- focused: focused,
684
- type: type,
685
- disabled: disabled,
686
- noButton: displayAsChip,
687
- error: error,
688
- onClick: this.handleClick,
689
- onFocus: this.handleFocus,
690
- onBlur: this.handleBlur,
691
- onKeyDown: this.handleKeyDownInput,
692
- onSubmit: onSubmit,
693
- onMouseEnter: this.props.onMouseEnter,
694
- onMouseLeave: this.props.onMouseLeave,
695
- onReset: this.props.onReset,
696
- placeholder: placeholder
697
- }, hiSelectInputProps, {
698
- refElement: function refElement(el) {
699
- _this2.inputEl = el;
700
- }
701
- })), open && staticPosition ? _react.default.createElement("div", {
702
- style: popperStyle,
703
- className: popperClass
704
- }, content({})) : _react.default.createElement(_Popper.default, {
705
- anchorEl: this.inputEl,
706
- placement: "bottom-start",
707
- open: open,
708
- className: popperClass,
709
- disablePortal: true,
710
- style: popperStyle
711
- }, content));
712
- }
713
- }], [{
714
- key: "getDerivedStateFromProps",
715
- value: function getDerivedStateFromProps(nextProps, prevState) {
716
- if (nextProps.options !== prevState.suggestions) {
717
- return (0, _extends2.default)({}, prevState, {
718
- suggestions: nextProps.options
719
- });
720
- }
721
-
722
- return null;
723
- }
724
- /**
725
- * Build itemList & inputValue from select props
726
- * @param options
727
- * @param value
728
- * @param search
729
- * @param loading
730
- * @returns {{itemList: *[], inputValue: *}}
731
- */
732
-
733
- }]);
734
- return HiSelect;
735
- }(_react.default.PureComponent);
736
-
737
- HiSelect.defaultProps = {
738
- align: 'left',
739
- disabled: false,
740
- displayAsChip: false,
741
- error: false,
742
- hasAll: false,
743
- hiSelectableListProps: {},
744
- hiSelectInputProps: {},
745
- hiSearchInputProps: {},
746
- multiple: false,
747
- placeholder: '',
748
- searchable: false,
749
- staticPosition: false,
750
- translations: {
751
- all: 'All',
752
- no_result_match: 'No result match',
753
- search: 'Search',
754
- n_items_selected: '%s items selected',
755
- one_item_selected: '%s item selected',
756
- n_children: '%s items',
757
- one_child: '%s item'
758
- },
759
- type: 'text',
760
- filterFunc: filterValue
761
- };
762
- HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
763
- align: _propTypes.default.oneOf(['left', 'right']),
764
-
765
- /**
766
- * Useful to extend the style applied to components.
767
- */
768
- classes: _propTypes.default.object,
769
-
770
- /**
771
- * Popper width
772
- */
773
- containerWidth: _propTypes.default.number,
774
-
775
- /**
776
- * Inactif
777
- */
778
- disabled: _propTypes.default.bool,
779
-
780
- /**
781
- * Option permettant d'afficher les sélection sous forme de Chip.
782
- */
783
- displayAsChip: _propTypes.default.bool,
784
-
785
- /**
786
- * Applique le style error
787
- */
788
- error: _propTypes.default.bool,
789
-
790
- /**
791
- * Chemin vers l'image à afficher par défaut si une image n'est pas trouvée
792
- */
793
- fallbackImage: _propTypes.default.string,
794
-
795
- /*
796
- * Fonction de filtrage custom
797
- */
798
- filterFunc: _propTypes.default.func,
799
-
800
- /**
801
- * Affiche l'élément 'All'
802
- */
803
- hasAll: _propTypes.default.bool,
804
-
805
- /**
806
- * Override HiInput props (for search)
807
- */
808
- hiSearchInputProps: _propTypes.default.object,
809
-
810
- /**
811
- * Override HiSelectableList props
812
- */
813
- hiSelectableListProps: _propTypes.default.object,
814
-
815
- /**
816
- * Override HiSelectInput props
817
- */
818
- hiSelectInputProps: _propTypes.default.object,
819
-
820
- /**
821
- * Nom de l'icône
822
- */
823
- iconAll: _propTypes.default.string,
824
-
825
- /**
826
- * id du select
827
- */
828
- id: _propTypes.default.string,
829
-
830
- /**
831
- * Ajoute un loader
832
- */
833
- loading: _propTypes.default.bool,
834
-
835
- /**
836
- * Autorise la sélection de plusieurs valeurs
837
- */
838
- multiple: _propTypes.default.bool,
839
-
840
- /**
841
- * Nom du champ de formulaire
842
- */
843
- name: _propTypes.default.string.isRequired,
844
-
845
- /**
846
- * Fonction de callback qui renvoit la/les valeurs sélectionnées
847
- *
848
- * @param {object} event
849
- * @param {string || array} value
850
- */
851
- onChange: _propTypes.default.func.isRequired,
852
-
853
- /**
854
- * Fonction de callback appelée lorsqu'on ferme le select
855
- */
856
- onClose: _propTypes.default.func,
857
-
858
- /**
859
- * Fonction de callback appelée lorsqu'on survole le champs
860
- */
861
- onMouseEnter: _propTypes.default.func,
862
-
863
- /**
864
- * Fonction de callback appelée lorsque le curseur quitte le champs
865
- */
866
- onMouseLeave: _propTypes.default.func,
867
-
868
- /**
869
- * Fonction de callback appelée lorsqu'on vide le champs
870
- */
871
- onReset: _propTypes.default.func,
872
-
873
- /**
874
- * Fonction de callback appelée lorsque le scroll atteint le bas de la liste
875
- */
876
- onScrollReachBottom: _propTypes.default.func,
877
-
878
- /**
879
- * Fonction de callback appelée lorsque le champs de recherche est utilisé
880
- */
881
- onSearch: _propTypes.default.func,
882
-
883
- /**
884
- * Listes des options du select
885
- */
886
- options: _propTypes.default.array.isRequired,
887
-
888
- /**
889
- * Placeholder affiché lorsque l'input est vide
890
- */
891
- placeholder: _propTypes.default.string,
892
-
893
- /**
894
- * Affiche un input de recherche permettant de filtrer les options
895
- */
896
- searchable: _propTypes.default.bool,
897
-
898
- /**
899
- * Node qui s'ajoute entre la barre de recherche et la liste de résultats
900
- */
901
- startAdornment: _propTypes.default.object,
902
-
903
- /**
904
- * Si true, le contenu du select sera dans une div static plutôt que dans une popper absolute
905
- */
906
- staticPosition: _propTypes.default.bool,
907
-
908
- /**
909
- * Traductions (par défaut en anglais)
910
- */
911
- translations: _propTypes.default.object,
912
-
913
- /**
914
- * Type des éléments du select, définit le rendu d'un élément
915
- */
916
- type: _propTypes.default.oneOf(['icon', 'text', 'image', 'primary-highlight']),
917
-
918
- /**
919
- * Value(s) du select
920
- */
921
- value: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string, _propTypes.default.array])
922
- } : {};
923
-
924
- var _default = (0, _withStyles.default)(styles, {
925
- hiComponent: true,
926
- name: 'HmuiHiSelect'
927
- })(HiSelect);
928
-
929
- exports.default = _default;