siftlode/frontend/src/i18n/locales/de
npeter83 40c0cbfc5a feat(playlists): sort + group-by-channel with reusable undo/redo
Add a sort toolbar to the Playlists page: Title A-Z/Z-A, shortest/longest first,
and a 'group by channel' toggle that groups items by channel (A-Z) and applies the
chosen sort within each group. Applying a sort reorders the items and persists via
the existing reorder API.

The item order is now an undoable value: drag, sort and grouping all go through it,
so every change is reversible via undo/redo buttons and Ctrl/Cmd+Z / Ctrl+Y
(Ctrl+Shift+Z). Built on two reusable pieces, not playlist-specific:
- useUndoable<T> — a generic past/present/future snapshot hook (set/undo/redo/reset
  + canUndo/canRedo), ref-backed so callbacks are stable and never see a stale snapshot;
  onApply runs the side effect (here: persist order).
- UndoToolbar — undo/redo buttons + keyboard shortcuts, plain props so any undo
  source can use it.

Undo history is reset only when the item set actually changes (different playlist or
add/remove), so a refetch confirming our own reorder doesn't wipe it; membership
changes (remove) clear history since they aren't reorder-undoable. Trilingual.
2026-06-15 21:52:28 +02:00
..
about.json feat(i18n): translate login and app chrome (HU/EN/DE) 2026-06-15 00:30:34 +02:00
card.json feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00
channels.json improvement(channels): distinct label for full-history queued by another user 2026-06-15 04:23:49 +02:00
common.json feat(playlists): sort + group-by-channel with reusable undo/redo 2026-06-15 21:52:28 +02:00
errors.json feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00
feed.json feat(feed): shared-library scope toggle in the header 2026-06-15 04:06:22 +02:00
header.json feat(playlists): frontend foundation — page, add-to-playlist, nav 2026-06-15 14:45:18 +02:00
login.json feat(i18n): translate login and app chrome (HU/EN/DE) 2026-06-15 00:30:34 +02:00
notifications.json feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00
onboarding.json feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00
player.json feat(playlists): queue playback in the player (auto-advance + prev/next) 2026-06-15 16:11:37 +02:00
playlists.json feat(playlists): sort + group-by-channel with reusable undo/redo 2026-06-15 21:52:28 +02:00
settings.json feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00
sidebar.json feat(filters): "Share view" link button in the sidebar 2026-06-15 12:29:51 +02:00
stats.json feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00
time.json feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00