import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { putRequest, csrfToken } from '../../utils/helpers/'; import { usePopup } from '../../utils/hooks/'; import { PageStore } from '../../utils/stores/'; import { PageActions, PlaylistPageActions } from '../../utils/actions/'; import { CircleIconButton, MaterialIcon, NavigationContentApp, NavigationMenuList, PopupMain } from '../_shared'; function mediaPlaylistPopupPages(proceedRemoval, cancelRemoval) { const settingOptionsList = { deleteMedia: { itemType: 'open-subpage', text: 'Remove from playlist', icon: 'delete', buttonAttr: { className: 'change-page', 'data-page-id': 'proceedMediaPlaylistRemoval', }, }, }; const pages = { main: ( ), proceedMediaPlaylistRemoval: (
Media playlist removal You're willing to remove media from playlist permanently?

), }; return pages; } export function MediaPlaylistOptions(props) { const [popupContentRef, PopupContent, PopupTrigger] = usePopup(); const [popupCurrentPage, setPopupCurrentPage] = useState('main'); const [popupPages] = useState(mediaPlaylistPopupPages(proceedRemoval, cancelRemoval)); function mediaPlaylistRemovalCompleted() { popupContentRef.current.tryToHide(); const props_media_id = props.media_id; const props_playlist_id = props.playlist_id; setTimeout(function () { // FIXME: Without delay creates conflict [ Uncaught Error: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch. ]. PageActions.addNotification('Media removed from playlist', 'mediaPlaylistRemove'); PlaylistPageActions.removedMediaFromPlaylist(props_media_id, props_playlist_id); }, 100); } function mediaPlaylistRemovalFailed() { popupContentRef.current.tryToHide(); setTimeout(function () { // FIXME: Without delay creates conflict [ Uncaught Error: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch. ]. PageActions.addNotification('Media removal from playlist failed', 'mediaPlaylistRemoveFail'); }, 100); } function proceedRemoval() { putRequest( PageStore.get('api-playlists') + '/' + props.playlist_id, { type: 'remove', media_friendly_token: props.media_id, }, { headers: { 'X-CSRFToken': csrfToken(), }, }, false, mediaPlaylistRemovalCompleted, mediaPlaylistRemovalFailed ); } function cancelRemoval() { popupContentRef.current.toggle(); } function onPopupPageChange(newPage) { setPopupCurrentPage(newPage); } function onPopupHide() { setPopupCurrentPage('main'); } return (
); } MediaPlaylistOptions.propTypes = {}; MediaPlaylistOptions.propTypes.media_id = PropTypes.string.isRequired; MediaPlaylistOptions.propTypes.playlist_id = PropTypes.string.isRequired;