feat: add Ctrl+A select all items and Del key delete selected items/groups
- Ctrl+A already existed for selecting all timeline items across tracks - Added Del/Backspace key handler for selectedItemIds: deletes all selected sections, MIDI items, and audio clips from the selected track(s) - Clears selection after deletion and shows toast with count
This commit is contained in:
@@ -8158,6 +8158,40 @@ const App = () => {
|
||||
return;
|
||||
}
|
||||
if (e.key === 'Delete' || e.key === 'Backspace' || e.key === 'Del') {
|
||||
if (selectedItemIds && selectedItemIds.size > 0) {
|
||||
e.preventDefault();
|
||||
const idsToDelete = new Set(selectedItemIds);
|
||||
setSelectedItemIds(new Set());
|
||||
updateActiveTracks(prev => prev.map(t => {
|
||||
let changed = false;
|
||||
const sections = (t.sections || []).filter(s => {
|
||||
if (idsToDelete.has(s.id)) { changed = true; return false; }
|
||||
return true;
|
||||
});
|
||||
const midiItems = (t.midiItems || []).filter(m => {
|
||||
if (idsToDelete.has(m.id)) { changed = true; return false; }
|
||||
return true;
|
||||
});
|
||||
const clips = (t.clips || []).filter(c => {
|
||||
const canonical = c.id === 'default' ? 'default_' + t.id : c.id;
|
||||
if (idsToDelete.has(canonical)) { changed = true; return false; }
|
||||
return true;
|
||||
});
|
||||
if (!changed) return t;
|
||||
return {
|
||||
...t,
|
||||
sections,
|
||||
midiItems,
|
||||
clips,
|
||||
buffer: clips[0]?.buffer || null,
|
||||
startTime: clips[0]?.startTime || 0,
|
||||
name: clips[0]?.name || t.name
|
||||
};
|
||||
}));
|
||||
const count = idsToDelete.size;
|
||||
showToast(count === 1 ? 'Đã xóa 1 item.' : `Đã xóa ${count} items.`, 'info');
|
||||
return;
|
||||
}
|
||||
const selClip = selectedClipIdRef.current;
|
||||
if (selClip) {
|
||||
e.preventDefault();
|
||||
|
||||
Reference in New Issue
Block a user