From 7bf0984698e43b9aa2dd879f65951318ed410390 Mon Sep 17 00:00:00 2001 From: Maze <167211895+mazeincoding@users.noreply.github.com> Date: Sat, 31 Jan 2026 00:20:04 +0100 Subject: codebase overhaul (#697) --- apps/web/src/hooks/use-editor.ts | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 apps/web/src/hooks/use-editor.ts (limited to 'apps/web/src/hooks/use-editor.ts') diff --git a/apps/web/src/hooks/use-editor.ts b/apps/web/src/hooks/use-editor.ts new file mode 100644 index 00000000..ff3e2db1 --- /dev/null +++ b/apps/web/src/hooks/use-editor.ts @@ -0,0 +1,39 @@ +import { useCallback, useMemo, useRef, useSyncExternalStore } from "react"; +import { EditorCore } from "@/core"; + +export function useEditor(): EditorCore { + const editor = useMemo(() => EditorCore.getInstance(), []); + const versionRef = useRef(0); + + const subscribe = useCallback( + (onStoreChange: () => void) => { + const handleStoreChange = () => { + versionRef.current += 1; + onStoreChange(); + }; + + const unsubscribers = [ + editor.playback.subscribe(handleStoreChange), + editor.timeline.subscribe(handleStoreChange), + editor.scenes.subscribe(handleStoreChange), + editor.project.subscribe(handleStoreChange), + editor.media.subscribe(handleStoreChange), + editor.renderer.subscribe(handleStoreChange), + editor.selection.subscribe(handleStoreChange), + ]; + + return () => { + for (const unsubscribe of unsubscribers) { + unsubscribe(); + } + }; + }, + [editor], + ); + + const getSnapshot = useCallback(() => versionRef.current, []); + + useSyncExternalStore(subscribe, getSnapshot, getSnapshot); + + return editor; +} -- cgit v1.3.1