({ vdomBlockId, blockId, model }: TerminalViewProps & { vdomBlockId: string })
| 111 | }; |
| 112 | |
| 113 | const TermVDomNodeSingleId = ({ vdomBlockId, blockId, model }: TerminalViewProps & { vdomBlockId: string }) => { |
| 114 | React.useEffect(() => { |
| 115 | const unsub = waveEventSubscribeSingle({ |
| 116 | eventType: "blockclose", |
| 117 | scope: WOS.makeORef("block", vdomBlockId), |
| 118 | handler: (_event) => { |
| 119 | RpcApi.SetMetaCommand(TabRpcClient, { |
| 120 | oref: WOS.makeORef("block", blockId), |
| 121 | meta: { |
| 122 | "term:mode": null, |
| 123 | "term:vdomblockid": null, |
| 124 | }, |
| 125 | }); |
| 126 | }, |
| 127 | }); |
| 128 | return () => { |
| 129 | unsub(); |
| 130 | }; |
| 131 | }, []); |
| 132 | const vdomNodeModel: BlockNodeModel = React.useMemo(() => { |
| 133 | const isFocusedAtom = jotai.atom((get) => { |
| 134 | return get(model.nodeModel.isFocused) && get(model.termMode) == "vdom"; |
| 135 | }); |
| 136 | return { |
| 137 | blockId: vdomBlockId, |
| 138 | isFocused: isFocusedAtom, |
| 139 | isMagnified: jotai.atom(false), |
| 140 | focusNode: () => { |
| 141 | model.nodeModel.focusNode(); |
| 142 | }, |
| 143 | toggleMagnify: () => {}, |
| 144 | onClose: () => { |
| 145 | if (vdomBlockId != null) { |
| 146 | RpcApi.DeleteSubBlockCommand(TabRpcClient, { blockid: vdomBlockId }); |
| 147 | } |
| 148 | }, |
| 149 | }; |
| 150 | }, [vdomBlockId, model]); |
| 151 | return ( |
| 152 | <div key="htmlElem" className="term-htmlelem"> |
| 153 | <SubBlock key="vdom" nodeModel={vdomNodeModel} /> |
| 154 | </div> |
| 155 | ); |
| 156 | }; |
| 157 | |
| 158 | const TermVDomNode = ({ blockId, model }: TerminalViewProps) => { |
| 159 | const vdomBlockId = jotai.useAtomValue(model.vdomBlockId); |
nothing calls this directly
no test coverage detected