/** * Плейлисты, удаление которых уже показано, но ещё не отправлено: запрос уходит по закрытию * снекбара, а до тех пор карточка просто скрыта из списков. * * Скрываем по id, а не вырезаем из массива: список перезапрашивается после каждого удаления, * и вырезанная карточка вернулась бы с ответом сервера — при удалении нескольких подряд * соседние «удалённые» плейлисты снова появлялись бы в сетке. По id этого не случается, * а undo сводится к снятию метки: карточка возвращается на своё место сама. */ export const usePlaylistDelete = () => { const pendingIds = useState('playlist-delete-pending', () => []); const isPendingDelete = (id: string) => pendingIds.value.includes(id); const markPendingDelete = (id: string) => { if (isPendingDelete(id)) return; pendingIds.value = [ ...pendingIds.value, id ]; }; const unmarkPendingDelete = (id: string) => { pendingIds.value = pendingIds.value.filter(item => item !== id); }; return { pendingIds, isPendingDelete, markPendingDelete, unmarkPendingDelete, }; };