From ee341154234cb82e5a5578460d8700af442c0b72 Mon Sep 17 00:00:00 2001 From: Xiaohan-Tian <157918347+Xiaohan-Tian@users.noreply.github.com> Date: Tue, 12 Aug 2025 18:04:14 -0700 Subject: [PATCH] auto-select new created track; delete selected track will change selection to an remaining track. --- src/components/track/TrackInfoItem.tsx | 6 ++-- src/stores/projectStore.ts | 43 +++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/components/track/TrackInfoItem.tsx b/src/components/track/TrackInfoItem.tsx index d697fe2..60b156a 100644 --- a/src/components/track/TrackInfoItem.tsx +++ b/src/components/track/TrackInfoItem.tsx @@ -214,9 +214,9 @@ const TrackInfoItem: React.FC = ({ } // Clear selection if this track is selected - if (selectedTrackId === track.getId().toString()) { - setSelectedTrack(null); - } + // if (selectedTrackId === track.getId().toString()) { + // setSelectedTrack(null); + // } // Delete the track using the command system await removeTrack(track.getId()); diff --git a/src/stores/projectStore.ts b/src/stores/projectStore.ts index 470fe43..fca7cd4 100644 --- a/src/stores/projectStore.ts +++ b/src/stores/projectStore.ts @@ -280,6 +280,14 @@ export const useProjectStore = create((set, get) => { const project = KGCore.instance().getCurrentProject(); set({ tracks: [...project.getTracks()] as KGTrack[] }); + // Auto-select the newly created track and open instrument selection panel + const newTrackId = command.getTrackId().toString(); + set({ + selectedTrackId: newTrackId, + showInstrumentSelection: true, + instrumentSelectionTrackId: newTrackId + }); + console.log(`Added track ${command.getTrackId()}`); } catch (error) { console.error('Error adding track:', error); @@ -289,13 +297,46 @@ export const useProjectStore = create((set, get) => { removeTrack: async (id: number) => { try { + // Get the current tracks and find the index of the track being deleted + const currentTracks = KGCore.instance().getCurrentProject().getTracks(); + const deletedTrackIndex = currentTracks.findIndex(track => track.getId() === id); + const currentSelectedTrackId = get().selectedTrackId; + const isCurrentTrackSelected = currentSelectedTrackId === id.toString(); + // Create and execute the remove track command const command = new RemoveTrackCommand(id); KGCore.instance().executeCommand(command); // Update the store state with a new array reference to trigger re-render const project = KGCore.instance().getCurrentProject(); - set({ tracks: [...project.getTracks()] as KGTrack[] }); + const remainingTracks = [...project.getTracks()] as KGTrack[]; + set({ tracks: remainingTracks }); + + // Auto-select another track if any remain + if (remainingTracks.length > 0) { + // Prefer previous track, fallback to next track + const newSelectedIndex = deletedTrackIndex > 0 + ? deletedTrackIndex - 1 // Select previous track + : 0; // Select first remaining track (was next) + + const newSelectedTrack = remainingTracks[newSelectedIndex]; + const newSelectedTrackId = newSelectedTrack.getId().toString(); + + setTimeout(() => { + set({ + selectedTrackId: isCurrentTrackSelected ? newSelectedTrackId : currentSelectedTrackId, + showInstrumentSelection: true, + instrumentSelectionTrackId: isCurrentTrackSelected ? newSelectedTrackId : currentSelectedTrackId, + }); + }, 0); + } else { + // No tracks left, clear selection and close instrument panel + set({ + selectedTrackId: null, + showInstrumentSelection: false, + instrumentSelectionTrackId: null + }); + } console.log(`Removed track ${id}`); } catch (error) {