@dhis2-ui/transfer 10.16.3 → 10.16.5

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.
Files changed (128) hide show
  1. package/build/cjs/__e2e__/add_remove-highlighted-options.e2e.stories.js +20 -29
  2. package/build/cjs/__e2e__/common/stateful-decorator.js +20 -28
  3. package/build/cjs/__e2e__/disabled-transfer-buttons.e2e.stories.js +49 -70
  4. package/build/cjs/__e2e__/disabled-transfer-options.e2e.stories.js +11 -14
  5. package/build/cjs/__e2e__/display-order.e2e.stories.js +19 -28
  6. package/build/cjs/__e2e__/filter-options-list.e2e.stories.js +72 -96
  7. package/build/cjs/__e2e__/highlight-range-of-options.e2e.stories.js +33 -48
  8. package/build/cjs/__e2e__/notify_at_end_of_list.e2e.stories.js +47 -67
  9. package/build/cjs/__e2e__/reorder-with-buttons.e2e.stories.js +15 -24
  10. package/build/cjs/__e2e__/set_unset-highlighted-option.e2e.stories.js +20 -29
  11. package/build/cjs/__e2e__/transferring-items.e2e.stories.js +19 -28
  12. package/build/cjs/__tests__/helper/use-highlighted-option/toggle-add.test.js +3 -6
  13. package/build/cjs/__tests__/helper/use-highlighted-option/toggle-range.test.js +24 -48
  14. package/build/cjs/__tests__/transfer.test.js +10 -18
  15. package/build/cjs/actions.js +10 -13
  16. package/build/cjs/add-all.js +14 -17
  17. package/build/cjs/add-individual.js +13 -16
  18. package/build/cjs/common/get-mode-by-modifier-key.js +6 -7
  19. package/build/cjs/container.js +12 -15
  20. package/build/cjs/end-intersection-detector.js +15 -21
  21. package/build/cjs/features/disabled-transfer-options/index.js +2 -4
  22. package/build/cjs/features/display-order/index.js +26 -47
  23. package/build/cjs/features/filter-options-list/index.js +3 -6
  24. package/build/cjs/features/highlight-range-of-options/index.js +5 -10
  25. package/build/cjs/features/notify_at_end_of_list/index.js +2 -4
  26. package/build/cjs/features/set_unset-highlighted-option/index.js +3 -6
  27. package/build/cjs/features/transferring-items/index.js +41 -75
  28. package/build/cjs/filter.js +24 -27
  29. package/build/cjs/icons.js +147 -171
  30. package/build/cjs/left-footer.js +10 -13
  31. package/build/cjs/left-header.js +10 -13
  32. package/build/cjs/left-side.js +16 -19
  33. package/build/cjs/locales/index.js +6 -1
  34. package/build/cjs/options-container.js +15 -17
  35. package/build/cjs/remove-all.js +13 -16
  36. package/build/cjs/remove-individual.js +13 -16
  37. package/build/cjs/reordering-actions.js +75 -82
  38. package/build/cjs/right-footer.js +10 -13
  39. package/build/cjs/right-header.js +10 -13
  40. package/build/cjs/right-side.js +16 -19
  41. package/build/cjs/transfer/add-all-selectable-source-options.js +9 -13
  42. package/build/cjs/transfer/add-individual-source-options.js +9 -10
  43. package/build/cjs/transfer/create-double-click-handlers.js +13 -16
  44. package/build/cjs/transfer/default-filter-callback.js +3 -6
  45. package/build/cjs/transfer/get-highlighted-picked-indices.js +4 -5
  46. package/build/cjs/transfer/is-reorder-down-disabled.js +5 -6
  47. package/build/cjs/transfer/is-reorder-up-disabled.js +5 -6
  48. package/build/cjs/transfer/move-highlighted-picked-option-down.js +5 -6
  49. package/build/cjs/transfer/move-highlighted-picked-option-to-bottom.js +5 -6
  50. package/build/cjs/transfer/move-highlighted-picked-option-to-top.js +5 -6
  51. package/build/cjs/transfer/move-highlighted-picked-option-up.js +5 -6
  52. package/build/cjs/transfer/remove-all-picked-options.js +4 -5
  53. package/build/cjs/transfer/remove-individual-picked-options.js +8 -9
  54. package/build/cjs/transfer/use-filter.js +7 -8
  55. package/build/cjs/transfer/use-highlighted-options/create-toggle-highlighted-option.js +39 -43
  56. package/build/cjs/transfer/use-highlighted-options/toggle-add.js +6 -7
  57. package/build/cjs/transfer/use-highlighted-options/toggle-range.js +11 -15
  58. package/build/cjs/transfer/use-highlighted-options/toggle-replace.js +5 -6
  59. package/build/cjs/transfer/use-highlighted-options.js +5 -6
  60. package/build/cjs/transfer/use-options-key-monitor.js +6 -7
  61. package/build/cjs/transfer-option.js +11 -13
  62. package/build/cjs/transfer.js +65 -85
  63. package/build/cjs/transfer.prod.stories.js +99 -146
  64. package/build/es/__e2e__/add_remove-highlighted-options.e2e.stories.js +20 -29
  65. package/build/es/__e2e__/common/stateful-decorator.js +19 -26
  66. package/build/es/__e2e__/disabled-transfer-buttons.e2e.stories.js +49 -70
  67. package/build/es/__e2e__/disabled-transfer-options.e2e.stories.js +11 -14
  68. package/build/es/__e2e__/display-order.e2e.stories.js +19 -28
  69. package/build/es/__e2e__/filter-options-list.e2e.stories.js +72 -96
  70. package/build/es/__e2e__/highlight-range-of-options.e2e.stories.js +33 -48
  71. package/build/es/__e2e__/notify_at_end_of_list.e2e.stories.js +46 -65
  72. package/build/es/__e2e__/reorder-with-buttons.e2e.stories.js +15 -24
  73. package/build/es/__e2e__/set_unset-highlighted-option.e2e.stories.js +20 -29
  74. package/build/es/__e2e__/transferring-items.e2e.stories.js +19 -28
  75. package/build/es/__tests__/helper/use-highlighted-option/toggle-add.test.js +3 -6
  76. package/build/es/__tests__/helper/use-highlighted-option/toggle-range.test.js +24 -48
  77. package/build/es/__tests__/transfer.test.js +10 -18
  78. package/build/es/actions.js +10 -13
  79. package/build/es/add-all.js +14 -17
  80. package/build/es/add-individual.js +13 -16
  81. package/build/es/common/get-mode-by-modifier-key.js +6 -7
  82. package/build/es/container.js +12 -15
  83. package/build/es/end-intersection-detector.js +15 -21
  84. package/build/es/features/disabled-transfer-options/index.js +2 -4
  85. package/build/es/features/display-order/index.js +26 -47
  86. package/build/es/features/filter-options-list/index.js +3 -6
  87. package/build/es/features/highlight-range-of-options/index.js +5 -10
  88. package/build/es/features/notify_at_end_of_list/index.js +2 -4
  89. package/build/es/features/set_unset-highlighted-option/index.js +3 -6
  90. package/build/es/features/transferring-items/index.js +41 -75
  91. package/build/es/filter.js +24 -27
  92. package/build/es/icons.js +147 -171
  93. package/build/es/left-footer.js +10 -13
  94. package/build/es/left-header.js +10 -13
  95. package/build/es/left-side.js +16 -19
  96. package/build/es/locales/index.js +6 -1
  97. package/build/es/options-container.js +14 -15
  98. package/build/es/remove-all.js +13 -16
  99. package/build/es/remove-individual.js +13 -16
  100. package/build/es/reordering-actions.js +75 -82
  101. package/build/es/right-footer.js +10 -13
  102. package/build/es/right-header.js +10 -13
  103. package/build/es/right-side.js +16 -19
  104. package/build/es/transfer/add-all-selectable-source-options.js +9 -13
  105. package/build/es/transfer/add-individual-source-options.js +9 -10
  106. package/build/es/transfer/create-double-click-handlers.js +13 -16
  107. package/build/es/transfer/default-filter-callback.js +3 -6
  108. package/build/es/transfer/get-highlighted-picked-indices.js +4 -5
  109. package/build/es/transfer/is-reorder-down-disabled.js +5 -6
  110. package/build/es/transfer/is-reorder-up-disabled.js +5 -6
  111. package/build/es/transfer/move-highlighted-picked-option-down.js +5 -6
  112. package/build/es/transfer/move-highlighted-picked-option-to-bottom.js +5 -6
  113. package/build/es/transfer/move-highlighted-picked-option-to-top.js +5 -6
  114. package/build/es/transfer/move-highlighted-picked-option-up.js +5 -6
  115. package/build/es/transfer/remove-all-picked-options.js +4 -5
  116. package/build/es/transfer/remove-individual-picked-options.js +8 -9
  117. package/build/es/transfer/use-filter.js +7 -8
  118. package/build/es/transfer/use-highlighted-options/create-toggle-highlighted-option.js +39 -43
  119. package/build/es/transfer/use-highlighted-options/toggle-add.js +6 -7
  120. package/build/es/transfer/use-highlighted-options/toggle-range.js +11 -15
  121. package/build/es/transfer/use-highlighted-options/toggle-replace.js +5 -6
  122. package/build/es/transfer/use-highlighted-options.js +5 -6
  123. package/build/es/transfer/use-options-key-monitor.js +6 -7
  124. package/build/es/transfer-option.js +10 -11
  125. package/build/es/transfer.js +64 -83
  126. package/build/es/transfer.prod.stories.js +98 -144
  127. package/package.json +8 -8
  128. package/src/locales/index.js +6 -1
@@ -14,51 +14,47 @@ import { toggleReplace } from './toggle-replace.js';
14
14
  * @param {string} args.lastClicked
15
15
  * @returns {void}
16
16
  */
17
- export const createToggleHighlightedOption = _ref => {
18
- let {
19
- disabled,
20
- highlightedOptions,
21
- setHighlightedOptions,
22
- maxSelections,
23
- setLastClicked,
24
- options,
25
- lastClicked
26
- } = _ref;
27
- return _ref2 => {
28
- let {
29
- option,
30
- mode
31
- } = _ref2;
32
- if (disabled) {
33
- return;
34
- }
35
- setHighlightedOptions([]);
36
- if (mode === ADD_MODE) {
37
- setLastClicked(option.value);
38
- return toggleAdd({
39
- highlightedOptions,
40
- maxSelections,
41
- option,
42
- setHighlightedOptions
43
- });
44
- }
45
- if (mode === RANGE_MODE) {
46
- return toggleRange({
47
- highlightedOptions,
48
- options,
49
- option,
50
- setHighlightedOptions,
51
- lastClicked,
52
- maxSelections
53
- });
54
- }
55
-
56
- // REPLACE_MODE
17
+ export const createToggleHighlightedOption = ({
18
+ disabled,
19
+ highlightedOptions,
20
+ setHighlightedOptions,
21
+ maxSelections,
22
+ setLastClicked,
23
+ options,
24
+ lastClicked
25
+ }) => ({
26
+ option,
27
+ mode
28
+ }) => {
29
+ if (disabled) {
30
+ return;
31
+ }
32
+ setHighlightedOptions([]);
33
+ if (mode === ADD_MODE) {
57
34
  setLastClicked(option.value);
58
- return toggleReplace({
59
- option,
35
+ return toggleAdd({
60
36
  highlightedOptions,
37
+ maxSelections,
38
+ option,
61
39
  setHighlightedOptions
62
40
  });
63
- };
41
+ }
42
+ if (mode === RANGE_MODE) {
43
+ return toggleRange({
44
+ highlightedOptions,
45
+ options,
46
+ option,
47
+ setHighlightedOptions,
48
+ lastClicked,
49
+ maxSelections
50
+ });
51
+ }
52
+
53
+ // REPLACE_MODE
54
+ setLastClicked(option.value);
55
+ return toggleReplace({
56
+ option,
57
+ highlightedOptions,
58
+ setHighlightedOptions
59
+ });
64
60
  };
@@ -8,13 +8,12 @@ import { toggleValue } from '../../common/index.js';
8
8
  * @param {Function} args.setHighlightedOption
9
9
  * @returns {void}
10
10
  */
11
- export const toggleAdd = _ref => {
12
- let {
13
- highlightedOptions,
14
- maxSelections,
15
- option,
16
- setHighlightedOptions
17
- } = _ref;
11
+ export const toggleAdd = ({
12
+ highlightedOptions,
13
+ maxSelections,
14
+ option,
15
+ setHighlightedOptions
16
+ }) => {
18
17
  const afterToggled = toggleValue(highlightedOptions, option.value);
19
18
  const capped = afterToggled.slice(-1 * maxSelections);
20
19
  setHighlightedOptions(capped);
@@ -10,15 +10,14 @@ import { findOptionIndex } from '../../common/index.js';
10
10
  * @param {Function} args.setHighlightedOption
11
11
  * @returns {void}
12
12
  */
13
- export const toggleRange = _ref => {
14
- let {
15
- highlightedOptions,
16
- options,
17
- option,
18
- setHighlightedOptions,
19
- lastClicked,
20
- maxSelections
21
- } = _ref;
13
+ export const toggleRange = ({
14
+ highlightedOptions,
15
+ options,
16
+ option,
17
+ setHighlightedOptions,
18
+ lastClicked,
19
+ maxSelections
20
+ }) => {
22
21
  if (highlightedOptions.length === 0) {
23
22
  setHighlightedOptions([option.value]);
24
23
  } else {
@@ -42,12 +41,9 @@ export const toggleRange = _ref => {
42
41
  // -> Just how slice works ;)
43
42
  const lower = Math.min(from, to);
44
43
  const higher = Math.max(from, to);
45
- const newHighlightedSourceOptions = options.slice(lower, higher + 1).filter(option => !option.disabled).slice(maxSelections * -1).map(_ref2 => {
46
- let {
47
- value
48
- } = _ref2;
49
- return value;
50
- });
44
+ const newHighlightedSourceOptions = options.slice(lower, higher + 1).filter(option => !option.disabled).slice(maxSelections * -1).map(({
45
+ value
46
+ }) => value);
51
47
  setHighlightedOptions(newHighlightedSourceOptions);
52
48
  }
53
49
  };
@@ -5,12 +5,11 @@
5
5
  * @param {Function} args.setHighlightedOption
6
6
  * @returns {void}
7
7
  */
8
- export const toggleReplace = _ref => {
9
- let {
10
- option,
11
- highlightedOptions,
12
- setHighlightedOptions
13
- } = _ref;
8
+ export const toggleReplace = ({
9
+ option,
10
+ highlightedOptions,
11
+ setHighlightedOptions
12
+ }) => {
14
13
  if (highlightedOptions.length > 1) {
15
14
  setHighlightedOptions([option.value]);
16
15
  } else {
@@ -8,12 +8,11 @@ import { createToggleHighlightedOption } from './use-highlighted-options/create-
8
8
  * @param {Object[]} args.options
9
9
  * @returns {Object} highlighted options & helpers
10
10
  */
11
- export const useHighlightedOptions = _ref => {
12
- let {
13
- disabled,
14
- maxSelections,
15
- options
16
- } = _ref;
11
+ export const useHighlightedOptions = ({
12
+ disabled,
13
+ maxSelections,
14
+ options
15
+ }) => {
17
16
  /**
18
17
  * These are important so the stored element can be used
19
18
  * as range-start when using shift multiple times consecutively
@@ -8,13 +8,12 @@ const isEndIntersectionDetectorWithinScrollBox = (scrollBoxRef, listRef) => {
8
8
  const listRect = listRef.current.getBoundingClientRect();
9
9
  return listRect.bottom - scrollBoxRect.bottom < INTERSECTION_DETECTOR_HEIGHT;
10
10
  };
11
- export const useOptionsKeyMonitor = _ref => {
12
- let {
13
- scrollBoxRef,
14
- listRef,
15
- allOptionsKey,
16
- onEndReached
17
- } = _ref;
11
+ export const useOptionsKeyMonitor = ({
12
+ scrollBoxRef,
13
+ listRef,
14
+ allOptionsKey,
15
+ onEndReached
16
+ }) => {
18
17
  /* Store in ref so this works even if a consumer does not pass a stable
19
18
  * function reference */
20
19
  const onEndReachedRef = useRef(onEndReached);
@@ -4,17 +4,16 @@ import cx from 'classnames';
4
4
  import PropTypes from 'prop-types';
5
5
  import React, { useRef } from 'react';
6
6
  const DOUBLE_CLICK_MAX_DELAY = 500;
7
- export const TransferOption = _ref => {
8
- let {
9
- className,
10
- disabled,
11
- dataTest = 'dhis2-uicore-transferoption',
12
- highlighted,
13
- onClick,
14
- onDoubleClick,
15
- label,
16
- value
17
- } = _ref;
7
+ export const TransferOption = ({
8
+ className,
9
+ disabled,
10
+ dataTest = 'dhis2-uicore-transferoption',
11
+ highlighted,
12
+ onClick,
13
+ onDoubleClick,
14
+ label,
15
+ value
16
+ }) => {
18
17
  const doubleClickTimeout = useRef(null);
19
18
  return /*#__PURE__*/React.createElement("div", {
20
19
  "data-test": dataTest,
@@ -20,52 +20,51 @@ import { TransferOption } from './transfer-option.js';
20
20
  const identity = value => value;
21
21
  const defaultSelected = [];
22
22
  const defaultSelectedOptionsLookup = {};
23
- export const Transfer = _ref => {
24
- let {
25
- options,
26
- onChange,
27
- addAllText,
28
- addIndividualText,
29
- className,
30
- dataTest = 'dhis2-uicore-transfer',
31
- disabled,
32
- enableOrderChange,
33
- filterCallback = defaultFilterCallback,
34
- filterCallbackPicked = defaultFilterCallback,
35
- filterLabel,
36
- filterLabelPicked,
37
- filterPlaceholder,
38
- filterPlaceholderPicked,
39
- filterable,
40
- filterablePicked,
41
- height = '240px',
42
- hideFilterInput,
43
- hideFilterInputPicked,
44
- initialSearchTerm = '',
45
- initialSearchTermPicked = '',
46
- selectedOptionsLookup = defaultSelectedOptionsLookup,
47
- leftFooter,
48
- leftHeader,
49
- loadingPicked,
50
- loading,
51
- maxSelections = Infinity,
52
- optionsWidth = '320px',
53
- removeAllText,
54
- removeIndividualText,
55
- renderOption = defaultRenderOption,
56
- rightFooter,
57
- rightHeader,
58
- searchTerm,
59
- searchTermPicked,
60
- selected = defaultSelected,
61
- selectedEmptyComponent,
62
- selectedWidth = '320px',
63
- sourceEmptyPlaceholder,
64
- onFilterChange,
65
- onFilterChangePicked,
66
- onEndReached,
67
- onEndReachedPicked
68
- } = _ref;
23
+ export const Transfer = ({
24
+ options,
25
+ onChange,
26
+ addAllText,
27
+ addIndividualText,
28
+ className,
29
+ dataTest = 'dhis2-uicore-transfer',
30
+ disabled,
31
+ enableOrderChange,
32
+ filterCallback = defaultFilterCallback,
33
+ filterCallbackPicked = defaultFilterCallback,
34
+ filterLabel,
35
+ filterLabelPicked,
36
+ filterPlaceholder,
37
+ filterPlaceholderPicked,
38
+ filterable,
39
+ filterablePicked,
40
+ height = '240px',
41
+ hideFilterInput,
42
+ hideFilterInputPicked,
43
+ initialSearchTerm = '',
44
+ initialSearchTermPicked = '',
45
+ selectedOptionsLookup = defaultSelectedOptionsLookup,
46
+ leftFooter,
47
+ leftHeader,
48
+ loadingPicked,
49
+ loading,
50
+ maxSelections = Infinity,
51
+ optionsWidth = '320px',
52
+ removeAllText,
53
+ removeIndividualText,
54
+ renderOption = defaultRenderOption,
55
+ rightFooter,
56
+ rightHeader,
57
+ searchTerm,
58
+ searchTermPicked,
59
+ selected = defaultSelected,
60
+ selectedEmptyComponent,
61
+ selectedWidth = '320px',
62
+ sourceEmptyPlaceholder,
63
+ onFilterChange,
64
+ onFilterChangePicked,
65
+ onEndReached,
66
+ onEndReachedPicked
67
+ }) => {
69
68
  /* Source options search value:
70
69
  * Depending on whether the onFilterChange callback has been provided
71
70
  * either the internal or external search value is used */
@@ -86,12 +85,9 @@ export const Transfer = _ref => {
86
85
  * Extract the not-selected options.
87
86
  * Filters options if filterable is true.
88
87
  */
89
- const sourceOptions = actualFilterCallback(options.filter(_ref2 => {
90
- let {
91
- value
92
- } = _ref2;
93
- return !selected.includes(value);
94
- }), actualFilter);
88
+ const sourceOptions = actualFilterCallback(options.filter(({
89
+ value
90
+ }) => !selected.includes(value)), actualFilter);
95
91
 
96
92
  /*
97
93
  * Picked options highlighting:
@@ -181,7 +177,7 @@ export const Transfer = _ref => {
181
177
  }
182
178
  reorderScrollTargetRef.current = null;
183
179
  const element = document.querySelector(`[data-test="${dataTest}-pickedoptions"] [data-value="${CSS.escape(target)}"]`);
184
- element === null || element === void 0 ? void 0 : element.scrollIntoView({
180
+ element === null || element === void 0 || element.scrollIntoView({
185
181
  block: 'nearest'
186
182
  });
187
183
  }, [selected, dataTest]);
@@ -189,27 +185,18 @@ export const Transfer = _ref => {
189
185
  /**
190
186
  * Disabled button states
191
187
  */
192
- const isAddAllDisabled = disabled || sourceOptions.filter(_ref3 => {
193
- let {
194
- disabled
195
- } = _ref3;
196
- return !disabled;
197
- }).length === 0;
188
+ const isAddAllDisabled = disabled || sourceOptions.filter(({
189
+ disabled
190
+ }) => !disabled).length === 0;
198
191
  const isAddIndividualDisabled = disabled || !highlightedSourceOptions.length;
199
192
  const isRemoveAllDisabled = disabled || !selected.length;
200
193
  const isRemoveIndividualDisabled = disabled || !highlightedPickedOptions.length;
201
- const allOptionsKey = useMemo(() => options.map(_ref4 => {
202
- let {
203
- value
204
- } = _ref4;
205
- return value;
206
- }).join('|'), [options]);
207
- const pickedOptionsKey = useMemo(() => pickedOptions.map(_ref5 => {
208
- let {
209
- value
210
- } = _ref5;
211
- return value;
212
- }).join('|'), [pickedOptions]);
194
+ const allOptionsKey = useMemo(() => options.map(({
195
+ value
196
+ }) => value).join('|'), [options]);
197
+ const pickedOptionsKey = useMemo(() => pickedOptions.map(({
198
+ value
199
+ }) => value).join('|'), [pickedOptions]);
213
200
  return /*#__PURE__*/React.createElement(Container, {
214
201
  dataTest: dataTest,
215
202
  className: className,
@@ -224,12 +211,9 @@ export const Transfer = _ref => {
224
211
  placeholder: filterPlaceholder,
225
212
  dataTest: `${dataTest}-filter`,
226
213
  filter: actualFilter,
227
- onChange: onFilterChange ? onFilterChange : _ref6 => {
228
- let {
229
- value
230
- } = _ref6;
231
- return setInternalFilter(value);
232
- }
214
+ onChange: onFilterChange ? onFilterChange : ({
215
+ value
216
+ }) => setInternalFilter(value)
233
217
  })), /*#__PURE__*/React.createElement(OptionsContainer, {
234
218
  allOptionsKey: allOptionsKey,
235
219
  dataTest: `${dataTest}-sourceoptions`,
@@ -299,12 +283,9 @@ export const Transfer = _ref => {
299
283
  placeholder: filterPlaceholderPicked,
300
284
  dataTest: `${dataTest}-filter`,
301
285
  filter: actualFilterPicked,
302
- onChange: onFilterChangePicked ? onFilterChangePicked : _ref7 => {
303
- let {
304
- value
305
- } = _ref7;
306
- return setInternalFilterPicked(value);
307
- }
286
+ onChange: onFilterChangePicked ? onFilterChangePicked : ({
287
+ value
288
+ }) => setInternalFilterPicked(value)
308
289
  })), /*#__PURE__*/React.createElement(OptionsContainer, {
309
290
  selected: true,
310
291
  allOptionsKey: pickedOptionsKey,