UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

44 lines (43 loc) 1.34 kB
import * as React from 'react'; import { useSafeContext, useSynchronizeInstance } from '../../utils/index.js'; import { Panels, PanelsWrapperContext } from './Panels.js'; export const PanelsInstanceContext = React.createContext(void 0); if ('development' === process.env.NODE_ENV) PanelsInstanceContext.displayName = 'PanelsInstanceContext'; export const PanelsInstanceProvider = (props) => { let { children, instance: instanceProp } = props; let instanceBackup = Panels.useInstance(); let instance = instanceProp || instanceBackup; let { activePanelId, changeActivePanel, triggers, setShouldFocus } = useSafeContext(PanelsWrapperContext); let goBack = React.useCallback(async () => { if (null == activePanelId) return; let trigger = triggers[activePanelId]; if (null != trigger.triggerId) { setShouldFocus({ fromPanelId: activePanelId, toPanelId: trigger.panelId, direction: 'backward', }); changeActivePanel(trigger.panelId); } }, [activePanelId, changeActivePanel, setShouldFocus, triggers]); useSynchronizeInstance( instance, React.useMemo( () => ({ goBack, }), [goBack], ), ); return React.createElement( PanelsInstanceContext.Provider, { value: { instance, }, }, children, ); };