@dhis2-ui/transfer 9.10.3 → 9.11.1-beta.1
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.
- package/build/cjs/__e2e__/{add_remove-highlighted-options.stories.e2e.js → add_remove-highlighted-options.e2e.stories.js} +2 -13
- package/build/cjs/__e2e__/common/options.js +2 -3
- package/build/cjs/__e2e__/common/stateful-decorator.js +3 -8
- package/build/cjs/__e2e__/{disabled-transfer-buttons.stories.e2e.js → disabled-transfer-buttons.e2e.stories.js} +4 -20
- package/build/cjs/__e2e__/{disabled-transfer-options.stories.e2e.js → disabled-transfer-options.e2e.stories.js} +4 -12
- package/build/cjs/__e2e__/{display-order.stories.e2e.js → display-order.e2e.stories.js} +2 -13
- package/build/cjs/__e2e__/{filter-options-list.stories.e2e.js → filter-options-list.e2e.stories.js} +3 -24
- package/build/cjs/__e2e__/{highlight-range-of-options.stories.e2e.js → highlight-range-of-options.e2e.stories.js} +2 -15
- package/build/cjs/__e2e__/{loading_lists.stories.e2e.js → loading_lists.e2e.stories.js} +2 -16
- package/build/cjs/__e2e__/{notify_at_end_of_list.stories.e2e.js → notify_at_end_of_list.e2e.stories.js} +2 -17
- package/build/cjs/__e2e__/{reorder-with-buttons.stories.e2e.js → reorder-with-buttons.e2e.stories.js} +2 -11
- package/build/cjs/__e2e__/{set_unset-highlighted-option.stories.e2e.js → set_unset-highlighted-option.e2e.stories.js} +2 -13
- package/build/cjs/__e2e__/{transferring-items.stories.e2e.js → transferring-items.e2e.stories.js} +2 -13
- package/build/cjs/__tests__/common.test.js +0 -1
- package/build/cjs/__tests__/helper/add-all-selectable-source-options.test.js +0 -1
- package/build/cjs/__tests__/helper/add-individual-source-options.test.js +0 -1
- package/build/cjs/__tests__/helper/default-filter-callback.test.js +0 -1
- package/build/cjs/__tests__/helper/is-reorder-down-disabled.test.js +0 -1
- package/build/cjs/__tests__/helper/is-reorder-up-disabled.test.js +0 -1
- package/build/cjs/__tests__/helper/move-highlighted-picked-option-down.test.js +0 -1
- package/build/cjs/__tests__/helper/move-highlighted-picked-option-up.test.js +0 -1
- package/build/cjs/__tests__/helper/remove-all-picked-options.test.js +0 -1
- package/build/cjs/__tests__/helper/remove-individual-picked-options.test.js +0 -1
- package/build/cjs/__tests__/helper/use-highlighted-option/create-toggle-highlighted-option.test.js +2 -9
- package/build/cjs/__tests__/helper/use-highlighted-option/toggle-add.test.js +0 -1
- package/build/cjs/__tests__/helper/use-highlighted-option/toggle-range.test.js +2 -3
- package/build/cjs/__tests__/helper/use-highlighted-option/toggle-replace.test.js +0 -1
- package/build/cjs/__tests__/helper/use-highlighted-option.test.js +1 -5
- package/build/cjs/__tests__/transfer.test.js +1 -5
- package/build/cjs/actions.js +2 -9
- package/build/cjs/add-all.js +2 -9
- package/build/cjs/add-individual.js +2 -9
- package/build/cjs/common/find-option-index.js +0 -3
- package/build/cjs/common/get-mode-by-modifier-key.js +2 -8
- package/build/cjs/common/index.js +0 -6
- package/build/cjs/common/is-option.js +0 -2
- package/build/cjs/common/modes.js +6 -9
- package/build/cjs/common/remove-option.js +0 -6
- package/build/cjs/common/styles.js +3 -8
- package/build/cjs/common/toggle-value.js +0 -4
- package/build/cjs/container.js +2 -8
- package/build/cjs/end-intersection-detector.js +1 -8
- package/build/cjs/features/add_remove-highlighted-options/index.js +0 -1
- package/build/cjs/features/common/index.js +0 -2
- package/build/cjs/features/disabled-transfer-buttons/index.js +0 -1
- package/build/cjs/features/disabled-transfer-options/index.js +0 -2
- package/build/cjs/features/display-order/index.js +6 -5
- package/build/cjs/features/filter-options-list/index.js +6 -8
- package/build/cjs/features/highlight-range-of-options/index.js +8 -5
- package/build/cjs/features/loading_lists/index.js +2 -3
- package/build/cjs/features/notify_at_end_of_list/index.js +1 -2
- package/build/cjs/features/reorder-with-buttons/index.js +3 -3
- package/build/cjs/features/set_unset-highlighted-option/index.js +0 -2
- package/build/cjs/features/transferring-items/index.js +6 -6
- package/build/cjs/filter.js +5 -14
- package/build/cjs/icons.js +17 -35
- package/build/cjs/index.js +0 -2
- package/build/cjs/left-footer.js +2 -10
- package/build/cjs/left-header.js +2 -10
- package/build/cjs/left-side.js +2 -9
- package/build/cjs/options-container.js +9 -20
- package/build/cjs/picked-options.js +2 -10
- package/build/cjs/remove-all.js +2 -9
- package/build/cjs/remove-individual.js +2 -9
- package/build/cjs/reordering-actions.js +7 -16
- package/build/cjs/right-footer.js +2 -10
- package/build/cjs/right-header.js +2 -10
- package/build/cjs/right-side.js +2 -9
- package/build/cjs/source-options.js +2 -10
- package/build/cjs/transfer/add-all-selectable-source-options.js +3 -4
- package/build/cjs/transfer/add-individual-source-options.js +1 -4
- package/build/cjs/transfer/create-double-click-handlers.js +0 -5
- package/build/cjs/transfer/default-filter-callback.js +0 -2
- package/build/cjs/transfer/get-option-click-handlers.js +0 -3
- package/build/cjs/transfer/index.js +0 -26
- package/build/cjs/transfer/is-reorder-down-disabled.js +4 -4
- package/build/cjs/transfer/is-reorder-up-disabled.js +4 -4
- package/build/cjs/transfer/move-highlighted-picked-option-down.js +4 -5
- package/build/cjs/transfer/move-highlighted-picked-option-up.js +4 -5
- package/build/cjs/transfer/remove-all-picked-options.js +0 -2
- package/build/cjs/transfer/remove-individual-picked-options.js +1 -4
- package/build/cjs/transfer/use-filter.js +0 -4
- package/build/cjs/transfer/use-highlighted-options/create-toggle-highlighted-option.js +2 -12
- package/build/cjs/transfer/use-highlighted-options/toggle-add.js +0 -3
- package/build/cjs/transfer/use-highlighted-options/toggle-range.js +3 -8
- package/build/cjs/transfer/use-highlighted-options/toggle-replace.js +0 -4
- package/build/cjs/transfer/use-highlighted-options.js +0 -5
- package/build/cjs/transfer-option.js +4 -16
- package/build/cjs/transfer.js +29 -54
- package/build/cjs/{transfer.stories.js → transfer.prod.stories.js} +83 -103
- package/build/cjs/use-resize-counter.js +0 -4
- package/build/es/__e2e__/common/stateful-decorator.js +1 -2
- package/build/es/__e2e__/{disabled-transfer-buttons.stories.e2e.js → disabled-transfer-buttons.e2e.stories.js} +2 -1
- package/build/es/__e2e__/{disabled-transfer-options.stories.e2e.js → disabled-transfer-options.e2e.stories.js} +2 -1
- package/build/es/__e2e__/{filter-options-list.stories.e2e.js → filter-options-list.e2e.stories.js} +1 -3
- package/build/es/__tests__/helper/use-highlighted-option/create-toggle-highlighted-option.test.js +2 -1
- package/build/es/__tests__/helper/use-highlighted-option/toggle-range.test.js +2 -2
- package/build/es/__tests__/helper/use-highlighted-option.test.js +1 -1
- package/build/es/actions.js +1 -1
- package/build/es/add-all.js +1 -1
- package/build/es/add-individual.js +1 -1
- package/build/es/common/find-option-index.js +1 -1
- package/build/es/common/get-mode-by-modifier-key.js +3 -6
- package/build/es/common/modes.js +5 -4
- package/build/es/common/remove-option.js +1 -4
- package/build/es/common/toggle-value.js +0 -2
- package/build/es/container.js +1 -1
- package/build/es/features/display-order/index.js +6 -3
- package/build/es/features/filter-options-list/index.js +6 -6
- package/build/es/features/highlight-range-of-options/index.js +8 -3
- package/build/es/features/loading_lists/index.js +2 -2
- package/build/es/features/notify_at_end_of_list/index.js +1 -1
- package/build/es/features/reorder-with-buttons/index.js +3 -2
- package/build/es/features/transferring-items/index.js +6 -3
- package/build/es/filter.js +4 -4
- package/build/es/icons.js +16 -16
- package/build/es/left-footer.js +1 -1
- package/build/es/left-header.js +1 -1
- package/build/es/left-side.js +1 -1
- package/build/es/options-container.js +6 -5
- package/build/es/picked-options.js +1 -1
- package/build/es/remove-all.js +1 -1
- package/build/es/remove-individual.js +1 -1
- package/build/es/reordering-actions.js +6 -6
- package/build/es/right-footer.js +1 -1
- package/build/es/right-header.js +1 -1
- package/build/es/right-side.js +1 -1
- package/build/es/source-options.js +1 -1
- package/build/es/transfer/add-all-selectable-source-options.js +3 -2
- package/build/es/transfer/add-individual-source-options.js +1 -2
- package/build/es/transfer/create-double-click-handlers.js +0 -3
- package/build/es/transfer/get-option-click-handlers.js +1 -1
- package/build/es/transfer/is-reorder-down-disabled.js +4 -2
- package/build/es/transfer/is-reorder-up-disabled.js +4 -2
- package/build/es/transfer/move-highlighted-picked-option-down.js +4 -3
- package/build/es/transfer/move-highlighted-picked-option-up.js +4 -3
- package/build/es/transfer/remove-individual-picked-options.js +1 -2
- package/build/es/transfer/use-filter.js +0 -2
- package/build/es/transfer/use-highlighted-options/create-toggle-highlighted-option.js +3 -7
- package/build/es/transfer/use-highlighted-options/toggle-add.js +1 -1
- package/build/es/transfer/use-highlighted-options/toggle-range.js +4 -6
- package/build/es/transfer/use-highlighted-options/toggle-replace.js +0 -2
- package/build/es/transfer/use-highlighted-options.js +1 -2
- package/build/es/transfer-option.js +1 -2
- package/build/es/transfer.js +28 -32
- package/build/es/{transfer.stories.js → transfer.prod.stories.js} +65 -50
- package/build/es/use-resize-counter.js +1 -2
- package/package.json +10 -10
- /package/build/es/__e2e__/{add_remove-highlighted-options.stories.e2e.js → add_remove-highlighted-options.e2e.stories.js} +0 -0
- /package/build/es/__e2e__/{display-order.stories.e2e.js → display-order.e2e.stories.js} +0 -0
- /package/build/es/__e2e__/{highlight-range-of-options.stories.e2e.js → highlight-range-of-options.e2e.stories.js} +0 -0
- /package/build/es/__e2e__/{loading_lists.stories.e2e.js → loading_lists.e2e.stories.js} +0 -0
- /package/build/es/__e2e__/{notify_at_end_of_list.stories.e2e.js → notify_at_end_of_list.e2e.stories.js} +0 -0
- /package/build/es/__e2e__/{reorder-with-buttons.stories.e2e.js → reorder-with-buttons.e2e.stories.js} +0 -0
- /package/build/es/__e2e__/{set_unset-highlighted-option.stories.e2e.js → set_unset-highlighted-option.e2e.stories.js} +0 -0
- /package/build/es/__e2e__/{transferring-items.stories.e2e.js → transferring-items.e2e.stories.js} +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign
|
|
2
|
-
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
2
|
import { SingleSelectField, SingleSelectOption } from '@dhis2-ui/select';
|
|
4
3
|
import { Tab, TabBar } from '@dhis2-ui/tab';
|
|
5
4
|
import PropTypes from 'prop-types';
|
|
@@ -7,7 +6,37 @@ import React, { useEffect, useState } from 'react';
|
|
|
7
6
|
import { TransferOption } from './transfer-option.js';
|
|
8
7
|
import { Transfer } from './transfer.js';
|
|
9
8
|
const subtitle = 'Allows users to select options from a list';
|
|
10
|
-
const description =
|
|
9
|
+
const description = `
|
|
10
|
+
#### Usage
|
|
11
|
+
|
|
12
|
+
Use a transfer component wherever a user needs to make a complex selection. Simple selections can be achieved with checkboxes, radio buttons or a select.
|
|
13
|
+
|
|
14
|
+
There are use-cases that are particularly suitable for a transfer component:
|
|
15
|
+
|
|
16
|
+
- when a user needs to select some options from several different groups at the same time
|
|
17
|
+
- if the selection needs to have a defined order
|
|
18
|
+
- when the user will be interacting with and editing the selection often
|
|
19
|
+
- if a user needs to easily compare non-selected and selected options
|
|
20
|
+
- if a user is making selections as part of a complex flow, especially where there are many options to choose from
|
|
21
|
+
|
|
22
|
+
#### Terminology
|
|
23
|
+
|
|
24
|
+
This component has to differentiate between different types of options,
|
|
25
|
+
here's an explanation of their meaning:
|
|
26
|
+
|
|
27
|
+
- source options: These are options listed on the left and are available for selection
|
|
28
|
+
- picked options: These options have been selected by the user and are on the right side
|
|
29
|
+
- highlighted option: These are visually highlighted options than can be on either side and are ready for transferral with the action buttons to the other side
|
|
30
|
+
- filtered options: These are the displayed source options filtered by a search term or a custom search algorithm. The api surface uses "selected" for "picked" to be consistent with the rest of the library
|
|
31
|
+
|
|
32
|
+
#### More details
|
|
33
|
+
|
|
34
|
+
See more about the options available for Transfers at [Design System: Transfer](https://github.com/dhis2/design-system/blob/master/organisms/transfer.md#transfer).
|
|
35
|
+
|
|
36
|
+
\`\`\`js
|
|
37
|
+
import { Transfer, TransferOption } from '@dhis2/ui'
|
|
38
|
+
\`\`\`
|
|
39
|
+
`;
|
|
11
40
|
const options = [{
|
|
12
41
|
label: 'ANC 1st visit',
|
|
13
42
|
value: 'anc_1st_visit'
|
|
@@ -75,6 +104,7 @@ const options = [{
|
|
|
75
104
|
label: 'ART entry point: No PMTCT',
|
|
76
105
|
value: 'art_entry_point:_no_pmtct'
|
|
77
106
|
}];
|
|
107
|
+
|
|
78
108
|
/**
|
|
79
109
|
* Default args are needed because storybook currently struggles with
|
|
80
110
|
* functions as default props: they are sent to the component as strings when
|
|
@@ -83,7 +113,6 @@ const options = [{
|
|
|
83
113
|
*
|
|
84
114
|
* https://github.com/storybookjs/storybook/issues/12455#issuecomment-702763930
|
|
85
115
|
*/
|
|
86
|
-
|
|
87
116
|
export default {
|
|
88
117
|
title: 'Transfer',
|
|
89
118
|
component: Transfer,
|
|
@@ -99,26 +128,23 @@ export default {
|
|
|
99
128
|
}
|
|
100
129
|
},
|
|
101
130
|
// Default args:
|
|
102
|
-
args: {
|
|
131
|
+
args: {
|
|
132
|
+
...Transfer.defaultProps,
|
|
103
133
|
options: options
|
|
104
134
|
}
|
|
105
135
|
};
|
|
106
|
-
|
|
107
136
|
const StatefulTemplate = _ref => {
|
|
108
137
|
let {
|
|
109
138
|
initiallySelected,
|
|
110
139
|
...args
|
|
111
140
|
} = _ref;
|
|
112
141
|
const [selected, setSelected] = useState(initiallySelected);
|
|
113
|
-
|
|
114
142
|
const onChange = payload => setSelected(payload.selected);
|
|
115
|
-
|
|
116
143
|
return /*#__PURE__*/React.createElement(Transfer, _extends({}, args, {
|
|
117
144
|
selected: selected,
|
|
118
145
|
onChange: onChange
|
|
119
146
|
}));
|
|
120
147
|
};
|
|
121
|
-
|
|
122
148
|
StatefulTemplate.defaultProps = {
|
|
123
149
|
initiallySelected: []
|
|
124
150
|
};
|
|
@@ -171,7 +197,6 @@ FilteredPlaceholder.args = {
|
|
|
171
197
|
filterLabel: 'Filter with placeholder',
|
|
172
198
|
filterPlaceholder: 'Search'
|
|
173
199
|
};
|
|
174
|
-
|
|
175
200
|
const renderOption = _ref3 => {
|
|
176
201
|
let {
|
|
177
202
|
label,
|
|
@@ -191,24 +216,29 @@ const renderOption = _ref3 => {
|
|
|
191
216
|
}
|
|
192
217
|
}, "Custom: ", label, " (label), ", value, " (value)");
|
|
193
218
|
};
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
219
|
+
const RenderOptionCode = () => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("strong", null, "Custom option code:"), /*#__PURE__*/React.createElement("code", null, /*#__PURE__*/React.createElement("pre", null, `const renderOption = ({ label, value, onClick, highlighted, selected }) => (
|
|
220
|
+
<p
|
|
221
|
+
onClick={event => onClick({ label, value }, event)}
|
|
222
|
+
style={{
|
|
223
|
+
background: highlighted ? 'green' : 'blue',
|
|
224
|
+
color: selected ? 'orange' : 'white',
|
|
225
|
+
}}
|
|
226
|
+
>
|
|
227
|
+
Custom: {label} (label), {value} (value)
|
|
228
|
+
</p>
|
|
229
|
+
)`)));
|
|
197
230
|
const StatefulTemplateCustomRenderOption = _ref4 => {
|
|
198
231
|
let {
|
|
199
232
|
initiallySelected,
|
|
200
233
|
...args
|
|
201
234
|
} = _ref4;
|
|
202
235
|
const [selected, setSelected] = useState(initiallySelected);
|
|
203
|
-
|
|
204
236
|
const onChange = payload => setSelected(payload.selected);
|
|
205
|
-
|
|
206
237
|
return /*#__PURE__*/React.createElement(Transfer, _extends({}, args, {
|
|
207
238
|
selected: selected,
|
|
208
239
|
onChange: onChange
|
|
209
240
|
}));
|
|
210
241
|
};
|
|
211
|
-
|
|
212
242
|
StatefulTemplateCustomRenderOption.defaultProps = {
|
|
213
243
|
initiallySelected: []
|
|
214
244
|
};
|
|
@@ -236,7 +266,6 @@ IndividualCustomOption.args = {
|
|
|
236
266
|
if (option.value === options[0].value) {
|
|
237
267
|
return renderOption(option);
|
|
238
268
|
}
|
|
239
|
-
|
|
240
269
|
return /*#__PURE__*/React.createElement(TransferOption, option);
|
|
241
270
|
}
|
|
242
271
|
};
|
|
@@ -291,18 +320,18 @@ DifferentWidths.args = {
|
|
|
291
320
|
optionsWidth: '500px',
|
|
292
321
|
selectedWidth: '240px'
|
|
293
322
|
};
|
|
294
|
-
|
|
295
323
|
const createCustomFilteringInHeader = hideFilterInput => {
|
|
296
|
-
const relativePeriods = options.slice(0, 10).map((option, index) => ({
|
|
324
|
+
const relativePeriods = options.slice(0, 10).map((option, index) => ({
|
|
325
|
+
...option,
|
|
297
326
|
relativePeriod: true,
|
|
298
327
|
year: index < 5 ? '2020' : '2019'
|
|
299
328
|
}));
|
|
300
|
-
const fixedPeriods = options.slice(10, 20).map((option, index) => ({
|
|
329
|
+
const fixedPeriods = options.slice(10, 20).map((option, index) => ({
|
|
330
|
+
...option,
|
|
301
331
|
relativePeriod: false,
|
|
302
332
|
year: index < 5 ? '2020' : '2019'
|
|
303
333
|
}));
|
|
304
334
|
const allOptions = [...relativePeriods, ...fixedPeriods];
|
|
305
|
-
|
|
306
335
|
const Header = _ref7 => {
|
|
307
336
|
let {
|
|
308
337
|
onClick,
|
|
@@ -339,20 +368,16 @@ const createCustomFilteringInHeader = hideFilterInput => {
|
|
|
339
368
|
};
|
|
340
369
|
/* eslint-enable react/prop-types */
|
|
341
370
|
|
|
342
|
-
|
|
343
371
|
const CustomTransfer = props => {
|
|
344
372
|
const [filter, setFilter] = useState('');
|
|
345
373
|
const [relativePeriod, setRelativePeriod] = useState(true);
|
|
346
374
|
const [year, setYear] = useState('2020');
|
|
347
|
-
|
|
348
375
|
const filterCallback = (options, filter) => {
|
|
349
376
|
const optionsWithYear = options.filter(option => option.year === year);
|
|
350
377
|
const optionsWithPeriod = optionsWithYear.filter(option => option.relativePeriod === relativePeriod);
|
|
351
|
-
|
|
352
378
|
if (filter === '') {
|
|
353
379
|
return optionsWithPeriod;
|
|
354
380
|
}
|
|
355
|
-
|
|
356
381
|
return optionsWithPeriod.filter(_ref8 => {
|
|
357
382
|
let {
|
|
358
383
|
label
|
|
@@ -360,7 +385,6 @@ const createCustomFilteringInHeader = hideFilterInput => {
|
|
|
360
385
|
return label.indexOf(filter) !== -1;
|
|
361
386
|
});
|
|
362
387
|
};
|
|
363
|
-
|
|
364
388
|
const header = /*#__PURE__*/React.createElement(Header, {
|
|
365
389
|
relativePeriod: relativePeriod,
|
|
366
390
|
selectedYear: year,
|
|
@@ -396,67 +420,62 @@ const createCustomFilteringInHeader = hideFilterInput => {
|
|
|
396
420
|
filterPlaceholder: "Search"
|
|
397
421
|
}));
|
|
398
422
|
};
|
|
399
|
-
|
|
400
423
|
return _ref12 => {
|
|
401
424
|
let {
|
|
402
425
|
initiallySelected,
|
|
403
426
|
...args
|
|
404
427
|
} = _ref12;
|
|
405
428
|
const [selected, setSelected] = useState(initiallySelected);
|
|
406
|
-
|
|
407
429
|
const onChange = payload => setSelected(payload.selected);
|
|
408
|
-
|
|
409
430
|
return /*#__PURE__*/React.createElement(CustomTransfer, _extends({}, args, {
|
|
410
431
|
selected: selected,
|
|
411
432
|
onChange: onChange
|
|
412
433
|
}));
|
|
413
434
|
};
|
|
414
435
|
};
|
|
415
|
-
|
|
416
436
|
export const CustomFilteringWithFilterInput = createCustomFilteringInHeader(false);
|
|
417
437
|
export const CustomFilteringWithoutFilterInput = createCustomFilteringInHeader(true);
|
|
418
438
|
const optionsPool = options;
|
|
419
439
|
const pageSize = 5;
|
|
440
|
+
|
|
420
441
|
/*
|
|
421
442
|
* The page size is: 5
|
|
422
443
|
* To keep the code as small as possible, handling selecting items is not
|
|
423
444
|
included
|
|
424
445
|
*/
|
|
425
|
-
|
|
426
446
|
export const InfiniteLoading = args => {
|
|
427
447
|
useEffect(() => {
|
|
428
448
|
console.clear();
|
|
429
|
-
}, []);
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
449
|
+
}, []);
|
|
450
|
+
|
|
451
|
+
// state for whether the next page's options are being loaded
|
|
452
|
+
const [loading, setLoading] = useState(false);
|
|
453
|
+
// captures the current page
|
|
454
|
+
const [page, setPage] = useState(0);
|
|
455
|
+
// all options (incl. available AND selected options)
|
|
456
|
+
const [options, setOptions] = useState([]);
|
|
457
|
+
// selected options
|
|
458
|
+
const [selected] = useState(
|
|
459
|
+
// second page is already selected
|
|
438
460
|
optionsPool.slice(pageSize, pageSize * 2).map(_ref13 => {
|
|
439
461
|
let {
|
|
440
462
|
value
|
|
441
463
|
} = _ref13;
|
|
442
464
|
return value;
|
|
443
465
|
}));
|
|
444
|
-
|
|
445
466
|
const onEndReached = () => {
|
|
446
467
|
// do nothing when loading already
|
|
447
468
|
if (loading) {
|
|
448
469
|
return;
|
|
449
470
|
}
|
|
450
|
-
|
|
451
471
|
setPage(page + 1);
|
|
452
|
-
};
|
|
453
|
-
|
|
472
|
+
};
|
|
454
473
|
|
|
474
|
+
// fake fetch request
|
|
455
475
|
const fetchOptions = nextPage => new Promise(resolve => setTimeout(() => {
|
|
456
476
|
const nextOptions = optionsPool.slice(options.length, nextPage * pageSize);
|
|
457
477
|
resolve(nextOptions);
|
|
458
478
|
}, 2000));
|
|
459
|
-
|
|
460
479
|
const loadNextOptions = async () => {
|
|
461
480
|
setLoading(true);
|
|
462
481
|
const nextOptions = await fetchOptions(page);
|
|
@@ -468,12 +487,10 @@ export const InfiniteLoading = args => {
|
|
|
468
487
|
} = nextOption;
|
|
469
488
|
return selected.includes(value);
|
|
470
489
|
});
|
|
471
|
-
|
|
472
490
|
if (allAlreadySelected) {
|
|
473
491
|
onEndReached();
|
|
474
492
|
}
|
|
475
493
|
};
|
|
476
|
-
|
|
477
494
|
useEffect(() => {
|
|
478
495
|
// prevent initial call
|
|
479
496
|
if (page > 0) {
|
|
@@ -484,9 +501,7 @@ export const InfiniteLoading = args => {
|
|
|
484
501
|
loading: loading,
|
|
485
502
|
options: options,
|
|
486
503
|
selected: selected,
|
|
487
|
-
onChange: () => null
|
|
488
|
-
/* noop */
|
|
489
|
-
,
|
|
504
|
+
onChange: () => null /* noop */,
|
|
490
505
|
onEndReached: onEndReached
|
|
491
506
|
}));
|
|
492
507
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
|
+
|
|
2
3
|
/*
|
|
3
4
|
* The initial call is irrelevant as there has been
|
|
4
5
|
* no resize yet that we want to react to
|
|
@@ -7,7 +8,6 @@ import { useEffect, useState } from 'react';
|
|
|
7
8
|
* @param {Element} element
|
|
8
9
|
* @returns {number}
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
11
|
export const useResizeCounter = element => {
|
|
12
12
|
const [counter, setCounter] = useState(-1);
|
|
13
13
|
useEffect(() => {
|
|
@@ -17,7 +17,6 @@ export const useResizeCounter = element => {
|
|
|
17
17
|
// it's executed as the callback passed to `ResizeObserver`
|
|
18
18
|
// will be executed on construction
|
|
19
19
|
let internalCounter = counter;
|
|
20
|
-
|
|
21
20
|
if (element) {
|
|
22
21
|
const observer = new ResizeObserver(() => {
|
|
23
22
|
++internalCounter;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhis2-ui/transfer",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.11.1-beta.1",
|
|
4
4
|
"description": "UI Transfer",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,23 +22,23 @@
|
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
24
|
"scripts": {
|
|
25
|
-
"start": "
|
|
25
|
+
"start": "storybook dev -c ../../storybook/config --port 5000",
|
|
26
26
|
"build": "d2-app-scripts build",
|
|
27
27
|
"test": "d2-app-scripts test --jestConfig ../../jest.config.shared.js"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"react": "^16.
|
|
31
|
-
"react-dom": "^16.
|
|
30
|
+
"react": "^16.13",
|
|
31
|
+
"react-dom": "^16.13",
|
|
32
32
|
"styled-jsx": "^4"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@dhis2/prop-types": "^3.1.2",
|
|
36
|
-
"@dhis2-ui/button": "9.
|
|
37
|
-
"@dhis2-ui/field": "9.
|
|
38
|
-
"@dhis2-ui/input": "9.
|
|
39
|
-
"@dhis2-ui/intersection-detector": "9.
|
|
40
|
-
"@dhis2-ui/loader": "9.
|
|
41
|
-
"@dhis2/ui-constants": "9.
|
|
36
|
+
"@dhis2-ui/button": "9.11.1-beta.1",
|
|
37
|
+
"@dhis2-ui/field": "9.11.1-beta.1",
|
|
38
|
+
"@dhis2-ui/input": "9.11.1-beta.1",
|
|
39
|
+
"@dhis2-ui/intersection-detector": "9.11.1-beta.1",
|
|
40
|
+
"@dhis2-ui/loader": "9.11.1-beta.1",
|
|
41
|
+
"@dhis2/ui-constants": "9.11.1-beta.1",
|
|
42
42
|
"classnames": "^2.3.1",
|
|
43
43
|
"prop-types": "^15.7.2"
|
|
44
44
|
},
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/build/es/__e2e__/{transferring-items.stories.e2e.js → transferring-items.e2e.stories.js}
RENAMED
|
File without changes
|