import React, { useState, createContext, useContext, useMemo, forwardRef, } from "react"; import classNames from "classnames"; import { createRocket, RocketProps } from "../_util/create-rocket"; import { InferProps } from "../_type"; import { LayoutContent } from "./LayoutContent"; import { isChildOfType } from "../_util/is-child-of-type"; import { useConfig } from "../_util/config-context"; import { uuid } from "../_util/uuid"; import { useIsomorphicLayoutEffect } from "../_util/use-isomorphic-layout-effect"; import { noop } from "../_util/noop"; const LayoutHeader = createRocket( "LayoutHeader", "header.@{prefix}-layout__header" ); const LayoutFooter = createRocket( "LayoutFooter", "footer.@{prefix}-layout__footer" ); interface LayoutBodyContextValue { setSider?: (id: string, value: boolean) => void; } const LayoutBodyContext = createContext({ setSider: noop, }); export const LayoutSider = forwardRef(function LayoutSider( { className, ...props }: RocketProps, ref: React.Ref ) { const { classPrefix } = useConfig(); const { setSider } = useContext(LayoutBodyContext); useIsomorphicLayoutEffect(() => { const id = uuid(); setSider(id, true); return () => setSider(id, false); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return (