@procore/core-react 11.6.0-rc.14 → 11.6.0-rc.15
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/dist/NumberInput/NumberInput.utils.js +3 -6
- package/dist/NumberInput/NumberInput.utils.js.map +1 -1
- package/dist/SuperSelect/SuperSelect.constants.d.ts +2 -0
- package/dist/SuperSelect/SuperSelect.constants.js +3 -0
- package/dist/SuperSelect/SuperSelect.constants.js.map +1 -0
- package/dist/SuperSelect/SuperSelect.d.ts +3 -15
- package/dist/SuperSelect/SuperSelect.js +77 -21
- package/dist/SuperSelect/SuperSelect.js.map +1 -1
- package/dist/SuperSelect/SuperSelect.styles.d.ts +19 -0
- package/dist/SuperSelect/SuperSelect.styles.js +22 -2
- package/dist/SuperSelect/SuperSelect.styles.js.map +1 -1
- package/dist/SuperSelect/SuperSelect.types.d.ts +54 -40
- package/dist/SuperSelect/SuperSelect.types.js +1 -1
- package/dist/SuperSelect/SuperSelect.types.js.map +1 -1
- package/dist/SuperSelect/SuperSelect.utils.d.ts +28 -0
- package/dist/SuperSelect/SuperSelect.utils.js +156 -0
- package/dist/SuperSelect/SuperSelect.utils.js.map +1 -0
- package/dist/SuperSelect/SuperSelectDraggableOptions.d.ts +18 -0
- package/dist/SuperSelect/SuperSelectDraggableOptions.js +61 -0
- package/dist/SuperSelect/SuperSelectDraggableOptions.js.map +1 -0
- package/dist/SuperSelect/useSuperSelect.d.ts +6 -20
- package/dist/SuperSelect/useSuperSelect.js +144 -65
- package/dist/SuperSelect/useSuperSelect.js.map +1 -1
- package/dist/SuperSelect/useVirtuosoResizeErrorFix.d.ts +1 -0
- package/dist/SuperSelect/useVirtuosoResizeErrorFix.js +21 -0
- package/dist/SuperSelect/useVirtuosoResizeErrorFix.js.map +1 -0
- package/dist/_typedoc/Avatar/Avatar.types.json +17 -17
- package/dist/_typedoc/AvatarStack/AvatarStack.types.json +22 -22
- package/dist/_typedoc/Badge/Badge.types.json +6 -6
- package/dist/_typedoc/Banner/Banner.types.json +12 -12
- package/dist/_typedoc/Box/Box.types.json +68 -68
- package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
- package/dist/_typedoc/Button/Button.types.json +11 -11
- package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
- package/dist/_typedoc/Card/Card.types.json +6 -6
- package/dist/_typedoc/Checkbox/Checkbox.types.json +7 -7
- package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
- package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
- package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
- package/dist/_typedoc/DetailPage/DetailPage.types.json +4 -4
- package/dist/_typedoc/Dropdown/Dropdown.types.json +36 -36
- package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +29 -29
- package/dist/_typedoc/Dropzone/Dropzone.types.json +41 -41
- package/dist/_typedoc/EmptyState/EmptyState.types.json +14 -14
- package/dist/_typedoc/FileList/FileList.types.json +9 -9
- package/dist/_typedoc/FileSelect/FileSelect.types.json +26 -26
- package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
- package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
- package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
- package/dist/_typedoc/Flex/Flex.types.json +27 -27
- package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
- package/dist/_typedoc/Form/Form.types.json +694 -694
- package/dist/_typedoc/Grid/Grid.types.json +8 -8
- package/dist/_typedoc/GroupSelect/GroupSelect.types.json +52 -52
- package/dist/_typedoc/Input/Input.types.json +2 -2
- package/dist/_typedoc/Link/Link.types.json +4 -4
- package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
- package/dist/_typedoc/Menu/Menu.types.json +62 -62
- package/dist/_typedoc/MenuImperative/MenuImperative.types.json +71 -71
- package/dist/_typedoc/Modal/Modal.types.json +27 -27
- package/dist/_typedoc/MultiSelect/MultiSelect.types.json +31 -31
- package/dist/_typedoc/Notation/Notation.types.json +4 -4
- package/dist/_typedoc/NumberInput/NumberInput.types.json +43 -43
- package/dist/_typedoc/PageLayout/PageLayout.types.json +7 -7
- package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
- package/dist/_typedoc/Panel/Panel.types.json +27 -27
- package/dist/_typedoc/Pill/Pill.types.json +1 -1
- package/dist/_typedoc/PillSelect/PillSelect.types.json +46 -46
- package/dist/_typedoc/Popover/Popover.types.json +10 -10
- package/dist/_typedoc/ProgressBar/ProgressBar.types.json +5 -5
- package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
- package/dist/_typedoc/Required/Required.types.json +5 -5
- package/dist/_typedoc/Search/Search.types.json +18 -18
- package/dist/_typedoc/Section/Section.types.json +14 -14
- package/dist/_typedoc/SegmentedController/SegmentedController.types.json +20 -20
- package/dist/_typedoc/Select/Select.types.json +31 -31
- package/dist/_typedoc/Slider/Slider.types.json +6 -6
- package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
- package/dist/_typedoc/Switch/Switch.types.json +3 -3
- package/dist/_typedoc/Table/Table.types.json +94 -94
- package/dist/_typedoc/Tabs/Tabs.types.json +15 -15
- package/dist/_typedoc/Tearsheet/Tearsheet.types.json +10 -10
- package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
- package/dist/_typedoc/TextEditor/TextEditor.types.json +7 -7
- package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +3 -3
- package/dist/_typedoc/Thumbnail/Thumbnail.types.json +25 -25
- package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +42 -42
- package/dist/_typedoc/TieredSelect/TieredSelect.types.json +28 -28
- package/dist/_typedoc/Tile/Tile.types.json +30 -30
- package/dist/_typedoc/Toast/Toast.types.json +4 -4
- package/dist/_typedoc/ToggleButton/ToggleButton.types.json +3 -3
- package/dist/_typedoc/Token/Token.types.json +4 -4
- package/dist/_typedoc/ToolHeader/ToolHeader.types.json +8 -8
- package/dist/_typedoc/Tooltip/Tooltip.types.json +13 -13
- package/dist/_typedoc/Tree/Tree.types.json +86 -86
- package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
- package/dist/_typedoc/Typography/Typography.types.json +8 -8
- package/dist/_typedoc/_utils/types.json +3 -3
- package/package.json +3 -3
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SuperSelectConfig, SuperSelectOptgroup, SuperSelectOption } from './SuperSelect.types';
|
|
2
|
+
export declare const getGroupNameIsValid: (groupName: unknown) => boolean;
|
|
3
|
+
export declare const getOptionsSortingAlgorithm: ({ getOptionIsBatch, getOptionLabel, }: {
|
|
4
|
+
getOptionIsBatch: NonNullable<SuperSelectConfig['getOptionIsBatch']>;
|
|
5
|
+
getOptionLabel: NonNullable<SuperSelectConfig['getOptionLabel']>;
|
|
6
|
+
}) => (a: SuperSelectOption, b: SuperSelectOption) => number;
|
|
7
|
+
export declare const getBatchOptionFormatter: ({ value, multiple, getOptionIsBatch, getOptionValue, }: {
|
|
8
|
+
value: SuperSelectConfig['value'];
|
|
9
|
+
multiple: NonNullable<SuperSelectConfig['multiple']>;
|
|
10
|
+
getOptionIsBatch: NonNullable<SuperSelectConfig['getOptionIsBatch']>;
|
|
11
|
+
getOptionValue: NonNullable<SuperSelectConfig['getOptionValue']>;
|
|
12
|
+
}) => (option: SuperSelectOption) => any;
|
|
13
|
+
export declare const RESERVED_UNGROUPED_OPTGROUP_NAME = "RESERVED_UNGROUPED_OPTGROUP_NAME";
|
|
14
|
+
export declare const collectGroupsInOrderOfOccurrence: (opts: SuperSelectOption[], getOptionGroup: NonNullable<SuperSelectConfig['getOptionGroup']>) => {
|
|
15
|
+
groups: string[];
|
|
16
|
+
groupedOptions: Record<string, SuperSelectOption[]>;
|
|
17
|
+
};
|
|
18
|
+
export declare function reorder(options: SuperSelectOption[], startIndex: number, endIndex: number, getOptionGroup: (opt: SuperSelectOption) => string): {
|
|
19
|
+
nextOptions: any[];
|
|
20
|
+
prevGroup: string;
|
|
21
|
+
nextGroup: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function isMultiple<T>(multiple: boolean, value: T | T[]): value is T[];
|
|
24
|
+
export declare const getOptionIsOptgroup: (item: SuperSelectOption) => boolean;
|
|
25
|
+
export declare const getOptgroupHeader: (groupName: string) => SuperSelectOptgroup;
|
|
26
|
+
export declare const sortOptgroups: (groupA: string, groupB: string) => number;
|
|
27
|
+
export declare function getIsAllOptionsUngrouped(groups: string[]): boolean;
|
|
28
|
+
export declare function getOptgroup(groupName: string, groupOptions: SuperSelectOption[]): any[];
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
+
if (ar || !(i in from)) {
|
|
15
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
+
ar[i] = from[i];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
+
};
|
|
21
|
+
import { optgroupSymbol } from './SuperSelect.constants';
|
|
22
|
+
export var getGroupNameIsValid = function (groupName) {
|
|
23
|
+
var isGroupDefined = ![undefined, null, ''].includes(groupName);
|
|
24
|
+
return isGroupDefined && typeof groupName === 'string' && groupName.length > 0;
|
|
25
|
+
};
|
|
26
|
+
export var getOptionsSortingAlgorithm = function (_a) {
|
|
27
|
+
var getOptionIsBatch = _a.getOptionIsBatch, getOptionLabel = _a.getOptionLabel;
|
|
28
|
+
return function (a, b) {
|
|
29
|
+
var isOptionBatch1 = getOptionIsBatch(a);
|
|
30
|
+
var isOptionBatch2 = getOptionIsBatch(b);
|
|
31
|
+
// move batched options up
|
|
32
|
+
if (isOptionBatch1 && isOptionBatch2) {
|
|
33
|
+
return compareStrings(getOptionLabel(a), getOptionLabel(b));
|
|
34
|
+
}
|
|
35
|
+
else if (isOptionBatch1) {
|
|
36
|
+
return -1;
|
|
37
|
+
}
|
|
38
|
+
else if (isOptionBatch2) {
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
return compareStrings(getOptionLabel(a), getOptionLabel(b));
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export var getBatchOptionFormatter = function (_a) {
|
|
45
|
+
var value = _a.value, multiple = _a.multiple, getOptionIsBatch = _a.getOptionIsBatch, getOptionValue = _a.getOptionValue;
|
|
46
|
+
return function (option) {
|
|
47
|
+
if (isMultiple(multiple, value) && getOptionIsBatch(option)) {
|
|
48
|
+
var val = getOptionValue(option);
|
|
49
|
+
var disabled = Array.isArray(val) && val.every(function (v) { return value.includes(v); });
|
|
50
|
+
return __assign(__assign({}, option), { disabled: disabled });
|
|
51
|
+
}
|
|
52
|
+
return option;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
export var RESERVED_UNGROUPED_OPTGROUP_NAME = 'RESERVED_UNGROUPED_OPTGROUP_NAME';
|
|
56
|
+
export var collectGroupsInOrderOfOccurrence = function (opts, getOptionGroup) {
|
|
57
|
+
var output = opts.reduce(function (_a, option) {
|
|
58
|
+
var _b;
|
|
59
|
+
var groups = _a.groups, groupedOptions = _a.groupedOptions;
|
|
60
|
+
var groupName = getOptionGroup(option);
|
|
61
|
+
// if group name is invalid, consider the option ungrouped
|
|
62
|
+
var isGroupNameValid = getGroupNameIsValid(groupName);
|
|
63
|
+
var adjustedGroupName = isGroupNameValid
|
|
64
|
+
? groupName
|
|
65
|
+
: RESERVED_UNGROUPED_OPTGROUP_NAME;
|
|
66
|
+
var groupOptions = (_b = groupedOptions[adjustedGroupName]) !== null && _b !== void 0 ? _b : [];
|
|
67
|
+
// push/assign for performance considerations
|
|
68
|
+
groupOptions.push(option);
|
|
69
|
+
groupedOptions[adjustedGroupName] = groupOptions;
|
|
70
|
+
return {
|
|
71
|
+
groups: groups.includes(adjustedGroupName)
|
|
72
|
+
? groups
|
|
73
|
+
: __spreadArray(__spreadArray([], groups, true), [adjustedGroupName], false),
|
|
74
|
+
groupedOptions: groupedOptions,
|
|
75
|
+
};
|
|
76
|
+
}, {
|
|
77
|
+
groups: [],
|
|
78
|
+
groupedOptions: {},
|
|
79
|
+
});
|
|
80
|
+
// if ungrouped options were found, lift them to the top
|
|
81
|
+
if (output.groups.includes(RESERVED_UNGROUPED_OPTGROUP_NAME)) {
|
|
82
|
+
return {
|
|
83
|
+
groupedOptions: output.groupedOptions,
|
|
84
|
+
groups: __spreadArray([
|
|
85
|
+
RESERVED_UNGROUPED_OPTGROUP_NAME
|
|
86
|
+
], output.groups.filter(function (group) { return group !== RESERVED_UNGROUPED_OPTGROUP_NAME; }), true),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return output;
|
|
90
|
+
};
|
|
91
|
+
function findParentOptgroup(list, index, getOptionGroup) {
|
|
92
|
+
for (var i = index; i >= 0; i--) {
|
|
93
|
+
var option = list[i];
|
|
94
|
+
var isOptgroup = getOptionIsOptgroup(option);
|
|
95
|
+
if (isOptgroup) {
|
|
96
|
+
return getOptionGroup(option);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// no parent optgroup was found, so the option is considered ungrouped
|
|
100
|
+
return RESERVED_UNGROUPED_OPTGROUP_NAME;
|
|
101
|
+
}
|
|
102
|
+
export function reorder(options, startIndex, endIndex, getOptionGroup) {
|
|
103
|
+
var nextOptions = __spreadArray([], options, true);
|
|
104
|
+
var removed = nextOptions.splice(startIndex, 1)[0];
|
|
105
|
+
nextOptions.splice(endIndex, 0, removed);
|
|
106
|
+
var prevGroup = findParentOptgroup(options, startIndex, getOptionGroup);
|
|
107
|
+
var nextGroup = findParentOptgroup(nextOptions, endIndex, getOptionGroup);
|
|
108
|
+
return { nextOptions: nextOptions, prevGroup: prevGroup, nextGroup: nextGroup };
|
|
109
|
+
}
|
|
110
|
+
function compareStrings(a, b) {
|
|
111
|
+
return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
|
|
112
|
+
}
|
|
113
|
+
export function isMultiple(multiple, value) {
|
|
114
|
+
return multiple && Array.isArray(value);
|
|
115
|
+
}
|
|
116
|
+
export var getOptionIsOptgroup = function (item) {
|
|
117
|
+
return Boolean(item[optgroupSymbol]);
|
|
118
|
+
};
|
|
119
|
+
export var getOptgroupHeader = function (groupName) {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
if (groupName === RESERVED_UNGROUPED_OPTGROUP_NAME) {
|
|
122
|
+
return _a = {},
|
|
123
|
+
_a[optgroupSymbol] = true,
|
|
124
|
+
_a.label = '',
|
|
125
|
+
_a.group = RESERVED_UNGROUPED_OPTGROUP_NAME,
|
|
126
|
+
_a.id = RESERVED_UNGROUPED_OPTGROUP_NAME,
|
|
127
|
+
_a;
|
|
128
|
+
}
|
|
129
|
+
return _b = {},
|
|
130
|
+
_b[optgroupSymbol] = true,
|
|
131
|
+
_b.label = groupName,
|
|
132
|
+
_b.group = groupName,
|
|
133
|
+
_b.id = groupName,
|
|
134
|
+
_b;
|
|
135
|
+
};
|
|
136
|
+
export var sortOptgroups = function (groupA, groupB) {
|
|
137
|
+
// always put ungrouped options on top
|
|
138
|
+
if (groupA === RESERVED_UNGROUPED_OPTGROUP_NAME) {
|
|
139
|
+
return -1;
|
|
140
|
+
}
|
|
141
|
+
if (groupB === RESERVED_UNGROUPED_OPTGROUP_NAME) {
|
|
142
|
+
return 1;
|
|
143
|
+
}
|
|
144
|
+
return compareStrings(groupA, groupB);
|
|
145
|
+
};
|
|
146
|
+
export function getIsAllOptionsUngrouped(groups) {
|
|
147
|
+
return groups.length === 1 && groups[0] === RESERVED_UNGROUPED_OPTGROUP_NAME;
|
|
148
|
+
}
|
|
149
|
+
export function getOptgroup(groupName, groupOptions) {
|
|
150
|
+
// ungrouped options should not have a group header
|
|
151
|
+
if (groupName === RESERVED_UNGROUPED_OPTGROUP_NAME) {
|
|
152
|
+
return groupOptions;
|
|
153
|
+
}
|
|
154
|
+
return __spreadArray([getOptgroupHeader(groupName)], groupOptions, true);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=SuperSelect.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuperSelect.utils.js","sourceRoot":"","sources":["../../src/SuperSelect/SuperSelect.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SuperSelectApi, SuperSelectMenuItemProps, SuperSelectOption } from './SuperSelect.types';
|
|
3
|
+
export declare const InternalDragDropContext: React.Context<{
|
|
4
|
+
isDraggingOver: boolean;
|
|
5
|
+
}>;
|
|
6
|
+
export declare const SuperSelectDraggableOptions: ({ SuperSelectMenuItem, MenuItemLabelComponent, MenuGroupHeaderComponent, selectApi, onListHeightChange, }: {
|
|
7
|
+
SuperSelectMenuItem: React.FC<SuperSelectMenuItemProps>;
|
|
8
|
+
MenuItemLabelComponent: React.FC<{
|
|
9
|
+
option: SuperSelectOption;
|
|
10
|
+
selectApi: SuperSelectApi;
|
|
11
|
+
}>;
|
|
12
|
+
MenuGroupHeaderComponent: React.FC<{
|
|
13
|
+
group: SuperSelectOption;
|
|
14
|
+
selectApi: SuperSelectApi;
|
|
15
|
+
}>;
|
|
16
|
+
selectApi: SuperSelectApi;
|
|
17
|
+
onListHeightChange: (height: number) => void;
|
|
18
|
+
}) => JSX.Element;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { Grip } from '@procore/core-icons';
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';
|
|
15
|
+
import { Virtuoso } from 'react-virtuoso';
|
|
16
|
+
import { StyledGrip } from '../MenuImperative/MenuImperative.styles';
|
|
17
|
+
import { colors } from '../_styles/colors';
|
|
18
|
+
import { draggableOptionIdSymbol } from './SuperSelect.constants';
|
|
19
|
+
import { StyledDraggableWrapper } from './SuperSelect.styles';
|
|
20
|
+
export var InternalDragDropContext = React.createContext({
|
|
21
|
+
isDraggingOver: false,
|
|
22
|
+
});
|
|
23
|
+
var InternalDragDropProvider = function (_a) {
|
|
24
|
+
var isDraggingOver = _a.isDraggingOver, children = _a.children;
|
|
25
|
+
var value = React.useMemo(function () {
|
|
26
|
+
return {
|
|
27
|
+
isDraggingOver: isDraggingOver,
|
|
28
|
+
};
|
|
29
|
+
}, [isDraggingOver]);
|
|
30
|
+
return (React.createElement(InternalDragDropContext.Provider, { value: value }, children));
|
|
31
|
+
};
|
|
32
|
+
export var SuperSelectDraggableOptions = function (_a) {
|
|
33
|
+
var SuperSelectMenuItem = _a.SuperSelectMenuItem, MenuItemLabelComponent = _a.MenuItemLabelComponent, MenuGroupHeaderComponent = _a.MenuGroupHeaderComponent, selectApi = _a.selectApi, onListHeightChange = _a.onListHeightChange;
|
|
34
|
+
var getDraggableItemContent = function (index, option) {
|
|
35
|
+
var disabled = selectApi.getOptionIsDisabled(option);
|
|
36
|
+
var isOptgroup = selectApi.getOptionIsOptgroup(option);
|
|
37
|
+
var optionId = isOptgroup ? option.id : option[draggableOptionIdSymbol];
|
|
38
|
+
return (React.createElement(Draggable, { draggableId: optionId, index: index, key: optionId, isDragDisabled: isOptgroup || disabled || Boolean(selectApi.searchValue) }, function (provided) {
|
|
39
|
+
return (React.createElement(StyledDraggableWrapper, __assign({ ref: provided.innerRef }, provided.draggableProps, provided.dragHandleProps),
|
|
40
|
+
!isOptgroup && (React.createElement(StyledGrip, null,
|
|
41
|
+
React.createElement(Grip, { color: colors.gray45 }))),
|
|
42
|
+
isOptgroup ? (React.createElement(MenuGroupHeaderComponent, { group: option, selectApi: selectApi })) : (React.createElement(MenuItemLabelComponent, { option: option, selectApi: selectApi }))));
|
|
43
|
+
}));
|
|
44
|
+
};
|
|
45
|
+
return (React.createElement(DragDropContext, { onDragEnd: selectApi.onDragEnd },
|
|
46
|
+
React.createElement(Droppable, { droppableId: "droppable", mode: "virtual", renderClone: function (provided, snapshot, dragged) {
|
|
47
|
+
var option = selectApi.options[dragged.source.index];
|
|
48
|
+
return (React.createElement(SuperSelectMenuItem, __assign({ isDragging: true, "data-index": dragged.source.index }, provided.draggableProps),
|
|
49
|
+
React.createElement(StyledGrip, null,
|
|
50
|
+
React.createElement(Grip, { color: colors.gray45 })),
|
|
51
|
+
React.createElement(MenuItemLabelComponent, { option: option, selectApi: selectApi })));
|
|
52
|
+
} }, function (provided, snapshot) {
|
|
53
|
+
return (React.createElement(InternalDragDropProvider, { isDraggingOver: snapshot.isDraggingOver },
|
|
54
|
+
React.createElement(Virtuoso, { role: "listbox", id: selectApi.overlayId, ref: selectApi.virtuoso, data: selectApi.options, components: {
|
|
55
|
+
Item: SuperSelectMenuItem,
|
|
56
|
+
}, scrollerRef: function (el) {
|
|
57
|
+
provided.innerRef(el);
|
|
58
|
+
}, itemContent: getDraggableItemContent, initialTopMostItemIndex: selectApi.selectedIndex >= 0 ? selectApi.selectedIndex : 0, totalListHeightChanged: onListHeightChange, tabIndex: -1 })));
|
|
59
|
+
})));
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=SuperSelectDraggableOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuperSelectDraggableOptions.js","sourceRoot":"","sources":["../../src/SuperSelect/SuperSelectDraggableOptions.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,25 +3,11 @@ import React from 'react';
|
|
|
3
3
|
import { VirtuosoHandle } from 'react-virtuoso';
|
|
4
4
|
import { TypeaheadInputProps, TypeaheadProps } from '../Typeahead/Typeahead.types';
|
|
5
5
|
import { SuperSelectConfig, SuperSelectOption, SuperSelectValue, SuperSelectValuePrimitive } from './SuperSelect.types';
|
|
6
|
-
declare function
|
|
7
|
-
export declare function useSuperSelect({ components, defaultValue, disabled, getOptionGroup, getOptionIsBatch, getOptionIsDisabled, getOptionLabel, getOptionValue, multiple, onChange, options: sourceOptions, search, value: value_, }: SuperSelectConfig): {
|
|
6
|
+
export declare function useSuperSelect({ components, draggable, defaultValue, disabled, getOptionGroup, setOptionGroup, getOptionIsBatch, getOptionIsDisabled, getOptionLabel, getOptionValue, onManualSort, multiple, onChange, options: sourceOptions, search, sort, value: value_, }: SuperSelectConfig): {
|
|
8
7
|
activeMenuIndex: number | null;
|
|
9
8
|
activeTokenIndex: number | null;
|
|
10
|
-
components:
|
|
11
|
-
|
|
12
|
-
selectApi: any;
|
|
13
|
-
}> | undefined;
|
|
14
|
-
MenuItemLabel?: React.FC<{
|
|
15
|
-
selectApi: any;
|
|
16
|
-
option: any;
|
|
17
|
-
}> | undefined;
|
|
18
|
-
Token?: React.FC<{
|
|
19
|
-
selectApi: any;
|
|
20
|
-
option: any;
|
|
21
|
-
index: number;
|
|
22
|
-
focused: boolean;
|
|
23
|
-
}> | undefined;
|
|
24
|
-
} | undefined;
|
|
9
|
+
components: import("./SuperSelect.types").SuperSelectComponents | undefined;
|
|
10
|
+
draggable: boolean | undefined;
|
|
25
11
|
floating: import("@floating-ui/react-dom-interactions").UseFloatingReturn<HTMLElement>;
|
|
26
12
|
getClearProps: () => React.AriaAttributes & React.HTMLAttributes<HTMLElement>;
|
|
27
13
|
getFloatingProps: (userProps?: any) => Record<string, unknown>;
|
|
@@ -30,14 +16,14 @@ export declare function useSuperSelect({ components, defaultValue, disabled, get
|
|
|
30
16
|
getOptionGroup: (option: any) => string;
|
|
31
17
|
getOptionIsBatch: (option: any) => boolean;
|
|
32
18
|
getOptionIsDisabled: (option: any) => boolean;
|
|
33
|
-
getOptionIsOptgroup:
|
|
19
|
+
getOptionIsOptgroup: (item: any) => boolean;
|
|
34
20
|
getOptionLabel: (option: any) => string;
|
|
35
21
|
getOptionValue: (option: any) => SuperSelectValuePrimitive;
|
|
36
22
|
getReferenceProps: (userProps?: any) => Record<string, unknown>;
|
|
37
23
|
getTokenClearProps: (index: number) => React.AriaAttributes & React.SVGAttributes<SVGElement>;
|
|
38
24
|
getTypeaheadProps: () => React.AriaAttributes & TypeaheadInputProps & TypeaheadProps;
|
|
39
25
|
isEmpty: () => boolean;
|
|
40
|
-
isSelected: (option:
|
|
26
|
+
isSelected: (option: SuperSelectOption) => boolean;
|
|
41
27
|
listId: string;
|
|
42
28
|
maxHeight: number;
|
|
43
29
|
multiple: boolean;
|
|
@@ -57,5 +43,5 @@ export declare function useSuperSelect({ components, defaultValue, disabled, get
|
|
|
57
43
|
value: SuperSelectValue;
|
|
58
44
|
virtuoso: React.RefObject<VirtuosoHandle>;
|
|
59
45
|
width: number;
|
|
46
|
+
onDragEnd: (result: any) => void;
|
|
60
47
|
};
|
|
61
|
-
export {};
|
|
@@ -21,20 +21,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
21
21
|
import { autoUpdate, flip, offset, size, useClick, useDismiss, useFloating, useInteractions, useListNavigation, } from '@floating-ui/react-dom-interactions';
|
|
22
22
|
import { useId } from '@react-aria/utils';
|
|
23
23
|
import debounce from 'lodash.debounce';
|
|
24
|
-
import groupBy from 'lodash.groupby';
|
|
25
24
|
import uniq from 'lodash.uniq';
|
|
26
25
|
import React from 'react';
|
|
27
|
-
|
|
26
|
+
import { draggableOptionIdSymbol } from './SuperSelect.constants';
|
|
27
|
+
import { collectGroupsInOrderOfOccurrence, getBatchOptionFormatter, getIsAllOptionsUngrouped, getOptgroup, getOptionIsOptgroup, getOptionsSortingAlgorithm, isMultiple, reorder, sortOptgroups, } from './SuperSelect.utils';
|
|
28
28
|
function noop() { }
|
|
29
|
-
function compareStrings(a, b) {
|
|
30
|
-
return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
|
|
31
|
-
}
|
|
32
|
-
function isMultiple(multiple, value) {
|
|
33
|
-
return multiple && Array.isArray(value);
|
|
34
|
-
}
|
|
35
|
-
function getOptionIsOptgroup(item) {
|
|
36
|
-
return Boolean(item[optgroupSymbol]);
|
|
37
|
-
}
|
|
38
29
|
function defaultGetOptionValue(option) {
|
|
39
30
|
return option === null || option === void 0 ? void 0 : option.value;
|
|
40
31
|
}
|
|
@@ -49,10 +40,16 @@ function defaultGetOptionGroup(option) {
|
|
|
49
40
|
var _a;
|
|
50
41
|
return (_a = option === null || option === void 0 ? void 0 : option.group) !== null && _a !== void 0 ? _a : '';
|
|
51
42
|
}
|
|
43
|
+
function defaultSetOptionGroup(option, group) {
|
|
44
|
+
return __assign(__assign({}, option), { group: group });
|
|
45
|
+
}
|
|
52
46
|
function defaultGetOptionLabel(option) {
|
|
53
47
|
var _a;
|
|
54
48
|
return (_a = option === null || option === void 0 ? void 0 : option.label) !== null && _a !== void 0 ? _a : '';
|
|
55
49
|
}
|
|
50
|
+
function stringContains(str1, str2) {
|
|
51
|
+
return str1.toLowerCase().includes(str2.toLowerCase());
|
|
52
|
+
}
|
|
56
53
|
function useCustomReferenceProps(context, _a) {
|
|
57
54
|
var _b = _a.search, search = _b === void 0 ? true : _b, overlayId = _a.overlayId, listId = _a.listId, _c = _a.open, open = _c === void 0 ? false : _c, _d = _a.onChangePointer, onChangePointer = _d === void 0 ? noop : _d;
|
|
58
55
|
return {
|
|
@@ -145,9 +142,9 @@ function useKeyboardSelection(context, _a) {
|
|
|
145
142
|
};
|
|
146
143
|
}
|
|
147
144
|
export function useSuperSelect(_a) {
|
|
148
|
-
var components = _a.components, defaultValue = _a.defaultValue, _b = _a.disabled, disabled = _b === void 0 ? false : _b, _c = _a.getOptionGroup, getOptionGroup = _c === void 0 ? defaultGetOptionGroup : _c, _d = _a.
|
|
145
|
+
var components = _a.components, draggable = _a.draggable, defaultValue = _a.defaultValue, _b = _a.disabled, disabled = _b === void 0 ? false : _b, _c = _a.getOptionGroup, getOptionGroup = _c === void 0 ? defaultGetOptionGroup : _c, _d = _a.setOptionGroup, setOptionGroup = _d === void 0 ? defaultSetOptionGroup : _d, _e = _a.getOptionIsBatch, getOptionIsBatch = _e === void 0 ? defaultGetOptionIsBatch : _e, _f = _a.getOptionIsDisabled, getOptionIsDisabled = _f === void 0 ? defaultGetOptionIsDisabled : _f, _g = _a.getOptionLabel, getOptionLabel = _g === void 0 ? defaultGetOptionLabel : _g, _h = _a.getOptionValue, getOptionValue = _h === void 0 ? defaultGetOptionValue : _h, onManualSort = _a.onManualSort, _j = _a.multiple, multiple = _j === void 0 ? false : _j, onChange = _a.onChange, _k = _a.options, sourceOptions = _k === void 0 ? [] : _k, _l = _a.search, search = _l === void 0 ? true : _l, _m = _a.sort, sort = _m === void 0 ? true : _m, value_ = _a.value;
|
|
149
146
|
var initialValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : (multiple ? [] : null);
|
|
150
|
-
var
|
|
147
|
+
var _o = React.useState(initialValue), val = _o[0], setVal = _o[1];
|
|
151
148
|
var value = value_ !== undefined ? value_ : val;
|
|
152
149
|
function setValue(v) {
|
|
153
150
|
if (!value_) {
|
|
@@ -157,62 +154,115 @@ export function useSuperSelect(_a) {
|
|
|
157
154
|
onChange(v);
|
|
158
155
|
}
|
|
159
156
|
}
|
|
160
|
-
|
|
157
|
+
React.useEffect(function () {
|
|
158
|
+
if (!draggable) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
var isUsingDefaultGetter = getOptionGroup === defaultGetOptionGroup;
|
|
162
|
+
var isUsingDefaultSetter = setOptionGroup === defaultSetOptionGroup;
|
|
163
|
+
if ((isUsingDefaultGetter && !isUsingDefaultSetter) ||
|
|
164
|
+
(!isUsingDefaultGetter && isUsingDefaultSetter)) {
|
|
165
|
+
console.warn("SuperSelect: Using potentially conflicting \"getOptionGroup\" and \"setOptionGroup\" implementations.\n Group reassignment after drag-and-drop operation might be broken.");
|
|
166
|
+
}
|
|
167
|
+
}, [draggable, getOptionGroup, setOptionGroup]);
|
|
168
|
+
var _p = React.useState(''), searchValue = _p[0], setSearchValue_ = _p[1];
|
|
161
169
|
var setSearchValue = debounce(setSearchValue_, 250); // TODO use React 18 useDeferredValue
|
|
162
|
-
var
|
|
163
|
-
var
|
|
164
|
-
var
|
|
165
|
-
var
|
|
166
|
-
var
|
|
167
|
-
var
|
|
170
|
+
var _q = React.useState(false), open = _q[0], setOpen = _q[1];
|
|
171
|
+
var _r = React.useState(false), pointer = _r[0], setPointer = _r[1];
|
|
172
|
+
var _s = React.useState(248), width = _s[0], setWidth = _s[1];
|
|
173
|
+
var _t = React.useState(248), maxHeight = _t[0], setMaxHeight = _t[1];
|
|
174
|
+
var _u = React.useState(null), activeMenuIndex = _u[0], setActiveMenuIndex = _u[1];
|
|
175
|
+
var _v = React.useState(null), activeTokenIndex = _v[0], setActiveTokenIndex = _v[1];
|
|
168
176
|
var navigationListRef = React.useRef([]);
|
|
169
177
|
var virtuoso = React.useRef(null);
|
|
170
178
|
var overlayId = useId(); // TODO use React 18 useId
|
|
171
179
|
var listId = useId(); // TODO use React 18 useId
|
|
180
|
+
// TODO #memogetters: consider having getOption... getter functions memoized by consumers
|
|
181
|
+
// Until then, exclude these callbacks from effect and memo dependencies
|
|
182
|
+
var sortOptions = React.useMemo(function () { return getOptionsSortingAlgorithm({ getOptionIsBatch: getOptionIsBatch, getOptionLabel: getOptionLabel }); },
|
|
183
|
+
// skip `getOptionIsBatch` and `getOptionLabel`
|
|
184
|
+
[]);
|
|
185
|
+
var formatBatchOption = React.useMemo(function () {
|
|
186
|
+
return getBatchOptionFormatter({
|
|
187
|
+
value: value,
|
|
188
|
+
multiple: multiple,
|
|
189
|
+
getOptionIsBatch: getOptionIsBatch,
|
|
190
|
+
getOptionValue: getOptionValue,
|
|
191
|
+
});
|
|
192
|
+
},
|
|
193
|
+
// skip `getOptionIsBatch` and `getOptionValue`, refer to TODO #memogetters
|
|
194
|
+
[value, multiple]);
|
|
195
|
+
// collect groups, sort them and populate them with options, and sort the options inside the groups
|
|
196
|
+
var enforceOptionsSortingOrder = React.useCallback(function groupAndSort(opts) {
|
|
197
|
+
var _a = collectGroupsInOrderOfOccurrence(opts, getOptionGroup), groups = _a.groups, groupedOptions = _a.groupedOptions;
|
|
198
|
+
if (getIsAllOptionsUngrouped(groups)) {
|
|
199
|
+
return opts.sort(sortOptions);
|
|
200
|
+
}
|
|
201
|
+
return Object.entries(groupedOptions)
|
|
202
|
+
.sort(function (_a, _b) {
|
|
203
|
+
var groupA = _a[0];
|
|
204
|
+
var groupB = _b[0];
|
|
205
|
+
return sortOptgroups(groupA, groupB);
|
|
206
|
+
})
|
|
207
|
+
.flatMap(function (_a) {
|
|
208
|
+
var groupName = _a[0], groupOptions = _a[1];
|
|
209
|
+
return getOptgroup(groupName, groupOptions.sort(sortOptions));
|
|
210
|
+
});
|
|
211
|
+
},
|
|
212
|
+
// skip `getOptionGroup`, refer to TODO #memogetters
|
|
213
|
+
[sortOptions]);
|
|
214
|
+
// collect groups and populate them with options
|
|
215
|
+
var deriveOptionsSortingOrder = React.useCallback(function (opts) {
|
|
216
|
+
var _a = collectGroupsInOrderOfOccurrence(opts, getOptionGroup), groups = _a.groups, groupedOptions = _a.groupedOptions;
|
|
217
|
+
if (getIsAllOptionsUngrouped(groups)) {
|
|
218
|
+
return opts;
|
|
219
|
+
}
|
|
220
|
+
// display optgroups in the order of occurrence, as they are considered pre-sorted
|
|
221
|
+
return groups.flatMap(function (group) {
|
|
222
|
+
var groupOptions = groupedOptions[group];
|
|
223
|
+
return getOptgroup(group, groupOptions);
|
|
224
|
+
});
|
|
225
|
+
},
|
|
226
|
+
// skip `getOptionGroup`, refer to TODO #memogetters
|
|
227
|
+
[]);
|
|
228
|
+
var groupAndSortAlgorithm = React.useMemo(function () { return (sort ? enforceOptionsSortingOrder : deriveOptionsSortingOrder); }, [sort, enforceOptionsSortingOrder, deriveOptionsSortingOrder]);
|
|
172
229
|
var options = React.useMemo(function () {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
return Object.keys(grouped)
|
|
177
|
-
.sort(function (a, b) { return compareStrings(a, b); })
|
|
178
|
-
.map(function (group) {
|
|
179
|
-
var _a;
|
|
180
|
-
var groupOptions = grouped[group] || [];
|
|
181
|
-
var groupOptionsSorted = groupOptions.sort(function (a, b) {
|
|
182
|
-
return compareStrings(getOptionLabel(a), getOptionLabel(b));
|
|
183
|
-
});
|
|
184
|
-
var opts = group
|
|
185
|
-
? [(_a = {}, _a[optgroupSymbol] = true, _a.label = group, _a.group = group, _a)]
|
|
186
|
-
: [];
|
|
187
|
-
return opts.concat(groupOptionsSorted);
|
|
230
|
+
var queried = searchValue
|
|
231
|
+
? sourceOptions.filter(function (opt) {
|
|
232
|
+
return stringContains(getOptionLabel(opt), searchValue);
|
|
188
233
|
})
|
|
189
|
-
|
|
234
|
+
: __spreadArray([], sourceOptions, true); // make a copy of source options to prevent the mutation when sorting
|
|
235
|
+
return groupAndSortAlgorithm(queried).map(formatBatchOption);
|
|
236
|
+
},
|
|
237
|
+
// skip `getOptionLabel`, refer to TODO #memogetters
|
|
238
|
+
[groupAndSortAlgorithm, formatBatchOption, searchValue, sourceOptions]);
|
|
239
|
+
var _w = React.useState([]), draggableOptions = _w[0], setDraggableOptions = _w[1];
|
|
240
|
+
React.useEffect(function () {
|
|
241
|
+
if (!draggable) {
|
|
242
|
+
return;
|
|
190
243
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
var
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
// group and sort all the options, putting batched options at the top
|
|
214
|
-
return groupAndSort(batchOptions).concat(groupAndSort(options));
|
|
215
|
-
}, [multiple, searchValue, sourceOptions, value]);
|
|
244
|
+
// make a copy of source options to prevent the mutation when sorting
|
|
245
|
+
var opts = groupAndSortAlgorithm(sourceOptions.map(function (opt) {
|
|
246
|
+
var _a;
|
|
247
|
+
return (__assign(__assign({}, opt), (_a = {}, _a[draggableOptionIdSymbol] = crypto.randomUUID(), _a)));
|
|
248
|
+
}));
|
|
249
|
+
setDraggableOptions(opts);
|
|
250
|
+
},
|
|
251
|
+
// in draggable mode, sourceOptions must be memoized, othewise reorder will not work
|
|
252
|
+
[draggable, sourceOptions, groupAndSortAlgorithm]);
|
|
253
|
+
var queriedDraggableOptions = React.useMemo(function () {
|
|
254
|
+
if (!draggable) {
|
|
255
|
+
return [];
|
|
256
|
+
}
|
|
257
|
+
var queried = searchValue
|
|
258
|
+
? draggableOptions.filter(function (opt) {
|
|
259
|
+
return stringContains(getOptionLabel(opt), searchValue);
|
|
260
|
+
})
|
|
261
|
+
: draggableOptions;
|
|
262
|
+
return queried.map(formatBatchOption);
|
|
263
|
+
},
|
|
264
|
+
// skip `getOptionLabel`, refer to TODO #memogetters
|
|
265
|
+
[draggable, draggableOptions, searchValue, formatBatchOption]);
|
|
216
266
|
var groupIndices = React.useMemo(function () {
|
|
217
267
|
return options.reduce(function (acc, opt, i) {
|
|
218
268
|
if (getOptionIsOptgroup(opt)) {
|
|
@@ -226,7 +276,7 @@ export function useSuperSelect(_a) {
|
|
|
226
276
|
}, [options, value]);
|
|
227
277
|
var selectedOption = React.useMemo(function () {
|
|
228
278
|
return options.find(function (option) { return getOptionValue(option) === value; });
|
|
229
|
-
}, [
|
|
279
|
+
}, [options, value]);
|
|
230
280
|
var selectedLabel = React.useMemo(function () {
|
|
231
281
|
return selectedOption ? getOptionLabel(selectedOption) : '';
|
|
232
282
|
}, [selectedOption]);
|
|
@@ -289,7 +339,7 @@ export function useSuperSelect(_a) {
|
|
|
289
339
|
}),
|
|
290
340
|
],
|
|
291
341
|
});
|
|
292
|
-
var
|
|
342
|
+
var _x = useInteractions([
|
|
293
343
|
useClick(floating.context, {
|
|
294
344
|
enabled: !disabled,
|
|
295
345
|
keyboardHandlers: false,
|
|
@@ -329,7 +379,7 @@ export function useSuperSelect(_a) {
|
|
|
329
379
|
onChangePointer: function (p) { return setPointer(function () { return p; }); },
|
|
330
380
|
search: search,
|
|
331
381
|
}),
|
|
332
|
-
]), getReferenceProps =
|
|
382
|
+
]), getReferenceProps = _x.getReferenceProps, getFloatingProps = _x.getFloatingProps, getItemProps = _x.getItemProps;
|
|
333
383
|
function getMultiInputProps() {
|
|
334
384
|
return {
|
|
335
385
|
disabled: disabled,
|
|
@@ -383,6 +433,33 @@ export function useSuperSelect(_a) {
|
|
|
383
433
|
},
|
|
384
434
|
};
|
|
385
435
|
}
|
|
436
|
+
var onDragEnd = React.useCallback(function (result) {
|
|
437
|
+
if (!result.destination) {
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
if (result.source.index === result.destination.index) {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
var startIndex = result.source.index;
|
|
444
|
+
var destinationIndex = result.destination.index;
|
|
445
|
+
setDraggableOptions(function (options) {
|
|
446
|
+
var _a = reorder(options, startIndex, destinationIndex, getOptionGroup), nextOptions = _a.nextOptions, prevGroup = _a.prevGroup, nextGroup = _a.nextGroup;
|
|
447
|
+
var adjustedOptions = prevGroup !== nextGroup
|
|
448
|
+
? nextOptions.map(function (option, index) {
|
|
449
|
+
if (index === destinationIndex) {
|
|
450
|
+
return setOptionGroup(option, nextGroup);
|
|
451
|
+
}
|
|
452
|
+
return option;
|
|
453
|
+
})
|
|
454
|
+
: nextOptions;
|
|
455
|
+
if (typeof onManualSort === 'function') {
|
|
456
|
+
setTimeout(function () {
|
|
457
|
+
onManualSort(adjustedOptions.filter(function (option) { return !getOptionIsOptgroup(option); }));
|
|
458
|
+
}, 0);
|
|
459
|
+
}
|
|
460
|
+
return adjustedOptions;
|
|
461
|
+
});
|
|
462
|
+
}, []);
|
|
386
463
|
// run effect when the `open` state changes
|
|
387
464
|
//
|
|
388
465
|
// if it was closed and is now open, reset the highlighted index to be
|
|
@@ -434,6 +511,7 @@ export function useSuperSelect(_a) {
|
|
|
434
511
|
activeMenuIndex: activeMenuIndex,
|
|
435
512
|
activeTokenIndex: activeTokenIndex,
|
|
436
513
|
components: components,
|
|
514
|
+
draggable: draggable,
|
|
437
515
|
floating: floating,
|
|
438
516
|
getClearProps: getClearProps,
|
|
439
517
|
getFloatingProps: getFloatingProps,
|
|
@@ -457,7 +535,7 @@ export function useSuperSelect(_a) {
|
|
|
457
535
|
onSelect: onSelect,
|
|
458
536
|
open: open,
|
|
459
537
|
sourceOptions: sourceOptions,
|
|
460
|
-
options: options,
|
|
538
|
+
options: draggable ? queriedDraggableOptions : options,
|
|
461
539
|
overlayId: overlayId,
|
|
462
540
|
searchValue: searchValue,
|
|
463
541
|
selectedIndex: selectedIndex,
|
|
@@ -469,6 +547,7 @@ export function useSuperSelect(_a) {
|
|
|
469
547
|
value: value,
|
|
470
548
|
virtuoso: virtuoso,
|
|
471
549
|
width: width,
|
|
550
|
+
onDragEnd: onDragEnd,
|
|
472
551
|
};
|
|
473
552
|
}
|
|
474
553
|
//# sourceMappingURL=useSuperSelect.js.map
|