onekijs-ui 1.0.2 → 1.0.4
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/components/list/typings.d.ts +1 -1
- package/dist/components/select/SelectService.d.ts +3 -3
- package/dist/components/tree/components/VirtualTreeListComponent.d.ts +1 -1
- package/dist/components/wizard/WizardModal.d.ts +2 -2
- package/dist/components/wizard/index.d.ts +2 -2
- package/dist/index.js +53 -17
- package/dist/index.js.map +1 -1
- package/dist/index.module.js +53 -17
- package/dist/index.module.js.map +1 -1
- package/package.json +3 -3
- package/src/components/list/components/ListBodyComponent.tsx +1 -0
- package/src/components/list/components/VirtualListComponent.tsx +2 -0
- package/src/components/list/hooks/useListView.tsx +0 -2
- package/src/components/list/typings.ts +1 -1
- package/src/components/table/components/FormTableComponent.tsx +1 -1
- package/src/components/tooltip/components/TooltipComponent.tsx +7 -2
- package/src/components/tree/components/VirtualTreeListComponent.tsx +61 -24
- package/src/vendor/reactVirtual.js +12 -3
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "onekijs-ui",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.4",
|
|
5
5
|
"description": "Advanced React Web Components",
|
|
6
6
|
"source": "src/index.ts",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@floating-ui/react": "^0.27.20",
|
|
36
36
|
"@popperjs/core": "^2.11.8",
|
|
37
37
|
"@reach/observe-rect": "^1.2.0",
|
|
38
|
-
"onekijs-framework": "^1.0.
|
|
38
|
+
"onekijs-framework": "^1.0.3",
|
|
39
39
|
"react-virtualized-auto-sizer": "^2.0.3",
|
|
40
40
|
"react-window": "^2.2.7",
|
|
41
41
|
"react-window-infinite-loader": "^2.0.1",
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"react-dom": "^19.2.7"
|
|
51
51
|
},
|
|
52
52
|
"sideEffects": false,
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "5445ab48458ab994b8e76660fa897af57e34f51a"
|
|
54
54
|
}
|
|
@@ -23,6 +23,7 @@ const findItemIndex = (items?: (Item<unknown> | undefined)[], uid?: string): num
|
|
|
23
23
|
});
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
|
|
26
27
|
const ListBodyComponent = <T extends any = any, I extends ListItem<T> = ListItem<T>>({
|
|
27
28
|
autoRefresh,
|
|
28
29
|
bodyRef,
|
|
@@ -4,6 +4,7 @@ import { ListItem, VirtualItemWrapperProps, VirtualListProps } from '../typings'
|
|
|
4
4
|
import ListItemComponent, { ListItemContent } from './ListItemComponent';
|
|
5
5
|
import LoadingItem from './LoadingItem';
|
|
6
6
|
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
|
|
7
8
|
const VirtualItemWrapper = <T extends any = any, I extends ListItem<T> = ListItem<T>>({
|
|
8
9
|
virtualItem,
|
|
9
10
|
listItem,
|
|
@@ -83,6 +84,7 @@ const VirtualItemWrapper = <T extends any = any, I extends ListItem<T> = ListIte
|
|
|
83
84
|
);
|
|
84
85
|
};
|
|
85
86
|
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
|
|
86
88
|
const VirtualListComponent = <T extends any = any, I extends ListItem<T> = ListItem<T>>({
|
|
87
89
|
items,
|
|
88
90
|
ItemComponent = ListItemComponent,
|
|
@@ -50,7 +50,6 @@ const useListView: <T = any, I extends Item<T> = Item<T>>(
|
|
|
50
50
|
}
|
|
51
51
|
return itemHeight;
|
|
52
52
|
},
|
|
53
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
53
|
[itemHeight],
|
|
55
54
|
);
|
|
56
55
|
|
|
@@ -61,7 +60,6 @@ const useListView: <T = any, I extends Item<T> = Item<T>>(
|
|
|
61
60
|
const fn = keyExtractor || defaultKeyExtractor;
|
|
62
61
|
return fn(index);
|
|
63
62
|
},
|
|
64
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
65
63
|
[keyExtractor, force],
|
|
66
64
|
);
|
|
67
65
|
|
|
@@ -125,7 +125,7 @@ export type ListConfig<T = any, I extends ListItem<T> = ListItem<T>> = {
|
|
|
125
125
|
onItemUnselect?: ListItemHandler<T, I>;
|
|
126
126
|
paddingEnd?: number;
|
|
127
127
|
paddingStart?: number;
|
|
128
|
-
parentRef?: React.RefObject<HTMLDivElement>;
|
|
128
|
+
parentRef?: React.RefObject<HTMLDivElement | null>;
|
|
129
129
|
overscan?: number;
|
|
130
130
|
preload?: number;
|
|
131
131
|
style?: React.CSSProperties;
|
|
@@ -24,7 +24,7 @@ const DefaultDeleteRowComponent: React.FC<TableBodyCellProps> = ({ rowIndex }) =
|
|
|
24
24
|
|
|
25
25
|
const metadata = useFormMetadata(tableName);
|
|
26
26
|
let disabled = false;
|
|
27
|
-
if (metadata.readOnly || (metadata.editable === false && form.config.reconfigure)) {
|
|
27
|
+
if (metadata.disabled || metadata.readOnly || (metadata.editable === false && form.config.reconfigure)) {
|
|
28
28
|
disabled = true;
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -22,7 +22,7 @@ const TooltipComponent: FCC<TooltipProps> = (props) => {
|
|
|
22
22
|
const [show, setShow] = useState<boolean>(true);
|
|
23
23
|
const [open, setOpen] = useState(false);
|
|
24
24
|
const arrowRef = useRef<HTMLDivElement | null>(null);
|
|
25
|
-
const { context, floatingStyles, middlewareData, refs } = useFloating({
|
|
25
|
+
const { context, floatingStyles, middlewareData, placement: resolvedPlacement, refs } = useFloating({
|
|
26
26
|
open,
|
|
27
27
|
onOpenChange: setOpen,
|
|
28
28
|
placement,
|
|
@@ -59,7 +59,12 @@ const TooltipComponent: FCC<TooltipProps> = (props) => {
|
|
|
59
59
|
}, [uid]);
|
|
60
60
|
|
|
61
61
|
const element = (
|
|
62
|
-
<div
|
|
62
|
+
<div
|
|
63
|
+
ref={refs.setFloating}
|
|
64
|
+
style={floatingStyles}
|
|
65
|
+
data-popper-placement={resolvedPlacement}
|
|
66
|
+
{...getFloatingProps({ className: 'o-tooltip-container' })}
|
|
67
|
+
>
|
|
63
68
|
<div
|
|
64
69
|
ref={arrowRef}
|
|
65
70
|
className="o-tooltip-arrow"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AnonymousObject, useLogger } from 'onekijs-framework';
|
|
2
|
-
import React, { useRef } from 'react';
|
|
1
|
+
import { AnonymousObject, useLogger, useThrottle } from 'onekijs-framework';
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
3
3
|
import { CSSTransition } from 'react-transition-group';
|
|
4
4
|
import LoadingItem from '../../list/components/LoadingItem';
|
|
5
5
|
import { ListItemProps, VirtualItem } from '../../list/typings';
|
|
@@ -27,7 +27,8 @@ type VirtualTreeListItemProps<T = any, I extends TreeItem<T> = TreeItem<T>> = {
|
|
|
27
27
|
defer?: () => void;
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
|
|
31
|
+
const VirtualTreeListItemComponent = <T extends any = any, I extends TreeItem<T> = TreeItem<T>>({
|
|
31
32
|
itemClassName,
|
|
32
33
|
ItemComponent,
|
|
33
34
|
virtualItem,
|
|
@@ -40,6 +41,8 @@ const VirtualTreeListItemComponent = <T = any, I extends TreeItem<T> = TreeItem<
|
|
|
40
41
|
const service = useTreeService();
|
|
41
42
|
const { animate } = useTreeConfig();
|
|
42
43
|
const childrenRef = useRef<HTMLDivElement | null>(null);
|
|
44
|
+
const ref = useRef<HTMLDivElement | null>(null);
|
|
45
|
+
const previousHeightRef = useRef<number | undefined>(undefined);
|
|
43
46
|
|
|
44
47
|
const expand: TreeItemHandler<T, I> = (item, index) => {
|
|
45
48
|
if (animate) {
|
|
@@ -81,29 +84,62 @@ const VirtualTreeListItemComponent = <T = any, I extends TreeItem<T> = TreeItem<
|
|
|
81
84
|
|
|
82
85
|
const expanded = !!(item && isTreeItemExpanded(item, service));
|
|
83
86
|
|
|
87
|
+
const measure = useCallback(
|
|
88
|
+
(el: HTMLElement | null) => {
|
|
89
|
+
if (el?.offsetHeight !== previousHeightRef.current && el?.offsetHeight) {
|
|
90
|
+
previousHeightRef.current = el.offsetHeight;
|
|
91
|
+
measureRef(el);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
[measureRef],
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
const measureThrottle = useThrottle(measure, 50);
|
|
98
|
+
|
|
99
|
+
const resizeObserver = useMemo(() => {
|
|
100
|
+
return new ResizeObserver(() => {
|
|
101
|
+
measureThrottle(ref.current);
|
|
102
|
+
});
|
|
103
|
+
}, [measureThrottle]);
|
|
104
|
+
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
const el = ref.current;
|
|
107
|
+
if (el) {
|
|
108
|
+
previousHeightRef.current = el.offsetHeight;
|
|
109
|
+
resizeObserver.observe(el);
|
|
110
|
+
}
|
|
111
|
+
return () => {
|
|
112
|
+
if (el) {
|
|
113
|
+
resizeObserver.unobserve(el);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}, [resizeObserver]);
|
|
117
|
+
|
|
84
118
|
return (
|
|
85
119
|
<div>
|
|
86
120
|
<div className="o-virtual-item" key={`virtual-item-${item?.uid || index}`} ref={measureRef}>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
121
|
+
<div ref={ref}>
|
|
122
|
+
{(!item || !item.data) && <LoadingItem />}
|
|
123
|
+
{item && item.data && (
|
|
124
|
+
<DefaultTreeItemContext.Provider
|
|
125
|
+
value={{
|
|
126
|
+
onExpand: expand,
|
|
127
|
+
onCollapse: collapse,
|
|
128
|
+
className,
|
|
129
|
+
}}
|
|
130
|
+
>
|
|
131
|
+
<ItemComponent
|
|
132
|
+
key={`item-${item?.uid || index}`}
|
|
133
|
+
index={index}
|
|
134
|
+
item={item}
|
|
135
|
+
data={item.data}
|
|
136
|
+
onClick={onClick}
|
|
137
|
+
onMouseEnter={onMouseEnter}
|
|
138
|
+
onMouseLeave={onMouseLeave}
|
|
139
|
+
/>
|
|
140
|
+
</DefaultTreeItemContext.Provider>
|
|
141
|
+
)}
|
|
142
|
+
</div>
|
|
107
143
|
</div>
|
|
108
144
|
<CSSTransition
|
|
109
145
|
in={expanded}
|
|
@@ -153,7 +189,8 @@ type NodeItem = {
|
|
|
153
189
|
level: number;
|
|
154
190
|
};
|
|
155
191
|
|
|
156
|
-
|
|
192
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
|
|
193
|
+
const VirtualTreeListComponent = <T extends any = any, I extends TreeItem<T> = TreeItem<T>>({
|
|
157
194
|
items,
|
|
158
195
|
onItemClick,
|
|
159
196
|
onItemMouseEnter,
|
|
@@ -31,7 +31,10 @@ export const useElementScroll = ({ parentRef, horizontal, useObserver, initialRe
|
|
|
31
31
|
const [element, setElement] = React.useState(parentRef.current);
|
|
32
32
|
|
|
33
33
|
useIsomorphicLayoutEffect(() => {
|
|
34
|
-
|
|
34
|
+
const currentElement = parentRef.current;
|
|
35
|
+
if (currentElement !== element) {
|
|
36
|
+
setElement(currentElement);
|
|
37
|
+
}
|
|
35
38
|
});
|
|
36
39
|
|
|
37
40
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -84,7 +87,10 @@ const useWindowRect = (windowRef, initialRect = { width: 0, height: 0 }) => {
|
|
|
84
87
|
const [element, setElement] = React.useState(windowRef.current);
|
|
85
88
|
|
|
86
89
|
useIsomorphicLayoutEffect(() => {
|
|
87
|
-
|
|
90
|
+
const currentElement = windowRef.current;
|
|
91
|
+
if (currentElement !== element) {
|
|
92
|
+
setElement(currentElement);
|
|
93
|
+
}
|
|
88
94
|
});
|
|
89
95
|
|
|
90
96
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -122,7 +128,10 @@ export const useWindowScroll = ({ windowRef, parentRef, horizontal, useWindowObs
|
|
|
122
128
|
const scrollKey = horizontal ? 'scrollX' : 'scrollY';
|
|
123
129
|
|
|
124
130
|
useIsomorphicLayoutEffect(() => {
|
|
125
|
-
|
|
131
|
+
const currentElement = windowRef.current;
|
|
132
|
+
if (currentElement !== element) {
|
|
133
|
+
setElement(currentElement);
|
|
134
|
+
}
|
|
126
135
|
});
|
|
127
136
|
|
|
128
137
|
useIsomorphicLayoutEffect(() => {
|