|
|
@@ -1,5 +1,5 @@
|
|
|
import React, {
|
|
|
- useEffect, useCallback, ReactNode, useRef, useState, useMemo,
|
|
|
+ useEffect, useCallback, ReactNode, useRef, useState, useMemo, RefObject,
|
|
|
} from 'react';
|
|
|
|
|
|
import { debounce } from 'throttle-debounce';
|
|
|
@@ -13,6 +13,7 @@ const logger = loggerFactory('growi:cli:StickyStretchableScroller');
|
|
|
|
|
|
export type StickyStretchableScrollerProps = {
|
|
|
stickyElemSelector: string,
|
|
|
+ simplebarRef?: (ref: RefObject<SimpleBar>) => void,
|
|
|
calcViewHeight?: (scrollElement: HTMLElement) => number,
|
|
|
children?: ReactNode,
|
|
|
}
|
|
|
@@ -42,7 +43,7 @@ export type StickyStretchableScrollerProps = {
|
|
|
export const StickyStretchableScroller = (props: StickyStretchableScrollerProps): JSX.Element => {
|
|
|
|
|
|
const {
|
|
|
- children, stickyElemSelector, calcViewHeight,
|
|
|
+ children, stickyElemSelector, calcViewHeight, simplebarRef: setSimplebarRef,
|
|
|
} = props;
|
|
|
|
|
|
const simplebarRef = useRef<SimpleBar>(null);
|
|
|
@@ -69,14 +70,6 @@ export const StickyStretchableScroller = (props: StickyStretchableScrollerProps)
|
|
|
|
|
|
const resetScrollbarDebounced = useMemo(() => debounce(100, resetScrollbar), [resetScrollbar]);
|
|
|
|
|
|
-
|
|
|
- // useEffect(() => {
|
|
|
- // document.addEventListener(SidebarScrollerEvent.RESET_SCROLLBAR, resetScrollbarDebounced);
|
|
|
- // return () => {
|
|
|
- // document.removeEventListener(SidebarScrollerEvent.RESET_SCROLLBAR, resetScrollbarDebounced);
|
|
|
- // };
|
|
|
- // }, []);
|
|
|
-
|
|
|
const stickyChangeHandler = useCallback(() => {
|
|
|
logger.debug('StickyEvents.CHANGE detected');
|
|
|
resetScrollbarDebounced();
|
|
|
@@ -117,6 +110,13 @@ export const StickyStretchableScroller = (props: StickyStretchableScrollerProps)
|
|
|
resetScrollbarDebounced();
|
|
|
}, [resetScrollbarDebounced]);
|
|
|
|
|
|
+ // update ref
|
|
|
+ useEffect(() => {
|
|
|
+ if (setSimplebarRef != null) {
|
|
|
+ setSimplebarRef(simplebarRef);
|
|
|
+ }
|
|
|
+ }, [setSimplebarRef]);
|
|
|
+
|
|
|
return (
|
|
|
<SimpleBar style={{ maxHeight: simplebarMaxHeight }} ref={simplebarRef}>
|
|
|
{ children }
|