grep-components 1.7.0 → 1.8.2

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.
@@ -14,6 +14,8 @@ export interface GrepTableOfContentNavTreeNodeProps {
14
14
  className?: string;
15
15
  style?: React.CSSProperties;
16
16
  renderChilds: (children: ContextTree) => ReactElement;
17
+ setSelectedValue: (selected: any) => void;
18
+ percentageRendered: number;
17
19
  }
18
20
  export declare const GrepTableOfContentNavTreeNode: React.FC<GrepTableOfContentNavTreeNodeProps>;
19
21
  export default GrepTableOfContentNavTreeNode;
@@ -4,6 +4,8 @@ interface Props {
4
4
  elements: ContextTree;
5
5
  className?: string;
6
6
  style?: React.CSSProperties;
7
+ setSelectedValue: (selected: any) => void;
8
+ percentageRendered: number;
7
9
  }
8
10
  declare const NavTree: React.FC<Props>;
9
11
  export default NavTree;
@@ -2,6 +2,8 @@ import React from 'react';
2
2
  export interface GrepTableOfContentNavProps {
3
3
  className?: string;
4
4
  style?: React.CSSProperties;
5
+ setSelectedValue: (selected: any) => void;
6
+ percentageRendered: number;
5
7
  }
6
8
  export declare const GrepTableOfContentNav: React.FC<GrepTableOfContentNavProps>;
7
9
  export default GrepTableOfContentNav;
@@ -3,6 +3,8 @@ import { GrepTableOfContentProviderProps as ContextProviderProps } from './conte
3
3
  export interface GrepTableOfContentProps extends ContextProviderProps {
4
4
  style?: React.CSSProperties;
5
5
  className?: string;
6
+ setSelectedValue: (selected: any) => void;
7
+ percentageRendered: number;
6
8
  }
7
9
  export declare const GrepTableOfContent: React.FC<GrepTableOfContentProps>;
8
10
  export default GrepTableOfContent;
package/dist/index.js CHANGED
@@ -22296,12 +22296,13 @@ var useStyles$2 = makeStyles()(function (_a, _b) {
22296
22296
 
22297
22297
  var GrepTableOfContentNavTreeNode = function (props) {
22298
22298
  var linkRef = useRef(null);
22299
- var node = props.node, style = props.style, renderChilds = props.renderChilds;
22299
+ var node = props.node, style = props.style, renderChilds = props.renderChilds, setSelectedValue = props.setSelectedValue, percentageRendered = props.percentageRendered;
22300
22300
  var lvl = node.lvl, el = node.el, index = node.index, children = node.children;
22301
- var _a = useContext(context), selected = _a.selected, setSelected = _a.setSelected, classes = _a.classes;
22301
+ var _a = useContext(context), selected = _a.selected, setSelected = _a.setSelected, classes = _a.classes, elements = _a.elements;
22302
22302
  var isSelected = el === selected;
22303
22303
  var styles = useStyles$2({ lvl: lvl }).classes;
22304
22304
  var className = clsx('grep-toc__nav-tree-node', isSelected && 'grep-toc__nav-tree-node--selected', styles.root, classes === null || classes === void 0 ? void 0 : classes.node, props.className);
22305
+ var _b = __read(useState(false), 2), awaitingRender = _b[0], setAwaitingRender = _b[1];
22305
22306
  var txt = el.innerText;
22306
22307
  var location = useSelector(function (s) { return getLocation(s); });
22307
22308
  var url = "".concat(location.pathname).concat(location.search, "#").concat(node.id);
@@ -22309,19 +22310,36 @@ var GrepTableOfContentNavTreeNode = function (props) {
22309
22310
  var link = linkRef.current;
22310
22311
  if (isSelected) {
22311
22312
  link === null || link === void 0 ? void 0 : link.scrollIntoViewIfNeeded();
22313
+ //setTimeout(() => link?.scrollIntoViewIfNeeded(), 2000);
22312
22314
  }
22313
22315
  else if (link === document.activeElement) {
22314
22316
  link === null || link === void 0 ? void 0 : link.blur();
22315
22317
  }
22316
- }, [isSelected, linkRef]);
22318
+ }, [isSelected, linkRef, setSelectedValue]);
22317
22319
  var tabIndex = isSelected ? 0 : -1;
22320
+ useEffect(function () {
22321
+ if (awaitingRender) {
22322
+ doSelect();
22323
+ setAwaitingRender(false);
22324
+ }
22325
+ }, [percentageRendered]);
22326
+ var doSelect = function (checkAwaitRender) {
22327
+ if (checkAwaitRender === void 0) { checkAwaitRender = false; }
22328
+ window.history.replaceState({}, txt, url);
22329
+ setSelected(el, true);
22330
+ var values = Object.values(elements);
22331
+ var newPercentage = values.findIndex(function (e) { return e === el; }) / values.length + 0.1;
22332
+ setSelectedValue(newPercentage);
22333
+ if (checkAwaitRender && newPercentage > percentageRendered) {
22334
+ setAwaitingRender(true);
22335
+ }
22336
+ };
22318
22337
  return (React__default.createElement("li", { key: index, "data-lvl": lvl, className: className, style: style },
22319
22338
  React__default.createElement(Link$1, { ref: linkRef, className: clsx(styles.link, isSelected && "".concat(styles.link, "--selected")), href: url, tabIndex: tabIndex, onClick: function (event) {
22320
22339
  console.debug('node click', node);
22321
22340
  event.preventDefault();
22322
22341
  event.stopPropagation();
22323
- window.history.replaceState({}, txt, url);
22324
- setSelected(el, true);
22342
+ doSelect(true);
22325
22343
  }, color: "inherit" }, txt),
22326
22344
  children && renderChilds(children)));
22327
22345
  };
@@ -22338,11 +22356,11 @@ var useStyles$1 = makeStyles()(function () { return ({
22338
22356
  }); });
22339
22357
 
22340
22358
  var NavTree = function (props) {
22341
- var elements = props.elements, style = props.style;
22359
+ var elements = props.elements, style = props.style, setSelectedValue = props.setSelectedValue, percentageRendered = props.percentageRendered;
22342
22360
  var classes = useContext(context).classes;
22343
22361
  var styles = useStyles$1().classes;
22344
22362
  var className = clsx('grep-toc__nav-tree', styles.root, classes === null || classes === void 0 ? void 0 : classes.tree, props.className);
22345
- return (React__default.createElement("ul", { className: className, style: style }, Object.values(elements).map(function (node) { return (React__default.createElement(GrepTableOfContentNavTreeNode, { node: node, key: node.index, renderChilds: function (children) { return React__default.createElement(NavTree, { elements: children }); } })); })));
22363
+ return (React__default.createElement("ul", { className: className, style: style }, Object.values(elements).map(function (node) { return (React__default.createElement(GrepTableOfContentNavTreeNode, { node: node, key: node.index, renderChilds: function (children) { return (React__default.createElement(NavTree, { elements: children, setSelectedValue: setSelectedValue, percentageRendered: percentageRendered })); }, setSelectedValue: setSelectedValue, percentageRendered: percentageRendered })); })));
22346
22364
  };
22347
22365
  NavTree.displayName = 'Grep.ToC.NavTree';
22348
22366
 
@@ -22467,14 +22485,14 @@ var GrepTableOfContentNav = function (props) {
22467
22485
  var style = useStyles().classes;
22468
22486
  var className = clsx('grep-toc__nav', style.root, classes === null || classes === void 0 ? void 0 : classes.nav, props.className, showKeyboardHint && style.keyboardHint);
22469
22487
  return (React__default.createElement("nav", { className: className, style: props.style, tabIndex: selected ? -1 : 0, onKeyDown: onKeyDown, ref: ref },
22470
- React__default.createElement(NavTree, { elements: tree })));
22488
+ React__default.createElement(NavTree, { elements: tree, setSelectedValue: props.setSelectedValue, percentageRendered: props.percentageRendered })));
22471
22489
  };
22472
22490
  GrepTableOfContentNav.displayName = 'Grep.ToC.Nav';
22473
22491
 
22474
22492
  var GrepTableOfContent = function (_a) {
22475
- var style = _a.style, className = _a.className, props = __rest$1(_a, ["style", "className"]);
22493
+ var style = _a.style, className = _a.className, setSelectedValue = _a.setSelectedValue, percentageRendered = _a.percentageRendered, props = __rest$1(_a, ["style", "className", "setSelectedValue", "percentageRendered"]);
22476
22494
  return (React__default.createElement(GrepTableOfContentProvider, __assign({}, props),
22477
- React__default.createElement(GrepTableOfContentNav, { className: className, style: style })));
22495
+ React__default.createElement(GrepTableOfContentNav, { className: className, style: style, setSelectedValue: setSelectedValue, percentageRendered: percentageRendered })));
22478
22496
  };
22479
22497
  GrepTableOfContent.displayName = 'Grep.ToC';
22480
22498