@itwin/itwinui-react 1.45.0 → 1.47.0
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/CHANGELOG.md +31 -0
- package/cjs/core/Breadcrumbs/Breadcrumbs.d.ts +116 -0
- package/cjs/core/Breadcrumbs/Breadcrumbs.js +2 -3
- package/cjs/core/ButtonGroup/ButtonGroup.js +1 -1
- package/cjs/core/ColorPicker/ColorSwatch.d.ts +1 -1
- package/cjs/core/DatePicker/DatePicker.d.ts +24 -4
- package/cjs/core/DatePicker/DatePicker.js +116 -19
- package/cjs/core/Dialog/Dialog.d.ts +5 -5
- package/cjs/core/Dialog/Dialog.js +38 -6
- package/cjs/core/Dialog/DialogBackdrop.d.ts +2 -2
- package/cjs/core/Dialog/DialogBackdrop.js +2 -2
- package/cjs/core/Dialog/DialogContext.d.ts +31 -0
- package/cjs/core/Dialog/DialogDragContext.d.ts +8 -0
- package/cjs/core/Dialog/DialogDragContext.js +28 -0
- package/cjs/core/Dialog/DialogMain.d.ts +2 -2
- package/cjs/core/Dialog/DialogMain.js +46 -6
- package/cjs/core/Dialog/DialogTitleBar.d.ts +2 -2
- package/cjs/core/Dialog/DialogTitleBar.js +12 -2
- package/cjs/core/Modal/Modal.js +1 -1
- package/cjs/core/Table/Table.d.ts +6 -0
- package/cjs/core/Table/Table.js +73 -17
- package/cjs/core/Table/actionHandlers/index.d.ts +1 -1
- package/cjs/core/Table/actionHandlers/index.js +2 -1
- package/cjs/core/Table/actionHandlers/resizeHandler.d.ts +2 -0
- package/cjs/core/Table/actionHandlers/selectHandler.d.ts +5 -0
- package/cjs/core/Table/actionHandlers/selectHandler.js +35 -2
- package/cjs/core/Table/filters/FilterToggle.d.ts +0 -1
- package/cjs/core/Table/filters/FilterToggle.js +3 -3
- package/cjs/core/Table/hooks/useResizeColumns.d.ts +33 -1
- package/cjs/core/Table/hooks/useResizeColumns.js +89 -29
- package/cjs/core/index.d.ts +3 -1
- package/cjs/core/index.js +6 -3
- package/cjs/core/utils/components/Resizer.d.ts +31 -0
- package/cjs/core/utils/components/Resizer.js +206 -0
- package/cjs/core/utils/components/VirtualScroll.js +26 -24
- package/cjs/core/utils/components/index.d.ts +1 -0
- package/cjs/core/utils/components/index.js +1 -0
- package/cjs/core/utils/functions/index.d.ts +1 -0
- package/cjs/core/utils/functions/index.js +1 -0
- package/cjs/core/utils/functions/styles.d.ts +6 -0
- package/cjs/core/utils/functions/styles.js +21 -0
- package/cjs/core/utils/hooks/useContainerWidth.d.ts +1 -1
- package/cjs/core/utils/hooks/useDragAndDrop.d.ts +14 -0
- package/cjs/core/utils/hooks/useDragAndDrop.js +110 -0
- package/cjs/core/utils/hooks/useEventListener.d.ts +1 -1
- package/cjs/core/utils/hooks/useOverflow.d.ts +1 -1
- package/cjs/core/utils/hooks/useResizeObserver.d.ts +1 -1
- package/cjs/types/react-table-config.d.ts +13 -1
- package/esm/core/Breadcrumbs/Breadcrumbs.d.ts +116 -0
- package/esm/core/Breadcrumbs/Breadcrumbs.js +2 -3
- package/esm/core/ButtonGroup/ButtonGroup.js +1 -1
- package/esm/core/ColorPicker/ColorSwatch.d.ts +1 -1
- package/esm/core/DatePicker/DatePicker.d.ts +24 -4
- package/esm/core/DatePicker/DatePicker.js +116 -19
- package/esm/core/Dialog/Dialog.d.ts +5 -5
- package/esm/core/Dialog/Dialog.js +37 -5
- package/esm/core/Dialog/DialogBackdrop.d.ts +2 -2
- package/esm/core/Dialog/DialogBackdrop.js +2 -2
- package/esm/core/Dialog/DialogContext.d.ts +31 -0
- package/esm/core/Dialog/DialogDragContext.d.ts +8 -0
- package/esm/core/Dialog/DialogDragContext.js +21 -0
- package/esm/core/Dialog/DialogMain.d.ts +2 -2
- package/esm/core/Dialog/DialogMain.js +47 -7
- package/esm/core/Dialog/DialogTitleBar.d.ts +2 -2
- package/esm/core/Dialog/DialogTitleBar.js +12 -2
- package/esm/core/Modal/Modal.js +1 -1
- package/esm/core/Table/Table.d.ts +6 -0
- package/esm/core/Table/Table.js +76 -20
- package/esm/core/Table/actionHandlers/index.d.ts +1 -1
- package/esm/core/Table/actionHandlers/index.js +1 -1
- package/esm/core/Table/actionHandlers/resizeHandler.d.ts +2 -0
- package/esm/core/Table/actionHandlers/selectHandler.d.ts +5 -0
- package/esm/core/Table/actionHandlers/selectHandler.js +33 -1
- package/esm/core/Table/filters/FilterToggle.d.ts +0 -1
- package/esm/core/Table/filters/FilterToggle.js +4 -4
- package/esm/core/Table/hooks/useResizeColumns.d.ts +33 -1
- package/esm/core/Table/hooks/useResizeColumns.js +89 -29
- package/esm/core/index.d.ts +3 -1
- package/esm/core/index.js +2 -1
- package/esm/core/utils/components/Resizer.d.ts +31 -0
- package/esm/core/utils/components/Resizer.js +199 -0
- package/esm/core/utils/components/VirtualScroll.js +26 -24
- package/esm/core/utils/components/index.d.ts +1 -0
- package/esm/core/utils/components/index.js +1 -0
- package/esm/core/utils/functions/index.d.ts +1 -0
- package/esm/core/utils/functions/index.js +1 -0
- package/esm/core/utils/functions/styles.d.ts +6 -0
- package/esm/core/utils/functions/styles.js +17 -0
- package/esm/core/utils/hooks/useContainerWidth.d.ts +1 -1
- package/esm/core/utils/hooks/useDragAndDrop.d.ts +14 -0
- package/esm/core/utils/hooks/useDragAndDrop.js +103 -0
- package/esm/core/utils/hooks/useEventListener.d.ts +1 -1
- package/esm/core/utils/hooks/useOverflow.d.ts +1 -1
- package/esm/core/utils/hooks/useResizeObserver.d.ts +1 -1
- package/esm/types/react-table-config.d.ts +13 -1
- package/package.json +1 -1
|
@@ -4,7 +4,6 @@ import '@itwin/itwinui-css/css/table.css';
|
|
|
4
4
|
import { StylingProps } from '../../utils';
|
|
5
5
|
export declare type FilterToggleProps<T extends Record<string, unknown>> = {
|
|
6
6
|
column: HeaderGroup<T>;
|
|
7
|
-
ownerDocument?: Document;
|
|
8
7
|
} & StylingProps;
|
|
9
8
|
/**
|
|
10
9
|
* Handles showing filter icon and opening filter component.
|
|
@@ -41,9 +41,9 @@ var Buttons_1 = require("../../Buttons");
|
|
|
41
41
|
* Handles showing filter icon and opening filter component.
|
|
42
42
|
*/
|
|
43
43
|
var FilterToggle = function (props) {
|
|
44
|
-
var column = props.column,
|
|
44
|
+
var column = props.column, className = props.className, rest = __rest(props, ["column", "className"]);
|
|
45
45
|
(0, utils_1.useTheme)();
|
|
46
|
-
var
|
|
46
|
+
var _a = react_1.default.useState(false), isVisible = _a[0], setIsVisible = _a[1];
|
|
47
47
|
var close = react_1.default.useCallback(function () { return setIsVisible(false); }, []);
|
|
48
48
|
var setFilter = react_1.default.useCallback(function (filterValue) {
|
|
49
49
|
column.setFilter(filterValue);
|
|
@@ -54,7 +54,7 @@ var FilterToggle = function (props) {
|
|
|
54
54
|
close();
|
|
55
55
|
}, [close, column]);
|
|
56
56
|
var isColumnFiltered = column.filterValue != null && column.filterValue !== '';
|
|
57
|
-
return (react_1.default.createElement(react_1.default.Fragment, null, column.canFilter && column.Filter && (react_1.default.createElement(utils_1.Popover, { content: column.render('Filter', { close: close, setFilter: setFilter, clearFilter: clearFilter }), placement: 'bottom-start', visible: isVisible, onClickOutside: close
|
|
57
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, column.canFilter && column.Filter && (react_1.default.createElement(utils_1.Popover, { content: column.render('Filter', { close: close, setFilter: setFilter, clearFilter: clearFilter }), placement: 'bottom-start', visible: isVisible, onClickOutside: close },
|
|
58
58
|
react_1.default.createElement(Buttons_1.IconButton, __assign({ styleType: 'borderless', isActive: isVisible || isColumnFiltered, className: (0, classnames_1.default)('iui-filter-button', className), onClick: function (e) {
|
|
59
59
|
setIsVisible(function (v) { return !v; });
|
|
60
60
|
// Prevents from triggering sort
|
|
@@ -1,5 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copied from react-table as useResizeColumns and made some changes:
|
|
3
|
+
* - Added TS typings
|
|
4
|
+
* - Added sibling/next column resize when resizing
|
|
5
|
+
* - Favoring min/max widths when resizing
|
|
6
|
+
* - Added owner document support
|
|
7
|
+
* @link https://github.com/tannerlinsley/react-table/blob/master/src/plugin-hooks/useResizeColumns.js
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* MIT License
|
|
11
|
+
*
|
|
12
|
+
* Copyright (c) 2016 Tanner Linsley
|
|
13
|
+
*
|
|
14
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
15
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
16
|
+
* in the Software without restriction, including without limitation the rights
|
|
17
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
18
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
19
|
+
* furnished to do so, subject to the following conditions:
|
|
20
|
+
*
|
|
21
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
22
|
+
* copies or substantial portions of the Software.
|
|
23
|
+
*
|
|
24
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
25
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
26
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
27
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
28
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
29
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
30
|
+
* SOFTWARE.
|
|
31
|
+
*/
|
|
32
|
+
import React from 'react';
|
|
1
33
|
import { Hooks } from 'react-table';
|
|
2
34
|
export declare const useResizeColumns: {
|
|
3
|
-
<T extends Record<string, unknown>>(ownerDocument: Document | undefined): (hooks: Hooks<T>) => void;
|
|
35
|
+
<T extends Record<string, unknown>>(ownerDocument: React.RefObject<Document | undefined>): (hooks: Hooks<T>) => void;
|
|
4
36
|
pluginName: string;
|
|
5
37
|
};
|
|
@@ -33,24 +33,19 @@ var isTouchEvent = function (event) {
|
|
|
33
33
|
};
|
|
34
34
|
var defaultGetResizerProps = function (ownerDocument) { return function (props, _a) {
|
|
35
35
|
var instance = _a.instance, header = _a.header, nextHeader = _a.nextHeader;
|
|
36
|
-
|
|
37
|
-
return props;
|
|
38
|
-
}
|
|
39
|
-
var dispatch = instance.dispatch, flatHeaders = instance.flatHeaders;
|
|
36
|
+
var dispatch = instance.dispatch;
|
|
40
37
|
var onResizeStart = function (e, header) {
|
|
38
|
+
var _a, _b, _c;
|
|
41
39
|
// lets not respond to multiple touches (e.g. 2 or 3 fingers)
|
|
42
40
|
if (isTouchEvent(e) && e.touches && e.touches.length > 1) {
|
|
43
41
|
return;
|
|
44
42
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
var headerIdWidths = getLeafHeaders(header).map(function (d) { return [d.id, d.width]; });
|
|
43
|
+
var headerIdWidths = getLeafHeaders(header).map(function (d) { return [
|
|
44
|
+
d.id,
|
|
45
|
+
getHeaderWidth(d),
|
|
46
|
+
]; });
|
|
52
47
|
var nextHeaderIdWidths = nextHeader
|
|
53
|
-
? getLeafHeaders(nextHeader).map(function (d) { return [d.id, d
|
|
48
|
+
? getLeafHeaders(nextHeader).map(function (d) { return [d.id, getHeaderWidth(d)]; })
|
|
54
49
|
: [];
|
|
55
50
|
var clientX = isTouchEvent(e)
|
|
56
51
|
? Math.round(e.touches[0].clientX)
|
|
@@ -69,8 +64,10 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
|
|
|
69
64
|
moveHandler: function (e) { return dispatchMove(e.clientX); },
|
|
70
65
|
upEvent: 'mouseup',
|
|
71
66
|
upHandler: function () {
|
|
72
|
-
|
|
73
|
-
ownerDocument.removeEventListener('
|
|
67
|
+
var _a, _b, _c;
|
|
68
|
+
(_a = ownerDocument.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('mousemove', handlersAndEvents.mouse.moveHandler);
|
|
69
|
+
(_b = ownerDocument.current) === null || _b === void 0 ? void 0 : _b.removeEventListener('mouseup', handlersAndEvents.mouse.upHandler);
|
|
70
|
+
(_c = ownerDocument.current) === null || _c === void 0 ? void 0 : _c.removeEventListener('mouseleave', handlersAndEvents.mouse.upHandler);
|
|
74
71
|
dispatchEnd();
|
|
75
72
|
},
|
|
76
73
|
},
|
|
@@ -85,8 +82,9 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
|
|
|
85
82
|
},
|
|
86
83
|
upEvent: 'touchend',
|
|
87
84
|
upHandler: function () {
|
|
88
|
-
|
|
89
|
-
ownerDocument.removeEventListener(handlersAndEvents.touch.
|
|
85
|
+
var _a, _b;
|
|
86
|
+
(_a = ownerDocument.current) === null || _a === void 0 ? void 0 : _a.removeEventListener(handlersAndEvents.touch.moveEvent, handlersAndEvents.touch.moveHandler);
|
|
87
|
+
(_b = ownerDocument.current) === null || _b === void 0 ? void 0 : _b.removeEventListener(handlersAndEvents.touch.upEvent, handlersAndEvents.touch.moveHandler);
|
|
90
88
|
dispatchEnd();
|
|
91
89
|
},
|
|
92
90
|
},
|
|
@@ -97,13 +95,16 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
|
|
|
97
95
|
var passiveIfSupported = passiveEventSupported()
|
|
98
96
|
? { passive: false }
|
|
99
97
|
: false;
|
|
100
|
-
ownerDocument.addEventListener(events.moveEvent, events.moveHandler, passiveIfSupported);
|
|
101
|
-
ownerDocument.addEventListener(events.upEvent, events.upHandler, passiveIfSupported);
|
|
98
|
+
(_a = ownerDocument.current) === null || _a === void 0 ? void 0 : _a.addEventListener(events.moveEvent, events.moveHandler, passiveIfSupported);
|
|
99
|
+
(_b = ownerDocument.current) === null || _b === void 0 ? void 0 : _b.addEventListener(events.upEvent, events.upHandler, passiveIfSupported);
|
|
100
|
+
if (!isTouchEvent(e)) {
|
|
101
|
+
(_c = ownerDocument.current) === null || _c === void 0 ? void 0 : _c.addEventListener('mouseleave', handlersAndEvents.mouse.upHandler, passiveIfSupported);
|
|
102
|
+
}
|
|
102
103
|
dispatch({
|
|
103
104
|
type: react_table_1.actions.columnStartResizing,
|
|
104
105
|
columnId: header.id,
|
|
105
|
-
columnWidth: header
|
|
106
|
-
nextColumnWidth: nextHeader
|
|
106
|
+
columnWidth: getHeaderWidth(header),
|
|
107
|
+
nextColumnWidth: getHeaderWidth(nextHeader),
|
|
107
108
|
headerIdWidths: headerIdWidths,
|
|
108
109
|
nextHeaderIdWidths: nextHeaderIdWidths,
|
|
109
110
|
clientX: clientX,
|
|
@@ -120,6 +121,8 @@ var defaultGetResizerProps = function (ownerDocument) { return function (props,
|
|
|
120
121
|
e.persist();
|
|
121
122
|
// Prevents from triggering drag'n'drop
|
|
122
123
|
e.preventDefault();
|
|
124
|
+
// Prevents from triggering sort
|
|
125
|
+
e.stopPropagation();
|
|
123
126
|
onResizeStart(e, header);
|
|
124
127
|
},
|
|
125
128
|
onTouchStart: function (e) {
|
|
@@ -155,13 +158,29 @@ var reducer = function (newState, action, previousState, instance) {
|
|
|
155
158
|
if (action.type === react_table_1.actions.columnResizing) {
|
|
156
159
|
var clientX = action.clientX;
|
|
157
160
|
var _a = newState.columnResizing, _b = _a.startX, startX = _b === void 0 ? 0 : _b, _c = _a.columnWidth, columnWidth = _c === void 0 ? 1 : _c, _d = _a.nextColumnWidth, nextColumnWidth = _d === void 0 ? 1 : _d, _e = _a.headerIdWidths, headerIdWidths = _e === void 0 ? [] : _e, _f = _a.nextHeaderIdWidths, nextHeaderIdWidths = _f === void 0 ? [] : _f;
|
|
161
|
+
if (!instance) {
|
|
162
|
+
return newState;
|
|
163
|
+
}
|
|
158
164
|
var deltaX = clientX - startX;
|
|
159
165
|
var newColumnWidths = getColumnWidths(headerIdWidths, deltaX / columnWidth);
|
|
160
|
-
var
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
var isTableWidthDecreasing = calculateTableWidth(newColumnWidths, instance.flatHeaders) <
|
|
167
|
+
instance.tableWidth;
|
|
168
|
+
var newNextColumnWidths = (instance === null || instance === void 0 ? void 0 : instance.columnResizeMode) === 'fit' ||
|
|
169
|
+
((instance === null || instance === void 0 ? void 0 : instance.columnResizeMode) === 'expand' && isTableWidthDecreasing)
|
|
170
|
+
? getColumnWidths(nextHeaderIdWidths, -deltaX / nextColumnWidth)
|
|
171
|
+
: {};
|
|
172
|
+
if (!isNewColumnWidthsValid(newColumnWidths, instance.flatHeaders) ||
|
|
173
|
+
!isNewColumnWidthsValid(newNextColumnWidths, instance.flatHeaders) ||
|
|
174
|
+
!isNewTableWidthValid(__assign(__assign({}, newColumnWidths), newNextColumnWidths), instance)) {
|
|
163
175
|
return newState;
|
|
164
176
|
}
|
|
177
|
+
// Setting `width` here because it might take several rerenders until actual column width is set.
|
|
178
|
+
// Also setting after the actual resize happened.
|
|
179
|
+
instance === null || instance === void 0 ? void 0 : instance.flatHeaders.forEach(function (h) {
|
|
180
|
+
if (!h.width) {
|
|
181
|
+
h.width = h.resizeWidth;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
165
184
|
return __assign(__assign({}, newState), { columnResizing: __assign(__assign({}, newState.columnResizing), { columnWidths: __assign(__assign(__assign({}, newState.columnResizing.columnWidths), newColumnWidths), newNextColumnWidths) }) });
|
|
166
185
|
}
|
|
167
186
|
if (action.type === react_table_1.actions.columnDoneResizing) {
|
|
@@ -201,25 +220,53 @@ var isNewColumnWidthsValid = function (columnWidths, headers) {
|
|
|
201
220
|
}
|
|
202
221
|
return true;
|
|
203
222
|
};
|
|
223
|
+
var isNewTableWidthValid = function (columnWidths, instance) {
|
|
224
|
+
if (instance.columnResizeMode === 'fit') {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
var newTableWidth = 0;
|
|
228
|
+
for (var _i = 0, _a = instance.flatHeaders; _i < _a.length; _i++) {
|
|
229
|
+
var header = _a[_i];
|
|
230
|
+
newTableWidth += columnWidths[header.id]
|
|
231
|
+
? columnWidths[header.id]
|
|
232
|
+
: getHeaderWidth(header);
|
|
233
|
+
}
|
|
234
|
+
// `tableWidth` is whole number therefore we need to round the `newTableWidth`
|
|
235
|
+
if (Math.round(newTableWidth) < instance.tableWidth) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
return true;
|
|
239
|
+
};
|
|
204
240
|
var useInstanceBeforeDimensions = function (instance) {
|
|
205
|
-
var flatHeaders = instance.flatHeaders, getHooks = instance.getHooks, columnResizing = instance.state.columnResizing;
|
|
241
|
+
var flatHeaders = instance.flatHeaders, getHooks = instance.getHooks, columnResizing = instance.state.columnResizing, columnResizeMode = instance.columnResizeMode;
|
|
206
242
|
var getInstance = (0, react_table_1.useGetLatest)(instance);
|
|
207
243
|
flatHeaders.forEach(function (header, index) {
|
|
208
244
|
var _a;
|
|
209
245
|
var resizeWidth = columnResizing.columnWidths[header.id];
|
|
210
246
|
header.width = resizeWidth || header.width || header.originalWidth;
|
|
211
247
|
header.isResizing = columnResizing.isResizingColumn === header.id;
|
|
212
|
-
var headerToResize = header.disableResizing
|
|
248
|
+
var headerToResize = header.disableResizing && columnResizeMode === 'fit'
|
|
213
249
|
? getPreviousResizableHeader(header, instance)
|
|
214
250
|
: header;
|
|
215
|
-
|
|
251
|
+
// When `columnResizeMode` is `expand` and it is a last column,
|
|
252
|
+
// then try to find some column on the left side to resize
|
|
253
|
+
// when table width is decreasing.
|
|
254
|
+
var nextResizableHeader = columnResizeMode === 'expand' && index === flatHeaders.length - 1
|
|
255
|
+
? getPreviousResizableHeader(header, instance)
|
|
256
|
+
: getNextResizableHeader(header, instance);
|
|
216
257
|
header.canResize =
|
|
217
258
|
header.disableResizing != null ? !header.disableResizing : true;
|
|
218
259
|
// Show resizer when header is resizable or when next header is resizable
|
|
219
260
|
// and there is resizable columns on the left side of the resizer.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
(
|
|
261
|
+
if (columnResizeMode === 'fit') {
|
|
262
|
+
header.isResizerVisible =
|
|
263
|
+
(header.canResize && !!nextResizableHeader) ||
|
|
264
|
+
(headerToResize && !!((_a = instance.flatHeaders[index + 1]) === null || _a === void 0 ? void 0 : _a.canResize));
|
|
265
|
+
// When resize mode is `expand` show resizer on the current resizable column.
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
header.isResizerVisible = header.canResize && !!headerToResize;
|
|
269
|
+
}
|
|
223
270
|
header.getResizerProps = (0, react_table_1.makePropGetter)(getHooks().getResizerProps, {
|
|
224
271
|
instance: getInstance(),
|
|
225
272
|
header: headerToResize,
|
|
@@ -259,6 +306,19 @@ function getLeafHeaders(header) {
|
|
|
259
306
|
recurseHeader(header);
|
|
260
307
|
return leafHeaders;
|
|
261
308
|
}
|
|
309
|
+
var getHeaderWidth = function (header) {
|
|
310
|
+
return Number(header.width || header.resizeWidth || 0);
|
|
311
|
+
};
|
|
312
|
+
var calculateTableWidth = function (columnWidths, headers) {
|
|
313
|
+
var newTableWidth = 0;
|
|
314
|
+
for (var _i = 0, headers_1 = headers; _i < headers_1.length; _i++) {
|
|
315
|
+
var header = headers_1[_i];
|
|
316
|
+
newTableWidth += columnWidths[header.id]
|
|
317
|
+
? columnWidths[header.id]
|
|
318
|
+
: getHeaderWidth(header);
|
|
319
|
+
}
|
|
320
|
+
return newTableWidth;
|
|
321
|
+
};
|
|
262
322
|
// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#safely_detecting_option_support
|
|
263
323
|
var passiveSupported = null;
|
|
264
324
|
var passiveEventSupported = function () {
|
package/cjs/core/index.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export { ComboBox } from './ComboBox';
|
|
|
20
20
|
export type { ComboBoxProps } from './ComboBox';
|
|
21
21
|
export { DatePicker, generateLocalizedStrings } from './DatePicker';
|
|
22
22
|
export type { DatePickerProps } from './DatePicker';
|
|
23
|
+
export { Dialog } from './Dialog';
|
|
24
|
+
export type { DialogProps, DialogButtonBarProps, DialogContentProps, DialogMainProps, DialogTitleBarProps, } from './Dialog';
|
|
23
25
|
export { DropdownMenu } from './DropdownMenu';
|
|
24
26
|
export type { DropdownMenuProps } from './DropdownMenu';
|
|
25
27
|
export { ErrorPage } from './ErrorPage';
|
|
@@ -72,7 +74,7 @@ export { StatusMessage } from './StatusMessage';
|
|
|
72
74
|
export type { StatusMessageProps } from './StatusMessage';
|
|
73
75
|
export { Surface } from './Surface';
|
|
74
76
|
export type { SurfaceProps } from './Surface';
|
|
75
|
-
export { Table, tableFilters, FilterButtonBar, DefaultCell, EditableCell, TablePaginator, ActionColumn, ExpanderColumn, SelectionColumn, } from './Table';
|
|
77
|
+
export { Table, tableFilters, BaseFilter, FilterButtonBar, DefaultCell, EditableCell, TablePaginator, ActionColumn, ExpanderColumn, SelectionColumn, } from './Table';
|
|
76
78
|
export type { TableProps, TableFilterProps, TableFilterValue, DateRangeFilterOptions, FilterButtonBarProps, DefaultCellProps, EditableCellProps, TablePaginatorProps, TablePaginatorRendererProps, } from './Table';
|
|
77
79
|
export { Tag, TagContainer } from './Tag';
|
|
78
80
|
export type { TagProps, TagContainerProps } from './Tag';
|
package/cjs/core/index.js
CHANGED
|
@@ -3,9 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
exports.MiddleTextTruncation = exports.ColorValue = exports.useTheme = exports.getUserColor = exports.Wizard = exports.UserIconGroup = exports.UserIcon = exports.Text = exports.KbdKeys = void 0;
|
|
6
|
+
exports.MenuItem = exports.Menu = exports.LabeledTextarea = exports.LabeledSelect = exports.InputGroup = exports.LabeledInput = exports.Label = exports.Input = exports.InformationPanelContent = exports.InformationPanelBody = exports.InformationPanelHeader = exports.InformationPanelWrapper = exports.InformationPanel = exports.HorizontalTab = exports.HorizontalTabs = exports.Tab = exports.VerticalTabs = exports.HeaderLogo = exports.HeaderButton = exports.HeaderBreadcrumbs = exports.Header = exports.defaultFooterElements = exports.Footer = exports.FileUploadTemplate = exports.FileUpload = exports.Fieldset = exports.ExpandableBlock = exports.ErrorPage = exports.DropdownMenu = exports.Dialog = exports.generateLocalizedStrings = exports.DatePicker = exports.ComboBox = exports.ColorPalette = exports.ColorInputPanel = exports.ColorBuilder = exports.ColorSwatch = exports.ColorPicker = exports.Checkbox = exports.Carousel = exports.ButtonGroup = exports.SplitButton = exports.IdeasButton = exports.IconButton = exports.DropdownButton = exports.Button = exports.Breadcrumbs = exports.Badge = exports.Backdrop = exports.Alert = void 0;
|
|
7
|
+
exports.Blockquote = exports.Title = exports.Subheading = exports.Small = exports.Leading = exports.Headline = exports.Body = exports.Anchor = exports.TreeNodeExpander = exports.TreeNode = exports.Tree = exports.Tooltip = exports.ToggleSwitch = exports.ThemeProvider = exports.toaster = exports.TimePicker = exports.Tile = exports.Textarea = exports.TagContainer = exports.Tag = exports.SelectionColumn = exports.ExpanderColumn = exports.ActionColumn = exports.TablePaginator = exports.EditableCell = exports.DefaultCell = exports.FilterButtonBar = exports.BaseFilter = exports.tableFilters = exports.Table = exports.Surface = exports.StatusMessage = exports.Slider = exports.SkipToContentLink = exports.SidenavSubmenuHeader = exports.SidenavSubmenu = exports.SidenavButton = exports.SideNavigation = exports.Select = exports.RadioTileGroup = exports.RadioTile = exports.Radio = exports.ProgressRadial = exports.ProgressLinear = exports.ModalContent = exports.ModalButtonBar = exports.Modal = exports.MenuItemSkeleton = exports.MenuExtraContent = exports.MenuDivider = void 0;
|
|
8
|
+
exports.MiddleTextTruncation = exports.ColorValue = exports.useTheme = exports.getUserColor = exports.Wizard = exports.UserIconGroup = exports.UserIcon = exports.Text = exports.KbdKeys = exports.Kbd = exports.Code = void 0;
|
|
9
9
|
/*---------------------------------------------------------------------------------------------
|
|
10
10
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
11
11
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -41,6 +41,8 @@ Object.defineProperty(exports, "ComboBox", { enumerable: true, get: function ()
|
|
|
41
41
|
var DatePicker_1 = require("./DatePicker");
|
|
42
42
|
Object.defineProperty(exports, "DatePicker", { enumerable: true, get: function () { return DatePicker_1.DatePicker; } });
|
|
43
43
|
Object.defineProperty(exports, "generateLocalizedStrings", { enumerable: true, get: function () { return DatePicker_1.generateLocalizedStrings; } });
|
|
44
|
+
var Dialog_1 = require("./Dialog");
|
|
45
|
+
Object.defineProperty(exports, "Dialog", { enumerable: true, get: function () { return Dialog_1.Dialog; } });
|
|
44
46
|
var DropdownMenu_1 = require("./DropdownMenu");
|
|
45
47
|
Object.defineProperty(exports, "DropdownMenu", { enumerable: true, get: function () { return DropdownMenu_1.DropdownMenu; } });
|
|
46
48
|
var ErrorPage_1 = require("./ErrorPage");
|
|
@@ -119,6 +121,7 @@ Object.defineProperty(exports, "Surface", { enumerable: true, get: function () {
|
|
|
119
121
|
var Table_1 = require("./Table");
|
|
120
122
|
Object.defineProperty(exports, "Table", { enumerable: true, get: function () { return Table_1.Table; } });
|
|
121
123
|
Object.defineProperty(exports, "tableFilters", { enumerable: true, get: function () { return Table_1.tableFilters; } });
|
|
124
|
+
Object.defineProperty(exports, "BaseFilter", { enumerable: true, get: function () { return Table_1.BaseFilter; } });
|
|
122
125
|
Object.defineProperty(exports, "FilterButtonBar", { enumerable: true, get: function () { return Table_1.FilterButtonBar; } });
|
|
123
126
|
Object.defineProperty(exports, "DefaultCell", { enumerable: true, get: function () { return Table_1.DefaultCell; } });
|
|
124
127
|
Object.defineProperty(exports, "EditableCell", { enumerable: true, get: function () { return Table_1.EditableCell; } });
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare type ResizerProps = {
|
|
3
|
+
/**
|
|
4
|
+
* Ref of the element that is being resized.
|
|
5
|
+
*/
|
|
6
|
+
elementRef: React.RefObject<HTMLElement>;
|
|
7
|
+
/**
|
|
8
|
+
* Ref of the container element in order to avoid resizing past container boundaries.
|
|
9
|
+
* If not passed, viewport will be used.
|
|
10
|
+
*/
|
|
11
|
+
containerRef?: React.RefObject<HTMLElement>;
|
|
12
|
+
/**
|
|
13
|
+
* Callback that is being called on resize end.
|
|
14
|
+
* Useful to preserve state if element is being closed.
|
|
15
|
+
*/
|
|
16
|
+
onResizeEnd?: (style: React.CSSProperties) => void;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Component that allows to resize parent element.
|
|
20
|
+
* Parent must have `position: relative`.
|
|
21
|
+
* @private
|
|
22
|
+
* @example
|
|
23
|
+
* const ref = React.useRef<HTMLDivElement>(null);
|
|
24
|
+
* return (
|
|
25
|
+
* <div ref={ref} style={{ position: 'relative' }}>
|
|
26
|
+
* <Resizer elementRef={ref} />
|
|
27
|
+
* </div>
|
|
28
|
+
* );
|
|
29
|
+
*/
|
|
30
|
+
export declare const Resizer: (props: ResizerProps) => JSX.Element;
|
|
31
|
+
export default Resizer;
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Resizer = void 0;
|
|
7
|
+
/*---------------------------------------------------------------------------------------------
|
|
8
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
9
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
10
|
+
*--------------------------------------------------------------------------------------------*/
|
|
11
|
+
var react_1 = __importDefault(require("react"));
|
|
12
|
+
var functions_1 = require("../functions");
|
|
13
|
+
/**
|
|
14
|
+
* Component that allows to resize parent element.
|
|
15
|
+
* Parent must have `position: relative`.
|
|
16
|
+
* @private
|
|
17
|
+
* @example
|
|
18
|
+
* const ref = React.useRef<HTMLDivElement>(null);
|
|
19
|
+
* return (
|
|
20
|
+
* <div ref={ref} style={{ position: 'relative' }}>
|
|
21
|
+
* <Resizer elementRef={ref} />
|
|
22
|
+
* </div>
|
|
23
|
+
* );
|
|
24
|
+
*/
|
|
25
|
+
var Resizer = function (props) {
|
|
26
|
+
var elementRef = props.elementRef, containerRef = props.containerRef, onResizeEnd = props.onResizeEnd;
|
|
27
|
+
var onResizePointerDown = function (event) {
|
|
28
|
+
if (!elementRef.current || event.button !== 0) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
var initialPointerX = event.clientX;
|
|
32
|
+
var initialPointerY = event.clientY;
|
|
33
|
+
var _a = (0, functions_1.getTranslateValues)(elementRef.current), initialTranslateX = _a[0], initialTranslateY = _a[1];
|
|
34
|
+
var _b = elementRef.current.getBoundingClientRect(), initialWidth = _b.width, initialHeight = _b.height;
|
|
35
|
+
var width = "".concat(initialWidth, "px");
|
|
36
|
+
var height = "".concat(initialHeight, "px");
|
|
37
|
+
var translateX = initialTranslateX;
|
|
38
|
+
var translateY = initialTranslateY;
|
|
39
|
+
var minWidth = parseFloat(getComputedStyle(elementRef.current).minWidth);
|
|
40
|
+
var minHeight = parseFloat(getComputedStyle(elementRef.current).minHeight);
|
|
41
|
+
var resizer = event.currentTarget.dataset.iuiResizer;
|
|
42
|
+
var originalUserSelect = elementRef.current.ownerDocument.body.style.userSelect;
|
|
43
|
+
elementRef.current.ownerDocument.body.style.userSelect = 'none';
|
|
44
|
+
var onResizePointerMove = function (event) {
|
|
45
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
46
|
+
if (!elementRef.current) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
var containerRect = (_a = containerRef === null || containerRef === void 0 ? void 0 : containerRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
|
|
50
|
+
var clientX = (0, functions_1.getBoundedValue)(event.clientX, (_b = containerRect === null || containerRect === void 0 ? void 0 : containerRect.left) !== null && _b !== void 0 ? _b : 0, (_d = (_c = containerRect === null || containerRect === void 0 ? void 0 : containerRect.right) !== null && _c !== void 0 ? _c : elementRef.current.ownerDocument.documentElement.clientWidth) !== null && _d !== void 0 ? _d : 0);
|
|
51
|
+
var clientY = (0, functions_1.getBoundedValue)(event.clientY, (_e = containerRect === null || containerRect === void 0 ? void 0 : containerRect.top) !== null && _e !== void 0 ? _e : 0, (_g = (_f = containerRect === null || containerRect === void 0 ? void 0 : containerRect.bottom) !== null && _f !== void 0 ? _f : elementRef.current.ownerDocument.documentElement.clientHeight) !== null && _g !== void 0 ? _g : 0);
|
|
52
|
+
var diffX = initialPointerX - clientX;
|
|
53
|
+
var diffY = initialPointerY - clientY;
|
|
54
|
+
switch (resizer) {
|
|
55
|
+
case 'top-left': {
|
|
56
|
+
var newHeight = initialHeight + diffY;
|
|
57
|
+
if (newHeight >= minHeight) {
|
|
58
|
+
height = elementRef.current.style.height = "".concat(newHeight, "px");
|
|
59
|
+
translateY = initialTranslateY - diffY;
|
|
60
|
+
}
|
|
61
|
+
var newWidth = initialWidth + diffX;
|
|
62
|
+
if (newWidth >= minWidth) {
|
|
63
|
+
width = elementRef.current.style.width = "".concat(newWidth, "px");
|
|
64
|
+
translateX = initialTranslateX - diffX;
|
|
65
|
+
}
|
|
66
|
+
elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case 'top': {
|
|
70
|
+
var newHeight = initialHeight + diffY;
|
|
71
|
+
if (newHeight < minHeight) {
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
height = elementRef.current.style.height = "".concat(newHeight, "px");
|
|
75
|
+
translateY = initialTranslateY - diffY;
|
|
76
|
+
elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case 'top-right': {
|
|
80
|
+
var newHeight = initialHeight + diffY;
|
|
81
|
+
if (newHeight >= minHeight) {
|
|
82
|
+
height = elementRef.current.style.height = "".concat(newHeight, "px");
|
|
83
|
+
translateY = initialTranslateY - diffY;
|
|
84
|
+
}
|
|
85
|
+
width = elementRef.current.style.width = "".concat(initialWidth - diffX, "px");
|
|
86
|
+
elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case 'right': {
|
|
90
|
+
width = elementRef.current.style.width = "".concat(initialWidth - diffX, "px");
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case 'bottom-right': {
|
|
94
|
+
width = elementRef.current.style.width = "".concat(initialWidth - diffX, "px");
|
|
95
|
+
height = elementRef.current.style.height = "".concat(initialHeight - diffY, "px");
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case 'bottom': {
|
|
99
|
+
height = elementRef.current.style.height = "".concat(initialHeight - diffY, "px");
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case 'bottom-left': {
|
|
103
|
+
var newWidth = initialWidth + diffX;
|
|
104
|
+
if (newWidth >= minWidth) {
|
|
105
|
+
width = elementRef.current.style.width = "".concat(newWidth, "px");
|
|
106
|
+
translateX = initialTranslateX - diffX;
|
|
107
|
+
}
|
|
108
|
+
height = elementRef.current.style.height = "".concat(initialHeight - diffY, "px");
|
|
109
|
+
elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case 'left': {
|
|
113
|
+
var newWidth = initialWidth + diffX;
|
|
114
|
+
if (newWidth < minWidth) {
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
width = elementRef.current.style.width = "".concat(newWidth, "px");
|
|
118
|
+
translateX = initialTranslateX - diffX;
|
|
119
|
+
elementRef.current.style.transform = "translate(".concat(translateX, "px, ").concat(translateY, "px)");
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
default:
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
elementRef.current.ownerDocument.addEventListener('pointermove', onResizePointerMove);
|
|
127
|
+
elementRef.current.ownerDocument.addEventListener('pointerup', function () {
|
|
128
|
+
document.removeEventListener('pointermove', onResizePointerMove);
|
|
129
|
+
if (elementRef.current) {
|
|
130
|
+
elementRef.current.ownerDocument.body.style.userSelect = originalUserSelect;
|
|
131
|
+
onResizeEnd === null || onResizeEnd === void 0 ? void 0 : onResizeEnd({
|
|
132
|
+
width: width,
|
|
133
|
+
height: height,
|
|
134
|
+
transform: "translate(".concat(translateX, "px, ").concat(translateY, "px)"),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}, { once: true });
|
|
138
|
+
};
|
|
139
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
140
|
+
react_1.default.createElement("div", { "data-iui-resizer": 'top-left', onPointerDown: onResizePointerDown, style: {
|
|
141
|
+
position: 'absolute',
|
|
142
|
+
top: -4,
|
|
143
|
+
left: -4,
|
|
144
|
+
width: 12,
|
|
145
|
+
height: 12,
|
|
146
|
+
cursor: 'nw-resize',
|
|
147
|
+
} }),
|
|
148
|
+
react_1.default.createElement("div", { "data-iui-resizer": 'top', onPointerDown: onResizePointerDown, style: {
|
|
149
|
+
position: 'absolute',
|
|
150
|
+
top: -4,
|
|
151
|
+
left: 8,
|
|
152
|
+
right: 8,
|
|
153
|
+
height: 8,
|
|
154
|
+
cursor: 'n-resize',
|
|
155
|
+
} }),
|
|
156
|
+
react_1.default.createElement("div", { "data-iui-resizer": 'top-right', onPointerDown: onResizePointerDown, style: {
|
|
157
|
+
position: 'absolute',
|
|
158
|
+
top: -4,
|
|
159
|
+
right: -4,
|
|
160
|
+
width: 12,
|
|
161
|
+
height: 12,
|
|
162
|
+
cursor: 'ne-resize',
|
|
163
|
+
} }),
|
|
164
|
+
react_1.default.createElement("div", { "data-iui-resizer": 'right', onPointerDown: onResizePointerDown, style: {
|
|
165
|
+
position: 'absolute',
|
|
166
|
+
top: 8,
|
|
167
|
+
right: -4,
|
|
168
|
+
bottom: 8,
|
|
169
|
+
width: 8,
|
|
170
|
+
cursor: 'e-resize',
|
|
171
|
+
} }),
|
|
172
|
+
react_1.default.createElement("div", { "data-iui-resizer": 'bottom-right', onPointerDown: onResizePointerDown, style: {
|
|
173
|
+
position: 'absolute',
|
|
174
|
+
bottom: -4,
|
|
175
|
+
right: -4,
|
|
176
|
+
width: 12,
|
|
177
|
+
height: 12,
|
|
178
|
+
cursor: 'se-resize',
|
|
179
|
+
} }),
|
|
180
|
+
react_1.default.createElement("div", { "data-iui-resizer": 'bottom', onPointerDown: onResizePointerDown, style: {
|
|
181
|
+
position: 'absolute',
|
|
182
|
+
bottom: -4,
|
|
183
|
+
left: 8,
|
|
184
|
+
right: 8,
|
|
185
|
+
height: 8,
|
|
186
|
+
cursor: 's-resize',
|
|
187
|
+
} }),
|
|
188
|
+
react_1.default.createElement("div", { "data-iui-resizer": 'bottom-left', onPointerDown: onResizePointerDown, style: {
|
|
189
|
+
position: 'absolute',
|
|
190
|
+
bottom: -4,
|
|
191
|
+
left: -4,
|
|
192
|
+
width: 12,
|
|
193
|
+
height: 12,
|
|
194
|
+
cursor: 'sw-resize',
|
|
195
|
+
} }),
|
|
196
|
+
react_1.default.createElement("div", { "data-iui-resizer": 'left', onPointerDown: onResizePointerDown, style: {
|
|
197
|
+
position: 'absolute',
|
|
198
|
+
top: 8,
|
|
199
|
+
left: -4,
|
|
200
|
+
bottom: 8,
|
|
201
|
+
width: 8,
|
|
202
|
+
cursor: 'w-resize',
|
|
203
|
+
} })));
|
|
204
|
+
};
|
|
205
|
+
exports.Resizer = Resizer;
|
|
206
|
+
exports.default = exports.Resizer;
|
|
@@ -136,28 +136,6 @@ var useVirtualization = function (props) {
|
|
|
136
136
|
// Used to mark when scroll container has height (updated by resize observer)
|
|
137
137
|
// because before that calculations are not right
|
|
138
138
|
var _e = react_1.default.useState(false), isMounted = _e[0], setIsMounted = _e[1];
|
|
139
|
-
var onResize = react_1.default.useCallback(function (_a) {
|
|
140
|
-
var height = _a.height;
|
|
141
|
-
// Initial value returned by resize observer is 0
|
|
142
|
-
// So wait for the next one
|
|
143
|
-
if (height > 0) {
|
|
144
|
-
setIsMounted(true);
|
|
145
|
-
}
|
|
146
|
-
setScrollContainerHeight(height);
|
|
147
|
-
}, []);
|
|
148
|
-
var _f = (0, useResizeObserver_1.useResizeObserver)(onResize), resizeRef = _f[0], resizeObserver = _f[1];
|
|
149
|
-
// Find scrollable parent
|
|
150
|
-
// Needed only on init
|
|
151
|
-
react_1.default.useLayoutEffect(function () {
|
|
152
|
-
var _a;
|
|
153
|
-
var scrollableParent = getScrollableParent(parentRef.current, (_a = parentRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument);
|
|
154
|
-
scrollContainer.current = scrollableParent;
|
|
155
|
-
resizeRef(scrollableParent);
|
|
156
|
-
}, [resizeRef]);
|
|
157
|
-
// Stop watching resize, when virtual scroll is unmounted
|
|
158
|
-
react_1.default.useLayoutEffect(function () {
|
|
159
|
-
return function () { return resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect(); };
|
|
160
|
-
}, [resizeObserver]);
|
|
161
139
|
var getScrollableContainer = function () {
|
|
162
140
|
var _a, _b;
|
|
163
141
|
return (_a = scrollContainer.current) !== null && _a !== void 0 ? _a : (_b = parentRef.current) === null || _b === void 0 ? void 0 : _b.ownerDocument.scrollingElement;
|
|
@@ -170,8 +148,7 @@ var useVirtualization = function (props) {
|
|
|
170
148
|
}
|
|
171
149
|
return arr;
|
|
172
150
|
}, [itemsLength, itemRenderer, bufferSize, startNode, visibleNodeCount]);
|
|
173
|
-
|
|
174
|
-
react_1.default.useLayoutEffect(function () {
|
|
151
|
+
var updateChildHeight = react_1.default.useCallback(function () {
|
|
175
152
|
var _a, _b, _c, _d, _e, _f;
|
|
176
153
|
if (!parentRef.current || !visibleChildren.length) {
|
|
177
154
|
return;
|
|
@@ -186,6 +163,31 @@ var useVirtualization = function (props) {
|
|
|
186
163
|
last: Number((_f = (_e = getElementHeightWithMargins(lastChild)) === null || _e === void 0 ? void 0 : _e.toFixed(2)) !== null && _f !== void 0 ? _f : firstChildHeight),
|
|
187
164
|
};
|
|
188
165
|
}, [visibleChildren.length]);
|
|
166
|
+
var onResize = react_1.default.useCallback(function (_a) {
|
|
167
|
+
var height = _a.height;
|
|
168
|
+
// Initial value returned by resize observer is 0
|
|
169
|
+
// So wait for the next one
|
|
170
|
+
if (height > 0) {
|
|
171
|
+
setIsMounted(true);
|
|
172
|
+
}
|
|
173
|
+
setScrollContainerHeight(height);
|
|
174
|
+
updateChildHeight();
|
|
175
|
+
}, [updateChildHeight]);
|
|
176
|
+
var _f = (0, useResizeObserver_1.useResizeObserver)(onResize), resizeRef = _f[0], resizeObserver = _f[1];
|
|
177
|
+
// Find scrollable parent
|
|
178
|
+
// Needed only on init
|
|
179
|
+
react_1.default.useLayoutEffect(function () {
|
|
180
|
+
var _a;
|
|
181
|
+
var scrollableParent = getScrollableParent(parentRef.current, (_a = parentRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument);
|
|
182
|
+
scrollContainer.current = scrollableParent;
|
|
183
|
+
resizeRef(scrollableParent);
|
|
184
|
+
}, [resizeRef]);
|
|
185
|
+
// Stop watching resize, when virtual scroll is unmounted
|
|
186
|
+
react_1.default.useLayoutEffect(function () {
|
|
187
|
+
return function () { return resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect(); };
|
|
188
|
+
}, [resizeObserver]);
|
|
189
|
+
// Get child height when children available
|
|
190
|
+
react_1.default.useLayoutEffect(function () { return updateChildHeight(); }, [updateChildHeight]);
|
|
189
191
|
var updateVirtualScroll = react_1.default.useCallback(function () {
|
|
190
192
|
var scrollableContainer = getScrollableContainer();
|
|
191
193
|
if (!scrollableContainer) {
|