Skip to content

Commit bad8591

Browse files
authored
Proper insert location and delete selection behavior (#587)
1 parent 36af19e commit bad8591

2 files changed

Lines changed: 21 additions & 12 deletions

File tree

client/dive-common/use/useModeManager.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export default function useModeManager({
4848
recipes: Recipe[];
4949
selectTrack: (trackId: TrackId | null, edit: boolean) => void;
5050
selectNextTrack: (delta?: number) => TrackId | null;
51-
addTrack: (frame: number, defaultType: string) => Track;
51+
addTrack: (frame: number, defaultType: string, afterId?: TrackId) => Track;
5252
removeTrack: (trackId: TrackId) => void;
5353
}) {
5454
let creating = false;
@@ -135,7 +135,9 @@ export default function useModeManager({
135135

136136
function handleAddTrackOrDetection(): TrackId {
137137
// Handles adding a new track with the NewTrack Settings
138-
const newTrackId = addTrack(frame.value, newTrackSettings.type).trackId;
138+
const newTrackId = addTrack(
139+
frame.value, newTrackSettings.type, selectedTrackId.value || undefined,
140+
).trackId;
139141
selectTrack(newTrackId, true);
140142
creating = true;
141143
return newTrackId;
@@ -341,15 +343,16 @@ export default function useModeManager({
341343
}
342344

343345
function handleRemoveTrack(trackIds: TrackId[]) {
346+
/* Figure out next track ID */
347+
const maybeNextTrackId = selectNextTrack(1);
348+
const previousOrNext = maybeNextTrackId !== null
349+
? maybeNextTrackId
350+
: selectNextTrack(-1);
351+
/* Delete track */
344352
trackIds.forEach((trackId) => {
345353
removeTrack(trackId);
346354
});
347-
if (selectedTrackId.value !== null) {
348-
if (trackIds.includes(selectedTrackId.value)) {
349-
const newTrack = selectNextTrack(1) !== null ? selectNextTrack(1) : selectNextTrack(-1);
350-
selectTrack(newTrack, false);
351-
}
352-
}
355+
selectTrack(previousOrNext, false);
353356
}
354357

355358
/** Toggle editing mode for track */

client/src/use/useTrackStore.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,26 @@ export default function useTrackStore({ markChangesPending }: UseTrackStoreParam
6767
markChangesPending('upsert', track);
6868
}
6969

70-
function insertTrack(track: Track) {
70+
function insertTrack(track: Track, afterId?: TrackId) {
7171
track.bus.$on('notify', onChange);
7272
trackMap.set(track.trackId, track);
7373
intervalTree.insert([track.begin, track.end], track.trackId.toString());
74-
trackIds.value.push(track.trackId);
74+
if (afterId) {
75+
/* Insert specifically after another trackId */
76+
const insertIndex = trackIds.value.indexOf(afterId) + 1;
77+
trackIds.value.splice(insertIndex, 0, track.trackId);
78+
} else {
79+
trackIds.value.push(track.trackId);
80+
}
7581
}
7682

77-
function addTrack(frame: number, defaultType: string): Track {
83+
function addTrack(frame: number, defaultType: string, afterId?: TrackId): Track {
7884
const track = new Track(getNewTrackId(), {
7985
begin: frame,
8086
end: frame,
8187
confidencePairs: [[defaultType, 1]],
8288
});
83-
insertTrack(track);
89+
insertTrack(track, afterId);
8490
markChangesPending('upsert', track);
8591
return track;
8692
}

0 commit comments

Comments
 (0)