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;