@cashub/ui 0.18.0 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -165,8 +165,10 @@ var DatePickerV2 = function DatePickerV2(_ref) {
165
165
  }
166
166
  }, [accordionCurrentDisplayType]);
167
167
  var handleConfirm = (0, _react.useCallback)(function () {
168
- if (!confirmDate) return;
169
- onConfirm(confirmDate);
168
+ if (confirmDate) {
169
+ onConfirm(confirmDate);
170
+ }
171
+
170
172
  setDisplayPicker(false);
171
173
  setAccordionCurrentDisplayType(null);
172
174
  }, [confirmDate, onConfirm]);
@@ -350,10 +352,13 @@ var DatePickerV2 = function DatePickerV2(_ref) {
350
352
  });
351
353
  }, [selectedDate, handleChangeDate, isSelectedDay, handleDisabled]);
352
354
  (0, _react.useEffect)(function () {
353
- if (!selected) return;
354
- var formattedDate = (0, _utils.formatDate)((0, _toUTC.default)(selected), 'date');
355
- setSelectedDate("".concat(formattedDate, " ").concat(DEFAULT_TIME));
356
- setConfirmDate(formattedDate);
355
+ if (selected) {
356
+ var formattedDate = (0, _utils.formatDate)((0, _toUTC.default)(selected), 'date');
357
+ setSelectedDate("".concat(formattedDate, " ").concat(DEFAULT_TIME));
358
+ setConfirmDate(formattedDate);
359
+ } else {
360
+ setConfirmDate('');
361
+ }
357
362
  }, [selected]);
358
363
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DateTimePickerContext.default.Provider, {
359
364
  value: context,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cashub/ui",
3
- "version": "0.18.0",
3
+ "version": "0.18.2",
4
4
  "private": false,
5
5
  "author": "CASHUB Team",
6
6
  "description": "CASHUB UI components library",
package/select/Select.js CHANGED
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
 
8
8
  var _react = require("react");
9
9
 
10
+ var _reactI18next = require("react-i18next");
11
+
10
12
  var _reactOutsideClickHandler = _interopRequireDefault(require("react-outside-click-handler"));
11
13
 
12
14
  var _styledComponents = _interopRequireDefault(require("styled-components"));
@@ -75,6 +77,8 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
75
77
 
76
78
  var Select = function Select(_ref) {
77
79
  var options = _ref.options,
80
+ _ref$enableSelectAll = _ref.enableSelectAll,
81
+ enableSelectAll = _ref$enableSelectAll === void 0 ? false : _ref$enableSelectAll,
78
82
  selected = _ref.selected,
79
83
  onSelect = _ref.onSelect,
80
84
  onDeselect = _ref.onDeselect,
@@ -93,71 +97,93 @@ var Select = function Select(_ref) {
93
97
  fillReverse = _ref.fillReverse,
94
98
  onBlur = _ref.onBlur,
95
99
  onSearch = _ref.onSearch;
100
+ console.log('selected', selected);
101
+
102
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
103
+ t = _useTranslation.t;
96
104
 
97
105
  var _useState = (0, _react.useState)((0, _lodash.default)('select-')),
98
106
  _useState2 = _slicedToArray(_useState, 1),
99
107
  id = _useState2[0];
100
108
 
101
- var _useState3 = (0, _react.useState)(false),
102
- _useState4 = _slicedToArray(_useState3, 2),
103
- display = _useState4[0],
104
- setDisplay = _useState4[1];
109
+ var _useState3 = (0, _react.useState)((0, _lodash.default)('allOptons-')),
110
+ _useState4 = _slicedToArray(_useState3, 1),
111
+ allOptionId = _useState4[0];
105
112
 
106
- var _useState5 = (0, _react.useState)(null),
113
+ var _useState5 = (0, _react.useState)(false),
107
114
  _useState6 = _slicedToArray(_useState5, 2),
108
- comboboxElement = _useState6[0],
109
- setComboboxElement = _useState6[1];
115
+ display = _useState6[0],
116
+ setDisplay = _useState6[1];
110
117
 
111
118
  var _useState7 = (0, _react.useState)(null),
112
119
  _useState8 = _slicedToArray(_useState7, 2),
113
- listBoxElement = _useState8[0],
114
- setListBoxElement = _useState8[1];
120
+ comboboxElement = _useState8[0],
121
+ setComboboxElement = _useState8[1];
122
+
123
+ var _useState9 = (0, _react.useState)(null),
124
+ _useState10 = _slicedToArray(_useState9, 2),
125
+ listBoxElement = _useState10[0],
126
+ setListBoxElement = _useState10[1];
115
127
 
116
128
  var optionsElementRef = (0, _react.useRef)(null);
117
129
  var searchBoxElement = (0, _react.useRef)(null);
118
130
 
119
- var _useState9 = (0, _react.useState)(0),
120
- _useState10 = _slicedToArray(_useState9, 2),
121
- listBoxWidth = _useState10[0],
122
- setListBoxWidth = _useState10[1];
123
-
124
- var _useState11 = (0, _react.useState)([]),
131
+ var _useState11 = (0, _react.useState)(0),
125
132
  _useState12 = _slicedToArray(_useState11, 2),
126
- optionList = _useState12[0],
127
- setOptionList = _useState12[1];
133
+ listBoxWidth = _useState12[0],
134
+ setListBoxWidth = _useState12[1];
128
135
 
129
- var _useState13 = (0, _react.useState)(null),
136
+ var _useState13 = (0, _react.useState)([]),
130
137
  _useState14 = _slicedToArray(_useState13, 2),
131
- focusedOption = _useState14[0],
132
- setFocusedOption = _useState14[1];
138
+ optionList = _useState14[0],
139
+ setOptionList = _useState14[1];
133
140
 
134
- var _useState15 = (0, _react.useState)(false),
141
+ var _useState15 = (0, _react.useState)(null),
135
142
  _useState16 = _slicedToArray(_useState15, 2),
136
- isFocusCombobox = _useState16[0],
137
- setIsFocusCombobox = _useState16[1];
143
+ focusedOption = _useState16[0],
144
+ setFocusedOption = _useState16[1];
138
145
 
139
- var _useState17 = (0, _react.useState)([]),
146
+ var _useState17 = (0, _react.useState)(false),
140
147
  _useState18 = _slicedToArray(_useState17, 2),
141
- selectedOptions = _useState18[0],
142
- setSelectedOptions = _useState18[1];
148
+ isFocusCombobox = _useState18[0],
149
+ setIsFocusCombobox = _useState18[1];
143
150
 
144
- var _useState19 = (0, _react.useState)(options),
151
+ var _useState19 = (0, _react.useState)([]),
145
152
  _useState20 = _slicedToArray(_useState19, 2),
146
- filteredOptions = _useState20[0],
147
- setFilteredOptions = _useState20[1];
153
+ selectedOptions = _useState20[0],
154
+ setSelectedOptions = _useState20[1];
148
155
 
149
- var _useState21 = (0, _react.useState)(''),
156
+ var _useState21 = (0, _react.useState)(options),
150
157
  _useState22 = _slicedToArray(_useState21, 2),
151
- search = _useState22[0],
152
- setSearch = _useState22[1];
158
+ filteredOptions = _useState22[0],
159
+ setFilteredOptions = _useState22[1];
160
+
161
+ var _useState23 = (0, _react.useState)(''),
162
+ _useState24 = _slicedToArray(_useState23, 2),
163
+ search = _useState24[0],
164
+ setSearch = _useState24[1];
153
165
 
154
166
  var _useCustomPopper = (0, _hooks.useCustomPopper)(comboboxElement, listBoxElement),
155
167
  styles = _useCustomPopper.styles,
156
168
  attributes = _useCustomPopper.attributes,
157
169
  state = _useCustomPopper.state,
158
- update = _useCustomPopper.update; // parse all value to string
159
- // for subsequently determine whether it is a selected item
170
+ update = _useCustomPopper.update;
171
+
172
+ var newOptions = (0, _react.useMemo)(function () {
173
+ if (!options) return;
160
174
 
175
+ var newOptions = _toConsumableArray(options);
176
+
177
+ if (options.length > 0 && multiple && enableSelectAll) {
178
+ newOptions.unshift({
179
+ id: allOptionId,
180
+ text: t('all')
181
+ });
182
+ }
183
+
184
+ return newOptions;
185
+ }, [options, multiple, enableSelectAll, allOptionId]); // parse all value to string
186
+ // for subsequently determine whether it is a selected item
161
187
 
162
188
  var parsedSelected = (0, _react.useMemo)(function () {
163
189
  if (selected || selected === 0) {
@@ -173,7 +199,16 @@ var Select = function Select(_ref) {
173
199
  }
174
200
 
175
201
  return '';
176
- }, [selected]); // set focused option
202
+ }, [selected]);
203
+ var selectedAllOptions = (0, _react.useMemo)(function () {
204
+ var selectedAllOptions = _toConsumableArray(parsedSelected);
205
+
206
+ if (multiple && enableSelectAll && parsedSelected.length + 1 === newOptions.length) {
207
+ selectedAllOptions.unshift(allOptionId);
208
+ }
209
+
210
+ return selectedAllOptions;
211
+ }, [multiple, enableSelectAll, newOptions.length, parsedSelected, allOptionId]); // set focused option
177
212
 
178
213
  var handleFocusItem = (0, _react.useCallback)(function (element) {
179
214
  if (!optionsElementRef.current) return;
@@ -236,21 +271,73 @@ var Select = function Select(_ref) {
236
271
  }, [listBoxElement]);
237
272
  var handleOnSelect = (0, _react.useCallback)(function (event, value) {
238
273
  event.stopPropagation();
239
- if (disabled === true) return;
240
- onSelect(value);
274
+ if (disabled === true) return; // 選取選項
275
+ // 點選 all 全選
276
+
277
+ if (value.toString() === allOptionId && selectedAllOptions.length < newOptions.length) {
278
+ for (var index = 1; index < newOptions.length; index += 1) {
279
+ onSelect(newOptions[index].id);
280
+ }
281
+ }
282
+
283
+ if (value.toString() !== allOptionId && !selectedAllOptions.includes(value.toString())) {
284
+ // 選取一個選項,變成全選
285
+ if (selectedAllOptions.length + 2 === newOptions.length) {
286
+ onSelect(value);
287
+ } else {
288
+ // 選取特定選項
289
+ onSelect(value);
290
+ }
291
+ } // 刪除選項
292
+ // 點選 all 刪除全選
293
+
294
+
295
+ if (value.toString() === allOptionId && selectedAllOptions.length === newOptions.length) {
296
+ for (var _index = 0; _index < newOptions.length; _index += 1) {
297
+ onDeselect(newOptions[_index].id);
298
+ }
299
+ }
300
+
301
+ if (value.toString() !== allOptionId && selectedAllOptions.includes(value.toString())) {
302
+ // 原本是 all 全選後來刪除其中一個選項
303
+ if (selectedAllOptions.length === newOptions.length) {
304
+ onDeselect(value);
305
+ } else {
306
+ // 刪除特定選項
307
+ onDeselect(value);
308
+ }
309
+ }
310
+
241
311
  comboboxElement.focus();
242
312
  setSearch('');
243
- setDisplay(false);
244
- }, [disabled, onSelect, comboboxElement]);
313
+ setDisplay(true);
314
+ }, [disabled, onSelect, comboboxElement, selectedAllOptions, onDeselect, newOptions, allOptionId]);
245
315
  var handleOnDeselect = (0, _react.useCallback)(function (event, value) {
246
316
  event.stopPropagation();
247
317
  if (disabled === true) return;
248
- onDeselect(value);
249
- }, [disabled, onDeselect]); // list all selected option
318
+
319
+ if (value.toString() === allOptionId) {
320
+ for (var index = 0; index < optionList.length; index += 1) {
321
+ onDeselect(optionList[index].id);
322
+ }
323
+ } else {
324
+ onDeselect(value);
325
+ }
326
+ }, [disabled, onDeselect, optionList, allOptionId]); // list all selected option
250
327
 
251
328
  var selectedItem = (0, _react.useMemo)(function () {
252
329
  if (selectedOptions.length > 0) {
253
330
  if (multiple) {
331
+ if (selectedOptions[0].id === allOptionId) {
332
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SelectedMultiple.default, {
333
+ content: selectedOptions[0].text,
334
+ onClick: function onClick(event) {
335
+ return handleOnDeselect(event, selectedOptions[0].id);
336
+ },
337
+ disabled: disabled
338
+ }, selectedOptions[0].id);
339
+ }
340
+
254
341
  return selectedOptions.map(function (value) {
255
342
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SelectedMultiple.default, {
256
343
  content: value.text,
@@ -268,7 +355,7 @@ var Select = function Select(_ref) {
268
355
  }
269
356
 
270
357
  return placeholder;
271
- }, [placeholder, handleOnDeselect, multiple, selectedOptions, disabled]);
358
+ }, [placeholder, handleOnDeselect, multiple, selectedOptions, disabled, allOptionId]);
272
359
  var optionItem = (0, _react.useMemo)(function () {
273
360
  if (optionList.length <= 0) return null;
274
361
  return optionList.map(function (option) {
@@ -432,21 +519,21 @@ var Select = function Select(_ref) {
432
519
 
433
520
 
434
521
  (0, _react.useEffect)(function () {
435
- if (!options) return;
522
+ if (!newOptions) return;
436
523
  var tmpSelectedOptions = [];
437
- options.forEach(function (option) {
524
+ newOptions.forEach(function (option) {
438
525
  if (option.child && option.child.length > 0) {
439
526
  option.child.forEach(function (option) {
440
- if (multiple && parsedSelected.includes(option.id.toString())) {
527
+ if (multiple && selectedAllOptions.includes(option.id.toString())) {
441
528
  tmpSelectedOptions.push(option);
442
- } else if (parsedSelected === option.id.toString()) {
529
+ } else if (selectedAllOptions === option.id.toString()) {
443
530
  tmpSelectedOptions.push(option);
444
531
  }
445
532
  });
446
533
  } else {
447
- if (multiple && parsedSelected.includes(option.id.toString())) {
534
+ if (multiple && selectedAllOptions.includes(option.id.toString())) {
448
535
  tmpSelectedOptions.push(option);
449
- } else if (parsedSelected === option.id.toString()) {
536
+ } else if (selectedAllOptions === option.id.toString()) {
450
537
  tmpSelectedOptions.push(option);
451
538
  }
452
539
  }
@@ -454,7 +541,7 @@ var Select = function Select(_ref) {
454
541
  return false;
455
542
  });
456
543
  setSelectedOptions(tmpSelectedOptions);
457
- }, [options, parsedSelected, multiple]);
544
+ }, [newOptions, selectedAllOptions, multiple]);
458
545
  (0, _react.useEffect)(function () {
459
546
  if (update) {
460
547
  setTimeout(function () {
@@ -504,9 +591,9 @@ var Select = function Select(_ref) {
504
591
  child: option.child.map(function (option) {
505
592
  var selected = false;
506
593
 
507
- if (multiple && parsedSelected.includes(option.id.toString())) {
594
+ if (multiple && selectedAllOptions.includes(option.id.toString())) {
508
595
  selected = true;
509
- } else if (parsedSelected === option.id.toString()) {
596
+ } else if (selectedAllOptions === option.id.toString()) {
510
597
  selected = true;
511
598
  }
512
599
 
@@ -519,9 +606,9 @@ var Select = function Select(_ref) {
519
606
 
520
607
  var selected = false;
521
608
 
522
- if (multiple && parsedSelected.includes(option.id.toString())) {
609
+ if (multiple && selectedAllOptions.includes(option.id.toString())) {
523
610
  selected = true;
524
- } else if (parsedSelected === option.id.toString()) {
611
+ } else if (selectedAllOptions === option.id.toString()) {
525
612
  selected = true;
526
613
  }
527
614
 
@@ -529,11 +616,11 @@ var Select = function Select(_ref) {
529
616
  selected: selected
530
617
  });
531
618
  }));
532
- }, [filteredOptions, multiple, parsedSelected]); // filter options on search keyword changed
619
+ }, [filteredOptions, multiple, selectedAllOptions]); // filter options on search keyword changed
533
620
 
534
621
  (0, _react.useEffect)(function () {
535
622
  var tmpFilteredOptions = [];
536
- options.forEach(function (option) {
623
+ newOptions.forEach(function (option) {
537
624
  if (option.child && option.child.length > 0) {
538
625
  var tmpFilteredChildOptions = option.child.filter(function (option) {
539
626
  return option.text.toLowerCase().indexOf(search.toLowerCase().trim()) !== -1;
@@ -549,7 +636,7 @@ var Select = function Select(_ref) {
549
636
  }
550
637
  });
551
638
  setFilteredOptions(tmpFilteredOptions);
552
- }, [search, options]);
639
+ }, [search, newOptions]);
553
640
  (0, _react.useEffect)(function () {
554
641
  if (display) {
555
642
  setupFocus();