feat(playlists): act on the selected rows from the toolbar, and undo either
While rows are selected the toolbar's second row is the band: the count, the last target as one click, Move to, Remove, Clear selection. Both write in one request and undo back to the places; a video the target held before stays there. Delete takes the selection when there is one. A failure puts the rows back ticked. A row's own move goes through the same write, so it undoes too, and the single-row move route and service function are gone. A playlist row drops its grip below a 24rem table: the row menu keeps the moves.
This commit is contained in:
@@ -45,6 +45,9 @@ interface NavList {
|
||||
export interface NavSelection {
|
||||
readonly toggle: (index: number) => void;
|
||||
readonly clear: () => boolean;
|
||||
/** Delete: takes the selection out, wherever the focus is. False when there is none, and Delete
|
||||
* goes on to the item under the keyboard. */
|
||||
readonly removeSelected: () => boolean;
|
||||
}
|
||||
|
||||
const lists = new Map<HTMLElement, NavList>();
|
||||
@@ -432,6 +435,12 @@ function onKey(e: KeyboardEvent): void {
|
||||
// On the item root, like Enter — and only in a list that registered a remover.
|
||||
remove: (ev) => {
|
||||
const cur = current();
|
||||
for (const list of ordered()) {
|
||||
if (!list.selection()?.removeSelected()) continue;
|
||||
ev.preventDefault();
|
||||
if (cur) refocusSlot(cur.list, cur.index, cur.item);
|
||||
return;
|
||||
}
|
||||
const remove = cur?.list.remove();
|
||||
if (!cur || !remove || document.activeElement !== cur.item) return;
|
||||
ev.preventDefault();
|
||||
|
||||
Reference in New Issue
Block a user