@yakad/ui 1.3.138 → 1.3.139
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/RenderByVisibility/RenderByVisibility.d.ts +2 -2
- package/dist/RenderByVisibility/RenderByVisibility.js +36 -30
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/package.json +1 -1
- package/dist/LoadingControl/LoadingControl.d.ts +0 -12
- package/dist/LoadingControl/LoadingControl.js +0 -95
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export interface RenderByVisibilityProps {
|
|
3
3
|
extraRender?: number;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
jumpToIndex?: number;
|
|
5
|
+
stopNewRenders?: boolean;
|
|
6
6
|
newChildRendered?: (index: number) => void;
|
|
7
7
|
children?: React.ReactNode;
|
|
8
8
|
}
|
|
@@ -15,11 +15,17 @@ import React, { forwardRef, useEffect, useRef, useState } from "react";
|
|
|
15
15
|
import { Card, LoadingIcon, Stack, WithInteractions } from "..";
|
|
16
16
|
const data = Array.from({ length: 78 });
|
|
17
17
|
export const RenderByVisibility = forwardRef(function RenderByVisibility(_a, ref) {
|
|
18
|
-
var { extraRender = 5,
|
|
18
|
+
var { extraRender = 5, jumpToIndex = 0, stopNewRenders, newChildRendered, children } = _a, restProps = __rest(_a, ["extraRender", "jumpToIndex", "stopNewRenders", "newChildRendered", "children"]);
|
|
19
19
|
const childRefs = useRef({});
|
|
20
|
+
const scrollTo = (i) => {
|
|
21
|
+
var _a;
|
|
22
|
+
return (_a = childRefs.current[i]) === null || _a === void 0 ? void 0 : _a.scrollIntoView({
|
|
23
|
+
behavior: "smooth",
|
|
24
|
+
});
|
|
25
|
+
};
|
|
20
26
|
const childrenArray = React.Children.toArray(children);
|
|
21
27
|
// Collect Visibility Status
|
|
22
|
-
const [visibled, setVisibled] = useState({ lowest:
|
|
28
|
+
const [visibled, setVisibled] = useState({ lowest: jumpToIndex, highest: jumpToIndex });
|
|
23
29
|
const handleOnVisible = (i) => {
|
|
24
30
|
if (i < visibled.lowest)
|
|
25
31
|
setVisibled(Object.assign(Object.assign({}, visibled), { lowest: i }));
|
|
@@ -27,43 +33,43 @@ export const RenderByVisibility = forwardRef(function RenderByVisibility(_a, ref
|
|
|
27
33
|
setVisibled(Object.assign(Object.assign({}, visibled), { highest: i }));
|
|
28
34
|
};
|
|
29
35
|
// Collect Rendered Childs Status
|
|
30
|
-
const [rendered, setRendered] = useState({ lowest:
|
|
36
|
+
const [rendered, setRendered] = useState({ lowest: jumpToIndex, highest: jumpToIndex });
|
|
31
37
|
// Calculate Over Screen Renders
|
|
32
38
|
const overRenderedOnLowSide = visibled.lowest - rendered.lowest;
|
|
33
39
|
const overRenderedOnHighSide = rendered.highest - visibled.highest;
|
|
40
|
+
// Render new Childs if needed
|
|
34
41
|
useEffect(() => {
|
|
35
|
-
if (!
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
if (!stopNewRenders) {
|
|
43
|
+
if (overRenderedOnHighSide <= overRenderedOnLowSide) {
|
|
44
|
+
if (rendered.highest < data.length &&
|
|
45
|
+
overRenderedOnHighSide < extraRender) {
|
|
46
|
+
setRendered(Object.assign(Object.assign({}, rendered), { highest: rendered.highest + 1 }));
|
|
47
|
+
newChildRendered === null || newChildRendered === void 0 ? void 0 : newChildRendered(rendered.highest + 1);
|
|
48
|
+
}
|
|
40
49
|
}
|
|
41
|
-
else
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
else {
|
|
51
|
+
if (rendered.lowest > 0 &&
|
|
52
|
+
overRenderedOnLowSide < extraRender) {
|
|
53
|
+
setRendered(Object.assign(Object.assign({}, rendered), { lowest: rendered.lowest - 1 }));
|
|
54
|
+
newChildRendered === null || newChildRendered === void 0 ? void 0 : newChildRendered(rendered.lowest - 1);
|
|
55
|
+
if (overRenderedOnLowSide === 0)
|
|
56
|
+
scrollTo(visibled.lowest);
|
|
57
|
+
}
|
|
45
58
|
}
|
|
46
59
|
}
|
|
47
|
-
}, [visibled, rendered,
|
|
48
|
-
|
|
49
|
-
var _a;
|
|
50
|
-
if (overRenderedOnHighSide == 1) {
|
|
51
|
-
(_a = childRefs.current[jump]) === null || _a === void 0 ? void 0 : _a.scrollIntoView();
|
|
52
|
-
console.log("SCROLL TO JUMP");
|
|
53
|
-
}
|
|
54
|
-
}, [overRenderedOnHighSide]);
|
|
60
|
+
}, [visibled, rendered, stopNewRenders]);
|
|
61
|
+
// Scroll to jumpToIndex
|
|
55
62
|
useEffect(() => {
|
|
56
63
|
var _a;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
console.log("
|
|
63
|
-
|
|
64
|
-
console.log("stopRendering", stopRendering);
|
|
65
|
-
return (_jsxs(Stack, Object.assign({ ref: ref }, restProps, { children: [rendered.lowest > 0 && (_jsx(Stack, { style: { height: "20rem" }, children: _jsx(LoadingIcon, { variant: "dots", size: "extraLarge" }) })), childrenArray.map((child, i) => i >= rendered.lowest &&
|
|
64
|
+
(_a = childRefs.current[jumpToIndex]) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
|
|
65
|
+
console.log("SCROLL TO JUMPToIndex:", jumpToIndex);
|
|
66
|
+
}, [jumpToIndex]);
|
|
67
|
+
// console.log("visibled", visibled);
|
|
68
|
+
// console.log("rendered", rendered);
|
|
69
|
+
// console.log("stopNewRenders", stopNewRenders);
|
|
70
|
+
return (_jsxs(Stack, Object.assign({ ref: ref }, restProps, { style: { minHeight: "100vh" }, children: [rendered.lowest > 0 && _jsx(LoadingBox, {}), childrenArray.map((child, i) => i >= rendered.lowest &&
|
|
66
71
|
i <= rendered.highest && (_jsx(WithInteractions, { ref: (el) => {
|
|
67
72
|
childRefs.current[i] = el;
|
|
68
|
-
}, onVisible: () => handleOnVisible(i), children: child }, i))), rendered.highest < data.length &&
|
|
73
|
+
}, onVisible: () => handleOnVisible(i), children: child }, i))), rendered.highest < data.length && _jsx(LoadingBox, {})] })));
|
|
69
74
|
});
|
|
75
|
+
const LoadingBox = () => (_jsx(Card, { style: { height: "15rem" }, children: _jsx(LoadingIcon, { variant: "dots", size: "extraLarge" }) }));
|
package/dist/index.d.ts
CHANGED
|
@@ -32,7 +32,6 @@ export * from "./WithInteractions/WithInteractions";
|
|
|
32
32
|
export * from "./WithOverlay/WithOverlay";
|
|
33
33
|
export * from "./Dropdown/Dropdown";
|
|
34
34
|
export * from "./Popup/Popup";
|
|
35
|
-
export * from "./LoadingControl/LoadingControl";
|
|
36
35
|
export * from "./RenderByVisibility/RenderByVisibility";
|
|
37
36
|
export * from "./DisplayOnVisible/DisplayOnVisible";
|
|
38
37
|
export * from "./RenderOnVisible/RenderOnVisible";
|
package/dist/index.js
CHANGED
|
@@ -39,7 +39,6 @@ export * from "./WithOverlay/WithOverlay";
|
|
|
39
39
|
export * from "./Dropdown/Dropdown";
|
|
40
40
|
export * from "./Popup/Popup";
|
|
41
41
|
// Loading Control
|
|
42
|
-
export * from "./LoadingControl/LoadingControl";
|
|
43
42
|
export * from "./RenderByVisibility/RenderByVisibility";
|
|
44
43
|
export * from "./DisplayOnVisible/DisplayOnVisible";
|
|
45
44
|
export * from "./RenderOnVisible/RenderOnVisible";
|
package/package.json
CHANGED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
type LoadingControlChildren = React.ReactElement<{
|
|
3
|
-
index?: number;
|
|
4
|
-
}>;
|
|
5
|
-
export interface LoadingControlProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
6
|
-
align?: "start" | "space" | "center" | "end";
|
|
7
|
-
fullWidth?: boolean;
|
|
8
|
-
loadingLimit?: number;
|
|
9
|
-
children: LoadingControlChildren;
|
|
10
|
-
}
|
|
11
|
-
export declare const LoadingControl: React.ForwardRefExoticComponent<LoadingControlProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
-
export {};
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
-
var t = {};
|
|
4
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
-
t[p] = s[p];
|
|
6
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
-
t[p[i]] = s[p[i]];
|
|
10
|
-
}
|
|
11
|
-
return t;
|
|
12
|
-
};
|
|
13
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
|
-
import React, { forwardRef, useEffect, useState } from "react";
|
|
15
|
-
import classNames from "classnames";
|
|
16
|
-
import boxingStyles from "../boxing.module.css";
|
|
17
|
-
import { DisplayOnVisible } from "..";
|
|
18
|
-
export const LoadingControl = forwardRef(function LoadingControl(_a, ref) {
|
|
19
|
-
var { align, fullWidth = true, loadingLimit = 200, className, children } = _a, restProps = __rest(_a, ["align", "fullWidth", "loadingLimit", "className", "children"]);
|
|
20
|
-
const [maxTotalVisibledItems, setMaxTotalVisibledItems] = useState(3); // Min: default
|
|
21
|
-
const extraLoading = maxTotalVisibledItems * 2;
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
23
|
-
const [loadedItems, setLoadedItems] = useState([
|
|
24
|
-
React.cloneElement(children, {
|
|
25
|
-
index: 0,
|
|
26
|
-
}),
|
|
27
|
-
]);
|
|
28
|
-
const [visibilityStatus, setVisibilityStatus] = useState({});
|
|
29
|
-
const handleOnVisibilityChange = (visible, i) => {
|
|
30
|
-
if (i !== undefined)
|
|
31
|
-
if (visibilityStatus[i] !== visible)
|
|
32
|
-
setVisibilityStatus((prev) => (Object.assign(Object.assign({}, prev), { [i]: visible })));
|
|
33
|
-
};
|
|
34
|
-
const visibleIndexes = Object.entries(visibilityStatus)
|
|
35
|
-
// eslint-disable-next-line
|
|
36
|
-
.filter(([_, isVisible]) => isVisible)
|
|
37
|
-
.map(([index]) => parseInt(index));
|
|
38
|
-
const visibleCount = Object.values(visibilityStatus).filter(Boolean).length;
|
|
39
|
-
const lowestVisibleItemIndex = visibleIndexes.length
|
|
40
|
-
? Math.min(...visibleIndexes)
|
|
41
|
-
: 0;
|
|
42
|
-
const highestVisibleItemIndex = visibleIndexes.length
|
|
43
|
-
? Math.max(...visibleIndexes)
|
|
44
|
-
: 0;
|
|
45
|
-
const lowestLoadedItemIndex = loadedItems[0].props.index;
|
|
46
|
-
const highestLoadedItemIndex = loadedItems[loadedItems.length - 1].props.index;
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
if (highestLoadedItemIndex < loadingLimit &&
|
|
49
|
-
highestLoadedItemIndex < highestVisibleItemIndex + extraLoading) {
|
|
50
|
-
setLoadedItems([
|
|
51
|
-
...loadedItems,
|
|
52
|
-
React.cloneElement(children, {
|
|
53
|
-
index: highestLoadedItemIndex + 1,
|
|
54
|
-
}),
|
|
55
|
-
].slice(
|
|
56
|
-
// Slice from start
|
|
57
|
-
lowestVisibleItemIndex - lowestLoadedItemIndex >
|
|
58
|
-
extraLoading
|
|
59
|
-
? 1
|
|
60
|
-
: 0));
|
|
61
|
-
console.log(">>>>>>>>>>>>>>>>>>>>>>>> ++++ Item ", highestLoadedItemIndex + 1, " Added to end");
|
|
62
|
-
}
|
|
63
|
-
if (lowestLoadedItemIndex > 0 &&
|
|
64
|
-
lowestLoadedItemIndex > lowestVisibleItemIndex - extraLoading) {
|
|
65
|
-
setLoadedItems([
|
|
66
|
-
React.cloneElement(children, {
|
|
67
|
-
index: lowestLoadedItemIndex - 1,
|
|
68
|
-
}),
|
|
69
|
-
...loadedItems,
|
|
70
|
-
].slice(
|
|
71
|
-
// Slice from end
|
|
72
|
-
0, highestLoadedItemIndex - highestVisibleItemIndex >
|
|
73
|
-
extraLoading
|
|
74
|
-
? -1
|
|
75
|
-
: undefined));
|
|
76
|
-
console.log(">>>>>>>>>>>> ---- Item ", lowestLoadedItemIndex - 1, " Added to start");
|
|
77
|
-
}
|
|
78
|
-
if (visibleCount > maxTotalVisibledItems) {
|
|
79
|
-
setMaxTotalVisibledItems(visibleCount);
|
|
80
|
-
}
|
|
81
|
-
// eslint-disable-next-line
|
|
82
|
-
}, [visibilityStatus]);
|
|
83
|
-
console.log("###### ", "Total Loaded:", loadedItems.length, "extraLoading:", extraLoading, " ##### ", "L:", lowestLoadedItemIndex, "V:", lowestVisibleItemIndex, "D:", -(lowestLoadedItemIndex - lowestVisibleItemIndex), "|", "V:", visibleCount, "|", "D:", highestLoadedItemIndex - highestVisibleItemIndex, "V:", highestVisibleItemIndex, "L:", highestLoadedItemIndex);
|
|
84
|
-
// console.log("visibilityStatus", visibilityStatus);
|
|
85
|
-
// console.log(
|
|
86
|
-
// "loadedItems",
|
|
87
|
-
// loadedItems.map((item) => item.props.index)
|
|
88
|
-
// );
|
|
89
|
-
// console.log(
|
|
90
|
-
// "visibilityStatus.length",
|
|
91
|
-
// Object.keys(visibilityStatus).length
|
|
92
|
-
// );
|
|
93
|
-
const joinedClassNames = classNames(boxingStyles.flexColumnBox, { [boxingStyles[align]]: align }, { fullWidth: fullWidth }, className);
|
|
94
|
-
return (_jsx("div", Object.assign({ ref: ref, className: joinedClassNames }, restProps, { children: loadedItems.map((item) => (_jsx(DisplayOnVisible, { onVisibilityChange: (visible) => handleOnVisibilityChange(visible, item.props.index), children: item }, item.props.index))) })));
|
|
95
|
-
});
|