import React, { useState, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import { PageStore, MediaPageStore } from '../../utils/stores/'; import { PageActions, MediaPageActions } from '../../utils/actions/'; import { CircleIconButton, MaterialIcon } from '../_shared'; import { PlaylistCreationForm } from '../playlist-form/PlaylistCreationForm'; import './PlaylistsSelection.scss'; function PlaylistsSingleSelection(props) { function onChange(ev) { ev.persist(); if (props.isChecked) { MediaPageActions.removeMediaFromPlaylist(props.playlistId, MediaPageStore.get('media-id')); } else { MediaPageActions.addMediaToPlaylist(props.playlistId, MediaPageStore.get('media-id')); } } return !!props.renderDate ? ( ) : null; } PlaylistsSingleSelection.propTypes = { playlistId: PropTypes.string, isChecked: PropTypes.bool, title: PropTypes.string, }; PlaylistsSingleSelection.defaultProps = { isChecked: false, title: '', }; export function PlaylistsSelection(props) { const containerRef = useRef(null); const saveToSelectRef = useRef(null); const [date, setDate] = useState(new Date()); const [playlists, setPlaylists] = useState(MediaPageStore.get('playlists')); const [openCreatePlaylist, setOpenCreatePlaylist] = useState(false); function onWindowResize() { updateSavetoSelectMaxHeight(); } function onLoadPlaylists() { setPlaylists(MediaPageStore.get('playlists')); setDate(new Date()); } function onPlaylistMediaAdditionComplete() { setPlaylists(MediaPageStore.get('playlists')); setDate(new Date()); setTimeout(function () { PageActions.addNotification('Media added to playlist', 'playlistMediaAdditionComplete'); }, 100); } function onPlaylistMediaAdditionFail() { setTimeout(function () { PageActions.addNotification("Media's addition to playlist failed", 'playlistMediaAdditionFail'); }, 100); } function onPlaylistMediaRemovalComplete() { setPlaylists(MediaPageStore.get('playlists')); setDate(new Date()); setTimeout(function () { PageActions.addNotification('Media removed from playlist', 'playlistMediaRemovalComplete'); }, 100); } function onPlaylistMediaRemovalFail() { setTimeout(function () { PageActions.addNotification("Media's removal from playlist failed", 'playlistMediaaRemovalFail'); }, 100); } function updateSavetoSelectMaxHeight() { if (null !== saveToSelectRef.current) { saveToSelectRef.current.style.maxHeight = window.innerHeight - (56 + 18) - (containerRef.current.offsetHeight - saveToSelectRef.current.offsetHeight) + 'px'; } } function getCreatedPlaylists() { const mediaId = MediaPageStore.get('media-id'); let ret = []; let i = 0; while (i < playlists.length) { ret.push(