@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.
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
2
  export interface RenderByVisibilityProps {
3
3
  extraRender?: number;
4
- jump?: number;
5
- stopRendering?: boolean;
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, jump = 0, stopRendering, newChildRendered, children } = _a, restProps = __rest(_a, ["extraRender", "jump", "stopRendering", "newChildRendered", "children"]);
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: jump, highest: jump });
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: jump, highest: jump });
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 (!stopRendering) {
36
- if (rendered.highest < data.length &&
37
- overRenderedOnHighSide < extraRender) {
38
- setRendered(Object.assign(Object.assign({}, rendered), { highest: rendered.highest + 1 }));
39
- newChildRendered === null || newChildRendered === void 0 ? void 0 : newChildRendered(rendered.highest + 1);
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 if (rendered.lowest > 0 &&
42
- overRenderedOnLowSide < extraRender) {
43
- setRendered(Object.assign(Object.assign({}, rendered), { lowest: rendered.lowest - 1 }));
44
- newChildRendered === null || newChildRendered === void 0 ? void 0 : newChildRendered(rendered.lowest - 1);
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, stopRendering]);
48
- useEffect(() => {
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
- if (overRenderedOnHighSide == 1) {
58
- (_a = childRefs.current[jump]) === null || _a === void 0 ? void 0 : _a.scrollIntoView();
59
- console.log("SCROLL TO JUMP");
60
- }
61
- }, [overRenderedOnHighSide]);
62
- console.log("visibled", visibled);
63
- console.log("rendered", rendered);
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 && (_jsx(Card, { children: _jsx(LoadingIcon, { variant: "dots", size: "extraLarge" }) }))] })));
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@yakad/ui",
3
- "version": "1.3.138",
3
+ "version": "1.3.139",
4
4
  "private": false,
5
5
  "author": "Natiq",
6
6
  "description": "UI components for NextJS/React",
@@ -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
- });