UNPKG

found-scroll

Version:
50 lines (49 loc) 2.41 kB
import type { Location, RenderArgsElements, Router } from 'found'; import HttpError from 'found/HttpError'; import React, { Component, ReactNode } from 'react'; import ScrollBehavior, { ScrollTarget } from 'scroll-behavior'; export interface LocationBase { action: 'PUSH' | string; hash?: string; } export declare type ScrollPosition = [scrollLeft: number, scrollTop: number]; export interface CreateScrollBehaviorConfig { addNavigationListener: (listener: () => any) => () => void; stateStorage: { save: (location: Location, key: string | null, value: ScrollPosition) => void; read: (location: Location, key: string | null) => ScrollPosition | null | undefined; }; getCurrentLocation: () => Location; shouldUpdateScroll: (this: ScrollBehavior<Location, ScrollManagerRenderArgs>, prevContext: ScrollManagerRenderArgs | null, context: ScrollManagerRenderArgs) => ScrollTarget; } export interface ScrollManagerRenderArgs { location: Location; router: Router; elements?: RenderArgsElements[]; error?: HttpError; } export interface ScrollManagerProps { shouldUpdateScroll?: (this: ScrollBehavior<Location, ScrollManagerRenderArgs>, prevContext: ScrollManagerRenderArgs | null, context: ScrollManagerRenderArgs) => ScrollTarget; createScrollBehavior?: (config: CreateScrollBehaviorConfig) => ScrollBehavior<Location, ScrollManagerRenderArgs>; renderArgs: ScrollManagerRenderArgs; children?: ReactNode; } export interface ScrollContextValue { scrollBehavior: ScrollBehavior<Location<any>, ScrollManagerRenderArgs>; registerScrollElement: (key: string, element: HTMLElement) => () => void; } export declare const ScrollContext: React.Context<ScrollContextValue | null>; declare class ScrollManager extends Component<ScrollManagerProps> { prevRenderArgs: ScrollManagerRenderArgs | null; readonly scrollBehavior: ScrollBehavior<Location, ScrollManagerRenderArgs>; private readonly scrollContext; constructor(props: ScrollManagerProps); componentDidMount(): void; componentDidUpdate(): void; componentWillUnmount(): void; maybeUpdateScroll(): void; shouldUpdateScroll: (prevRenderArgs: ScrollManagerRenderArgs, renderArgs: ScrollManagerRenderArgs) => ScrollTarget; registerScrollElement: (key: string, element: HTMLElement) => () => void; render(): JSX.Element; } export default ScrollManager;