export function usePanelStack()

in packages/rc-components/rc-slide-panel/src/usePanelStack.tsx [30:61]


export function usePanelStack(initer?: () => React.ReactElement) {
  const [panelStack, setPanelStack] = useState<React.ReactElement[]>(() =>
    typeof initer === 'function' ? [initer()] : []
  )

  const top: React.ReactElement | undefined = panelStack.slice(-1)[0]

  const push = useCallback((el: React.ReactElement) => {
    setPanelStack((prevStack) => [...prevStack, el])
  }, [])
  const pop = useCallback(() => {
    setPanelStack((prevStack) => prevStack.slice(0, -1))
  }, [])

  const panelStackCtxValue = useMemo(() => ({ push, pop }), [pop, push])

  // 把slidePanelGroupContext中传递的activeId改为ActiveIdForALL
  // 从而使得top中的面板被激活
  const actualTop = top ? (
    <panelStackCtx.Provider value={panelStackCtxValue}>
      <AlterSlidePanelGroupContext>{top}</AlterSlidePanelGroupContext>
    </panelStackCtx.Provider>
  ) : (
    top
  )

  return {
    top: actualTop,
    push,
    pop,
  }
}