import React from "react"; import {Card, Panel, PanelStack2} from "@blueprintjs/core"; import {ConfigObject, ConfigProps} from "../ConfigObject"; import {UiObjectConfig} from 'uiconfig.js' import {UiConfigRendererBaseBp, UiConfigRendererContext} from '../bpComponents/BPComponent' import {getOrCall, ValOrFunc} from "ts-browser-helpers"; // import {ViewerAppContext} from "./ViewerAppComponent"; export function useConfigToStackItem(config: UiObjectConfig, renderer?: UiConfigRendererBaseBp){ renderer = renderer ?? React.useContext(UiConfigRendererContext) if(!renderer) throw new Error('No renderer provided or found in context') const stackItem = React.useCallback(() => { return { props: {config: config}, renderPanel(props: ConfigProps) { // console.log(props.config === config) return ( ) }, title: renderer!.methods.getLabel(config) } as Panel<{ config: UiObjectConfig }> }, [config]) return stackItem } export type InspectorStackItem = ValOrFunc> function getStackItem(i: InspectorStackItem){ const r = getOrCall(i) return r?[r] : [] } export function InspectorStackComponent({stackItem, className}: { stackItem: InspectorStackItem, className?: string }) { const [currentPanelStack, setCurrentPanelStack] = React.useState>>(getStackItem(stackItem)); React.useEffect(() => { // console.warn('change', stackItem) setCurrentPanelStack(getStackItem(stackItem)) }, [setCurrentPanelStack, stackItem]) return ( setCurrentPanelStack([...currentPanelStack, p] as any)} onClose={() => setCurrentPanelStack(currentPanelStack.slice(0, -1))} stack={currentPanelStack}/> ) }