33
44import {
55 BlockComponentModel2 ,
6- BlockNodeModel ,
76 BlockProps ,
87 FullBlockProps ,
98 FullSubBlockProps ,
109 SubBlockProps ,
1110} from "@/app/block/blocktypes" ;
12- import type { TabModel } from "@/app/store/tab-model" ;
1311import { useTabModel } from "@/app/store/tab-model" ;
14- import { AiFileDiffViewModel } from "@/app/view/aifilediff/aifilediff" ;
15- import { LauncherViewModel } from "@/app/view/launcher/launcher" ;
16- import { PreviewModel } from "@/app/view/preview/preview-model" ;
17- import { SysinfoViewModel } from "@/app/view/sysinfo/sysinfo" ;
18- import { TsunamiViewModel } from "@/app/view/tsunami/tsunami" ;
19- import { VDomModel } from "@/app/view/vdom/vdom-model" ;
20- import { useWaveEnv , WaveEnv } from "@/app/waveenv/waveenv" ;
12+ import { useWaveEnv } from "@/app/waveenv/waveenv" ;
2113import { ErrorBoundary } from "@/element/errorboundary" ;
2214import { CenteredDiv } from "@/element/quickelems" ;
2315import { useDebouncedNodeInnerRect } from "@/layout/index" ;
@@ -26,48 +18,13 @@ import { getBlockComponentModel, registerBlockComponentModel, unregisterBlockCom
2618import { makeORef } from "@/store/wos" ;
2719import { focusedBlockId , getElemAsStr } from "@/util/focusutil" ;
2820import { isBlank , useAtomValueSafe } from "@/util/util" ;
29- import { HelpViewModel } from "@/view/helpview/helpview" ;
30- import { TermViewModel } from "@/view/term/term-model" ;
31- import { WaveAiModel } from "@/view/waveai/waveai" ;
32- import { WebViewModel } from "@/view/webview/webview" ;
3321import clsx from "clsx" ;
34- import { atom , useAtomValue } from "jotai" ;
22+ import { useAtomValue } from "jotai" ;
3523import { memo , Suspense , useCallback , useEffect , useLayoutEffect , useMemo , useRef , useState } from "react" ;
36- import { QuickTipsViewModel } from "../view/quicktipsview/quicktipsview" ;
37- import { WaveConfigViewModel } from "../view/waveconfig/waveconfig-model" ;
3824import "./block.scss" ;
3925import { BlockEnv } from "./blockenv" ;
4026import { BlockFrame } from "./blockframe" ;
41- import { blockViewToIcon , blockViewToName } from "./blockutil" ;
42-
43- const BlockRegistry : Map < string , ViewModelClass > = new Map ( ) ;
44- BlockRegistry . set ( "term" , TermViewModel ) ;
45- BlockRegistry . set ( "preview" , PreviewModel ) ;
46- BlockRegistry . set ( "web" , WebViewModel ) ;
47- BlockRegistry . set ( "waveai" , WaveAiModel ) ;
48- BlockRegistry . set ( "cpuplot" , SysinfoViewModel ) ;
49- BlockRegistry . set ( "sysinfo" , SysinfoViewModel ) ;
50- BlockRegistry . set ( "vdom" , VDomModel ) ;
51- BlockRegistry . set ( "tips" , QuickTipsViewModel ) ;
52- BlockRegistry . set ( "help" , HelpViewModel ) ;
53- BlockRegistry . set ( "launcher" , LauncherViewModel ) ;
54- BlockRegistry . set ( "tsunami" , TsunamiViewModel ) ;
55- BlockRegistry . set ( "aifilediff" , AiFileDiffViewModel ) ;
56- BlockRegistry . set ( "waveconfig" , WaveConfigViewModel ) ;
57-
58- function makeViewModel (
59- blockId : string ,
60- blockView : string ,
61- nodeModel : BlockNodeModel ,
62- tabModel : TabModel ,
63- waveEnv : WaveEnv
64- ) : ViewModel {
65- const ctor = BlockRegistry . get ( blockView ) ;
66- if ( ctor != null ) {
67- return new ctor ( { blockId, nodeModel, tabModel, waveEnv } ) ;
68- }
69- return makeDefaultViewModel ( blockView ) ;
70- }
27+ import { makeViewModel } from "./blockregistry" ;
7128
7229function getViewElem (
7330 blockId : string ,
@@ -86,18 +43,6 @@ function getViewElem(
8643 return < VC key = { blockId } blockId = { blockId } blockRef = { blockRef } contentRef = { contentRef } model = { viewModel } /> ;
8744}
8845
89- function makeDefaultViewModel ( viewType : string ) : ViewModel {
90- const viewModel : ViewModel = {
91- viewType : viewType ,
92- viewIcon : atom ( blockViewToIcon ( viewType ) ) ,
93- viewName : atom ( blockViewToName ( viewType ) ) ,
94- preIconButton : atom ( null ) ,
95- endIconButtons : atom ( null ) ,
96- viewComponent : null ,
97- } ;
98- return viewModel ;
99- }
100-
10146const BlockPreview = memo ( ( { nodeModel, viewModel } : FullBlockProps ) => {
10247 const waveEnv = useWaveEnv < BlockEnv > ( ) ;
10348 const blockIsNull = useAtomValue ( waveEnv . wos . isWaveObjectNullAtom ( makeORef ( "block" , nodeModel . blockId ) ) ) ;
@@ -250,8 +195,7 @@ const BlockFull = memo(({ nodeModel, viewModel }: FullBlockProps) => {
250195 const focusFromPointerEnter = useCallback (
251196 ( event : React . PointerEvent < HTMLDivElement > ) => {
252197 const focusFollowsCursorEnabled =
253- focusFollowsCursorMode === "on" ||
254- ( focusFollowsCursorMode === "term" && blockView === "term" ) ;
198+ focusFollowsCursorMode === "on" || ( focusFollowsCursorMode === "term" && blockView === "term" ) ;
255199 if ( ! focusFollowsCursorEnabled || event . pointerType === "touch" || event . buttons > 0 ) {
256200 return ;
257201 }
0 commit comments