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,
}
}