@itwin/itwinui-react
Version:
A react component library for iTwinUI
44 lines (43 loc) • 1.34 kB
JavaScript
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,
);
};