feat: add cross-component playhead scroll synchronization

This commit is contained in:
Xiaohan-Tian
2026-05-02 00:25:41 -07:00
parent 6b8a470022
commit da8b9496df
7 changed files with 94 additions and 11 deletions
+18
View File
@@ -109,6 +109,12 @@ interface ProjectState {
canRedo: boolean;
undoDescription: string | null;
redoDescription: string | null;
// Cross-component scroll request state
requestMainContentScroll: (beatPosition: number) => void;
requestPianoRollScroll: (beatPosition: number) => void;
mainContentScrollRequest: number | null;
pianoRollScrollRequest: number | null;
// Actions
setProjectName: (name: string) => void;
@@ -340,6 +346,10 @@ export const useProjectStore = create<ProjectState>((set, get) => {
recordingNotes: [],
recordingOriginalPlayhead: 0,
// Initial cross-component scroll request state
mainContentScrollRequest: null,
pianoRollScrollRequest: null,
// Actions
setProjectName: (name: string) => {
try {
@@ -793,6 +803,14 @@ export const useProjectStore = create<ProjectState>((set, get) => {
set({ autoScrollEnabled: enabled });
},
requestMainContentScroll: (beatPosition: number) => {
set({ mainContentScrollRequest: beatPosition });
},
requestPianoRollScroll: (beatPosition: number) => {
set({ pianoRollScrollRequest: beatPosition });
},
startPlaying: async () => {
await KGCore.instance().startPlaying();
set({ isPlaying: true, autoScrollEnabled: true });