diff --git a/packages/overlayscrollbars-react/src/OverlayScrollbarsComponent.tsx b/packages/overlayscrollbars-react/src/OverlayScrollbarsComponent.tsx index c44e31a..e9a0f23 100644 --- a/packages/overlayscrollbars-react/src/OverlayScrollbarsComponent.tsx +++ b/packages/overlayscrollbars-react/src/OverlayScrollbarsComponent.tsx @@ -11,24 +11,36 @@ export type OverlayScrollbarsComponentProps { - osInstance(): OverlayScrollbars | null; - osTarget(): ElementRef | null; + instance(): OverlayScrollbars | null; + target(): ElementRef | null; } const OverlayScrollbarsComponent = ( props: OverlayScrollbarsComponentProps, ref: ForwardedRef> ) => { - const { element = 'div', options, events, ...other } = props; + const { element = 'div', options, events, children, ...other } = props; const Tag = element; const osTargetRef = useRef>(null); + const osChildrenRef = useRef(null); const osInstanceRef = useRef(null); useEffect(() => { - const { current: target } = osTargetRef; - if (target) { - const instance = OverlayScrollbars(target as any, options || {}, events); + const { current: targetElm } = osTargetRef; + const { current: childrenElm } = osChildrenRef; + if (targetElm && childrenElm) { + const instance = OverlayScrollbars( + { + target: targetElm as any, + elements: { + viewport: childrenElm, + content: childrenElm, + }, + }, + options || {}, + events + ); osInstanceRef.current = instance; return () => instance.destroy(); @@ -53,15 +65,19 @@ const OverlayScrollbarsComponent = ( ref, () => { return { - osInstance: () => osInstanceRef.current, - osTarget: () => osTargetRef.current, + instance: () => osInstanceRef.current, + target: () => osTargetRef.current, }; }, [] ); - // @ts-ignore - return ; + return ( + // @ts-ignore + +
{children}
+
+ ); }; const OverlayScrollbarsComponentForwardedRef = forwardRef(OverlayScrollbarsComponent) as < diff --git a/packages/overlayscrollbars-react/test/OverlayScrollbarsComponent.test.tsx b/packages/overlayscrollbars-react/test/OverlayScrollbarsComponent.test.tsx index 27236af..6aa2da2 100644 --- a/packages/overlayscrollbars-react/test/OverlayScrollbarsComponent.test.tsx +++ b/packages/overlayscrollbars-react/test/OverlayScrollbarsComponent.test.tsx @@ -61,11 +61,11 @@ describe('OverlayScrollbarsComponent', () => { const ref: RefObject = { current: null }; const { container } = render(); - const { osInstance, osTarget } = ref.current!; - expect(osInstance).toBeTypeOf('function'); - expect(osTarget).toBeTypeOf('function'); - expect(OverlayScrollbars.valid(osInstance())).toBe(true); - expect(osTarget()).toBe(container.firstElementChild); + const { instance, target } = ref.current!; + expect(instance).toBeTypeOf('function'); + expect(target).toBeTypeOf('function'); + expect(OverlayScrollbars.valid(instance())).toBe(true); + expect(target()).toBe(container.firstElementChild); }); test('options', () => { @@ -77,13 +77,13 @@ describe('OverlayScrollbarsComponent', () => { /> ); - const opts = ref.current!.osInstance()!.options(); + const opts = ref.current!.instance()!.options(); expect(opts.paddingAbsolute).toBe(true); expect(opts.overflow.y).toBe('hidden'); rerender(); - const newOpts = ref.current!.osInstance()!.options()!; + const newOpts = ref.current!.instance()!.options()!; expect(newOpts.paddingAbsolute).toBe(false); //switches back to default because its not specified in the new options expect(newOpts.overflow.y).toBe('scroll'); //switches back to default because its not specified in the new options expect(newOpts.overflow.x).toBe('hidden'); @@ -103,7 +103,7 @@ describe('OverlayScrollbarsComponent', () => { expect(onUpdated).not.toHaveBeenCalled(); - ref.current?.osInstance()?.update(true); + ref.current!.instance()!.update(true); expect(onUpdatedInitial).toHaveBeenCalledTimes(1); expect(onUpdated).toHaveBeenCalledTimes(1); @@ -111,14 +111,14 @@ describe('OverlayScrollbarsComponent', () => { ); - ref.current?.osInstance()?.update(true); + ref.current!.instance()!.update(true); expect(onUpdatedInitial).toHaveBeenCalledTimes(2); expect(onUpdated).toHaveBeenCalledTimes(2); // unregister works with `[]`, `null` or `undefined` rerender(); - ref.current?.osInstance()?.update(true); + ref.current!.instance()!.update(true); expect(onUpdatedInitial).toHaveBeenCalledTimes(2); expect(onUpdated).toHaveBeenCalledTimes(2); }); diff --git a/packages/overlayscrollbars/src/initialization.ts b/packages/overlayscrollbars/src/initialization.ts index 058f7dd..9f53f36 100644 --- a/packages/overlayscrollbars/src/initialization.ts +++ b/packages/overlayscrollbars/src/initialization.ts @@ -47,6 +47,7 @@ export type Initialization = { /** * Customizes which elements are generated and used. * If a function is passed to any of the fields, it receives the `target` element as its argument. + * Any passed function should be a "pure" function. (same input produces same output) */ elements: { /**