/** * Заглушка коллекций видео — избранное и «смотреть позже». * Ручек в API пока нет, поэтому состояние живёт только на клиенте и сбрасывается при перезагрузке. * Когда появятся эндпоинты, тут же меняем toggle-и на запросы, интерфейс наружу остаётся тем же. */ export const useVideoCollections = () => { const favorites = useState('video-collections-favorites', () => []); const watchLater = useState('video-collections-watch-later', () => []); const { show } = useSnackbar(); /** Возвращает true, если ролик добавлен, и false — если убран. */ function toggle(list: Ref, guid: string) { const added = !list.value.includes(guid); list.value = added ? [ ...list.value, guid ] : list.value.filter(item => item !== guid); return added; } // Снекбар показывается только на исходное действие: откат возвращает список как был, // повторно сообщать об этом нечего — иначе отмена сама выглядит как новое изменение. function notify(added: boolean, title: string, icon: string, undo: () => void) { show(added ? 'added' : 'removed', { icon, highlight: title, onAction: undo, }); } const isFavorite = (guid: string) => favorites.value.includes(guid); const isWatchLater = (guid: string) => watchLater.value.includes(guid); const toggleFavorite = (guid: string, title = '') => { notify(toggle(favorites, guid), title, 'heart', () => toggle(favorites, guid)); }; const toggleWatchLater = (guid: string, title = '') => { notify(toggle(watchLater, guid), title, 'clock', () => toggle(watchLater, guid)); }; return { favorites, watchLater, isFavorite, isWatchLater, toggleFavorite, toggleWatchLater, }; };