mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-05 23:18:53 -05:00
fix
This commit is contained in:
parent
f701872d39
commit
255d004ecb
201
frontend/src/static/js/components/BulkActionsModals.jsx
Normal file
201
frontend/src/static/js/components/BulkActionsModals.jsx
Normal file
@ -0,0 +1,201 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { BulkActionConfirmModal } from './BulkActionConfirmModal';
|
||||
import { BulkActionPermissionModal } from './BulkActionPermissionModal';
|
||||
import { BulkActionPlaylistModal } from './BulkActionPlaylistModal';
|
||||
import { BulkActionChangeOwnerModal } from './BulkActionChangeOwnerModal';
|
||||
import { BulkActionPublishStateModal } from './BulkActionPublishStateModal';
|
||||
import { BulkActionCategoryModal } from './BulkActionCategoryModal';
|
||||
import { BulkActionTagModal } from './BulkActionTagModal';
|
||||
|
||||
/**
|
||||
* Renders all bulk action modals
|
||||
* This component is reusable across different pages
|
||||
*/
|
||||
export function BulkActionsModals({
|
||||
// Confirm modal props
|
||||
showConfirmModal,
|
||||
confirmMessage,
|
||||
onConfirmCancel,
|
||||
onConfirmProceed,
|
||||
|
||||
// Permission modal props
|
||||
showPermissionModal,
|
||||
permissionType,
|
||||
selectedMediaIds,
|
||||
onPermissionModalCancel,
|
||||
onPermissionModalSuccess,
|
||||
onPermissionModalError,
|
||||
|
||||
// Playlist modal props
|
||||
showPlaylistModal,
|
||||
onPlaylistModalCancel,
|
||||
onPlaylistModalSuccess,
|
||||
onPlaylistModalError,
|
||||
username,
|
||||
|
||||
// Change owner modal props
|
||||
showChangeOwnerModal,
|
||||
onChangeOwnerModalCancel,
|
||||
onChangeOwnerModalSuccess,
|
||||
onChangeOwnerModalError,
|
||||
|
||||
// Publish state modal props
|
||||
showPublishStateModal,
|
||||
onPublishStateModalCancel,
|
||||
onPublishStateModalSuccess,
|
||||
onPublishStateModalError,
|
||||
|
||||
// Category modal props
|
||||
showCategoryModal,
|
||||
onCategoryModalCancel,
|
||||
onCategoryModalSuccess,
|
||||
onCategoryModalError,
|
||||
|
||||
// Tag modal props
|
||||
showTagModal,
|
||||
onTagModalCancel,
|
||||
onTagModalSuccess,
|
||||
onTagModalError,
|
||||
|
||||
// Common props
|
||||
csrfToken,
|
||||
|
||||
// Notification
|
||||
showNotification,
|
||||
notificationMessage,
|
||||
notificationType,
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<BulkActionConfirmModal
|
||||
isOpen={showConfirmModal}
|
||||
message={confirmMessage}
|
||||
onCancel={onConfirmCancel}
|
||||
onProceed={onConfirmProceed}
|
||||
/>
|
||||
|
||||
<BulkActionPermissionModal
|
||||
isOpen={showPermissionModal}
|
||||
permissionType={permissionType}
|
||||
selectedMediaIds={selectedMediaIds}
|
||||
onCancel={onPermissionModalCancel}
|
||||
onSuccess={onPermissionModalSuccess}
|
||||
onError={onPermissionModalError}
|
||||
csrfToken={csrfToken}
|
||||
/>
|
||||
|
||||
<BulkActionPlaylistModal
|
||||
isOpen={showPlaylistModal}
|
||||
selectedMediaIds={selectedMediaIds}
|
||||
onCancel={onPlaylistModalCancel}
|
||||
onSuccess={onPlaylistModalSuccess}
|
||||
onError={onPlaylistModalError}
|
||||
csrfToken={csrfToken}
|
||||
username={username}
|
||||
/>
|
||||
|
||||
<BulkActionChangeOwnerModal
|
||||
isOpen={showChangeOwnerModal}
|
||||
selectedMediaIds={selectedMediaIds}
|
||||
onCancel={onChangeOwnerModalCancel}
|
||||
onSuccess={onChangeOwnerModalSuccess}
|
||||
onError={onChangeOwnerModalError}
|
||||
csrfToken={csrfToken}
|
||||
/>
|
||||
|
||||
<BulkActionPublishStateModal
|
||||
isOpen={showPublishStateModal}
|
||||
selectedMediaIds={selectedMediaIds}
|
||||
onCancel={onPublishStateModalCancel}
|
||||
onSuccess={onPublishStateModalSuccess}
|
||||
onError={onPublishStateModalError}
|
||||
csrfToken={csrfToken}
|
||||
/>
|
||||
|
||||
<BulkActionCategoryModal
|
||||
isOpen={showCategoryModal}
|
||||
selectedMediaIds={selectedMediaIds}
|
||||
onCancel={onCategoryModalCancel}
|
||||
onSuccess={onCategoryModalSuccess}
|
||||
onError={onCategoryModalError}
|
||||
csrfToken={csrfToken}
|
||||
/>
|
||||
|
||||
<BulkActionTagModal
|
||||
isOpen={showTagModal}
|
||||
selectedMediaIds={selectedMediaIds}
|
||||
onCancel={onTagModalCancel}
|
||||
onSuccess={onTagModalSuccess}
|
||||
onError={onTagModalError}
|
||||
csrfToken={csrfToken}
|
||||
/>
|
||||
|
||||
{showNotification && (
|
||||
<div
|
||||
style={{
|
||||
position: 'fixed',
|
||||
bottom: '20px',
|
||||
left: '260px',
|
||||
backgroundColor: notificationType === 'error' ? '#f44336' : '#4CAF50',
|
||||
color: 'white',
|
||||
padding: '16px 24px',
|
||||
borderRadius: '4px',
|
||||
boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',
|
||||
zIndex: 1000,
|
||||
fontSize: '14px',
|
||||
fontWeight: '500',
|
||||
}}
|
||||
>
|
||||
{notificationMessage}
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
BulkActionsModals.propTypes = {
|
||||
showConfirmModal: PropTypes.bool.isRequired,
|
||||
confirmMessage: PropTypes.string.isRequired,
|
||||
onConfirmCancel: PropTypes.func.isRequired,
|
||||
onConfirmProceed: PropTypes.func.isRequired,
|
||||
|
||||
showPermissionModal: PropTypes.bool.isRequired,
|
||||
permissionType: PropTypes.oneOf(['viewer', 'editor', 'owner', null]),
|
||||
selectedMediaIds: PropTypes.array.isRequired,
|
||||
onPermissionModalCancel: PropTypes.func.isRequired,
|
||||
onPermissionModalSuccess: PropTypes.func.isRequired,
|
||||
onPermissionModalError: PropTypes.func.isRequired,
|
||||
|
||||
showPlaylistModal: PropTypes.bool.isRequired,
|
||||
onPlaylistModalCancel: PropTypes.func.isRequired,
|
||||
onPlaylistModalSuccess: PropTypes.func.isRequired,
|
||||
onPlaylistModalError: PropTypes.func.isRequired,
|
||||
username: PropTypes.string,
|
||||
|
||||
showChangeOwnerModal: PropTypes.bool.isRequired,
|
||||
onChangeOwnerModalCancel: PropTypes.func.isRequired,
|
||||
onChangeOwnerModalSuccess: PropTypes.func.isRequired,
|
||||
onChangeOwnerModalError: PropTypes.func.isRequired,
|
||||
|
||||
showPublishStateModal: PropTypes.bool.isRequired,
|
||||
onPublishStateModalCancel: PropTypes.func.isRequired,
|
||||
onPublishStateModalSuccess: PropTypes.func.isRequired,
|
||||
onPublishStateModalError: PropTypes.func.isRequired,
|
||||
|
||||
showCategoryModal: PropTypes.bool.isRequired,
|
||||
onCategoryModalCancel: PropTypes.func.isRequired,
|
||||
onCategoryModalSuccess: PropTypes.func.isRequired,
|
||||
onCategoryModalError: PropTypes.func.isRequired,
|
||||
|
||||
showTagModal: PropTypes.bool.isRequired,
|
||||
onTagModalCancel: PropTypes.func.isRequired,
|
||||
onTagModalSuccess: PropTypes.func.isRequired,
|
||||
onTagModalError: PropTypes.func.isRequired,
|
||||
|
||||
csrfToken: PropTypes.string.isRequired,
|
||||
|
||||
showNotification: PropTypes.bool.isRequired,
|
||||
notificationMessage: PropTypes.string.isRequired,
|
||||
notificationType: PropTypes.oneOf(['success', 'error']).isRequired,
|
||||
};
|
||||
516
frontend/src/static/js/utils/hooks/useBulkActions.js
Normal file
516
frontend/src/static/js/utils/hooks/useBulkActions.js
Normal file
@ -0,0 +1,516 @@
|
||||
import { useState } from 'react';
|
||||
import { translateString } from '../helpers';
|
||||
|
||||
/**
|
||||
* Custom hook for managing bulk actions on media items
|
||||
* Provides state management and handlers for selecting media and executing bulk actions
|
||||
*/
|
||||
export function useBulkActions() {
|
||||
const [selectedMedia, setSelectedMedia] = useState(new Set());
|
||||
const [availableMediaIds, setAvailableMediaIds] = useState([]);
|
||||
const [showConfirmModal, setShowConfirmModal] = useState(false);
|
||||
const [pendingAction, setPendingAction] = useState(null);
|
||||
const [confirmMessage, setConfirmMessage] = useState('');
|
||||
const [listKey, setListKey] = useState(0);
|
||||
const [notificationMessage, setNotificationMessage] = useState('');
|
||||
const [showNotification, setShowNotification] = useState(false);
|
||||
const [notificationType, setNotificationType] = useState('success');
|
||||
const [showPermissionModal, setShowPermissionModal] = useState(false);
|
||||
const [permissionType, setPermissionType] = useState(null);
|
||||
const [showPlaylistModal, setShowPlaylistModal] = useState(false);
|
||||
const [showChangeOwnerModal, setShowChangeOwnerModal] = useState(false);
|
||||
const [showPublishStateModal, setShowPublishStateModal] = useState(false);
|
||||
const [showCategoryModal, setShowCategoryModal] = useState(false);
|
||||
const [showTagModal, setShowTagModal] = useState(false);
|
||||
|
||||
// Get CSRF token from cookies
|
||||
const getCsrfToken = () => {
|
||||
const name = 'csrftoken';
|
||||
let cookieValue = null;
|
||||
if (document.cookie && document.cookie !== '') {
|
||||
const cookies = document.cookie.split(';');
|
||||
for (let i = 0; i < cookies.length; i++) {
|
||||
const cookie = cookies[i].trim();
|
||||
if (cookie.substring(0, name.length + 1) === name + '=') {
|
||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cookieValue;
|
||||
};
|
||||
|
||||
// Show notification
|
||||
const showNotificationMessage = (message, type = 'success') => {
|
||||
setNotificationMessage(message);
|
||||
setShowNotification(true);
|
||||
setNotificationType(type);
|
||||
|
||||
setTimeout(() => {
|
||||
setShowNotification(false);
|
||||
}, 5000);
|
||||
};
|
||||
|
||||
// Handle media selection toggle
|
||||
const handleMediaSelection = (mediaId, isSelected) => {
|
||||
setSelectedMedia((prevState) => {
|
||||
const newSelectedMedia = new Set(prevState);
|
||||
if (isSelected) {
|
||||
newSelectedMedia.add(mediaId);
|
||||
} else {
|
||||
newSelectedMedia.delete(mediaId);
|
||||
}
|
||||
return newSelectedMedia;
|
||||
});
|
||||
};
|
||||
|
||||
// Handle items update from list
|
||||
const handleItemsUpdate = (items) => {
|
||||
const mediaIds = items.map((item) => item.friendly_token || item.uid || item.id);
|
||||
setAvailableMediaIds(mediaIds);
|
||||
};
|
||||
|
||||
// Select all available media
|
||||
const handleSelectAll = () => {
|
||||
setSelectedMedia(new Set(availableMediaIds));
|
||||
};
|
||||
|
||||
// Deselect all media
|
||||
const handleDeselectAll = () => {
|
||||
setSelectedMedia(new Set());
|
||||
};
|
||||
|
||||
// Clear selection
|
||||
const clearSelection = () => {
|
||||
setSelectedMedia(new Set());
|
||||
};
|
||||
|
||||
// Clear selection and refresh list
|
||||
const clearSelectionAndRefresh = () => {
|
||||
setSelectedMedia(new Set());
|
||||
setListKey((prev) => prev + 1);
|
||||
};
|
||||
|
||||
// Handle bulk action button clicks
|
||||
const handleBulkAction = (action) => {
|
||||
const selectedCount = selectedMedia.size;
|
||||
|
||||
if (selectedCount === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (action === 'delete-media') {
|
||||
setShowConfirmModal(true);
|
||||
setPendingAction(action);
|
||||
setConfirmMessage(translateString('You are going to delete') + ` ${selectedCount} ` + translateString('media, are you sure?'));
|
||||
} else if (action === 'enable-comments') {
|
||||
setShowConfirmModal(true);
|
||||
setPendingAction(action);
|
||||
setConfirmMessage(translateString('You are going to enable comments to') + ` ${selectedCount} ` + translateString('media, are you sure?'));
|
||||
} else if (action === 'disable-comments') {
|
||||
setShowConfirmModal(true);
|
||||
setPendingAction(action);
|
||||
setConfirmMessage(translateString('You are going to disable comments to') + ` ${selectedCount} ` + translateString('media, are you sure?'));
|
||||
} else if (action === 'enable-download') {
|
||||
setShowConfirmModal(true);
|
||||
setPendingAction(action);
|
||||
setConfirmMessage(translateString('You are going to enable download for') + ` ${selectedCount} ` + translateString('media, are you sure?'));
|
||||
} else if (action === 'disable-download') {
|
||||
setShowConfirmModal(true);
|
||||
setPendingAction(action);
|
||||
setConfirmMessage(translateString('You are going to disable download for') + ` ${selectedCount} ` + translateString('media, are you sure?'));
|
||||
} else if (action === 'copy-media') {
|
||||
setShowConfirmModal(true);
|
||||
setPendingAction(action);
|
||||
setConfirmMessage(translateString('You are going to copy') + ` ${selectedCount} ` + translateString('media, are you sure?'));
|
||||
} else if (action === 'add-remove-coviewers') {
|
||||
setShowPermissionModal(true);
|
||||
setPermissionType('viewer');
|
||||
} else if (action === 'add-remove-coeditors') {
|
||||
setShowPermissionModal(true);
|
||||
setPermissionType('editor');
|
||||
} else if (action === 'add-remove-coowners') {
|
||||
setShowPermissionModal(true);
|
||||
setPermissionType('owner');
|
||||
} else if (action === 'add-remove-playlist') {
|
||||
setShowPlaylistModal(true);
|
||||
} else if (action === 'change-owner') {
|
||||
setShowChangeOwnerModal(true);
|
||||
} else if (action === 'publish-state') {
|
||||
setShowPublishStateModal(true);
|
||||
} else if (action === 'add-remove-category') {
|
||||
setShowCategoryModal(true);
|
||||
} else if (action === 'add-remove-tags') {
|
||||
setShowTagModal(true);
|
||||
}
|
||||
};
|
||||
|
||||
// Cancel confirm modal
|
||||
const handleConfirmCancel = () => {
|
||||
setShowConfirmModal(false);
|
||||
setPendingAction(null);
|
||||
setConfirmMessage('');
|
||||
};
|
||||
|
||||
// Proceed with confirmed action
|
||||
const handleConfirmProceed = () => {
|
||||
const action = pendingAction;
|
||||
setShowConfirmModal(false);
|
||||
setPendingAction(null);
|
||||
setConfirmMessage('');
|
||||
|
||||
if (action === 'delete-media') {
|
||||
executeDeleteMedia();
|
||||
} else if (action === 'enable-comments') {
|
||||
executeEnableComments();
|
||||
} else if (action === 'disable-comments') {
|
||||
executeDisableComments();
|
||||
} else if (action === 'enable-download') {
|
||||
executeEnableDownload();
|
||||
} else if (action === 'disable-download') {
|
||||
executeDisableDownload();
|
||||
} else if (action === 'copy-media') {
|
||||
executeCopyMedia();
|
||||
}
|
||||
};
|
||||
|
||||
// Execute delete media
|
||||
const executeDeleteMedia = () => {
|
||||
const selectedIds = Array.from(selectedMedia);
|
||||
const selectedCount = selectedIds.length;
|
||||
|
||||
fetch('/api/v1/media/user/bulk_actions', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': getCsrfToken(),
|
||||
},
|
||||
body: JSON.stringify({
|
||||
action: 'delete_media',
|
||||
media_ids: selectedIds,
|
||||
}),
|
||||
})
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to delete media');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then((data) => {
|
||||
const message = selectedCount === 1
|
||||
? translateString('The media was deleted successfully.')
|
||||
: translateString('Successfully deleted') + ` ${selectedCount} ` + translateString('media.');
|
||||
showNotificationMessage(message);
|
||||
clearSelectionAndRefresh();
|
||||
})
|
||||
.catch((error) => {
|
||||
showNotificationMessage(translateString('Failed to delete media. Please try again.'), 'error');
|
||||
clearSelectionAndRefresh();
|
||||
});
|
||||
};
|
||||
|
||||
// Execute enable comments
|
||||
const executeEnableComments = () => {
|
||||
const selectedIds = Array.from(selectedMedia);
|
||||
|
||||
fetch('/api/v1/media/user/bulk_actions', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': getCsrfToken(),
|
||||
},
|
||||
body: JSON.stringify({
|
||||
action: 'enable_comments',
|
||||
media_ids: selectedIds,
|
||||
}),
|
||||
})
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to enable comments');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then((data) => {
|
||||
showNotificationMessage(translateString('Successfully Enabled comments'));
|
||||
clearSelection();
|
||||
})
|
||||
.catch((error) => {
|
||||
showNotificationMessage(translateString('Failed to enable comments.'), 'error');
|
||||
clearSelection();
|
||||
});
|
||||
};
|
||||
|
||||
// Execute disable comments
|
||||
const executeDisableComments = () => {
|
||||
const selectedIds = Array.from(selectedMedia);
|
||||
|
||||
fetch('/api/v1/media/user/bulk_actions', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': getCsrfToken(),
|
||||
},
|
||||
body: JSON.stringify({
|
||||
action: 'disable_comments',
|
||||
media_ids: selectedIds,
|
||||
}),
|
||||
})
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to disable comments');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then((data) => {
|
||||
showNotificationMessage(translateString('Successfully Disabled comments'));
|
||||
clearSelection();
|
||||
})
|
||||
.catch((error) => {
|
||||
showNotificationMessage(translateString('Failed to disable comments.'), 'error');
|
||||
clearSelection();
|
||||
});
|
||||
};
|
||||
|
||||
// Execute enable download
|
||||
const executeEnableDownload = () => {
|
||||
const selectedIds = Array.from(selectedMedia);
|
||||
|
||||
fetch('/api/v1/media/user/bulk_actions', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': getCsrfToken(),
|
||||
},
|
||||
body: JSON.stringify({
|
||||
action: 'enable_download',
|
||||
media_ids: selectedIds,
|
||||
}),
|
||||
})
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to enable download');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then((data) => {
|
||||
showNotificationMessage(translateString('Successfully Enabled Download'));
|
||||
clearSelection();
|
||||
})
|
||||
.catch((error) => {
|
||||
showNotificationMessage(translateString('Failed to enable download.'), 'error');
|
||||
clearSelection();
|
||||
});
|
||||
};
|
||||
|
||||
// Execute disable download
|
||||
const executeDisableDownload = () => {
|
||||
const selectedIds = Array.from(selectedMedia);
|
||||
|
||||
fetch('/api/v1/media/user/bulk_actions', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': getCsrfToken(),
|
||||
},
|
||||
body: JSON.stringify({
|
||||
action: 'disable_download',
|
||||
media_ids: selectedIds,
|
||||
}),
|
||||
})
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to disable download');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then((data) => {
|
||||
showNotificationMessage(translateString('Successfully Disabled Download'));
|
||||
clearSelection();
|
||||
})
|
||||
.catch((error) => {
|
||||
showNotificationMessage(translateString('Failed to disable download.'), 'error');
|
||||
clearSelection();
|
||||
});
|
||||
};
|
||||
|
||||
// Execute copy media
|
||||
const executeCopyMedia = () => {
|
||||
const selectedIds = Array.from(selectedMedia);
|
||||
|
||||
fetch('/api/v1/media/user/bulk_actions', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRFToken': getCsrfToken(),
|
||||
},
|
||||
body: JSON.stringify({
|
||||
action: 'copy_media',
|
||||
media_ids: selectedIds,
|
||||
}),
|
||||
})
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Failed to copy media');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then((data) => {
|
||||
showNotificationMessage(translateString('Successfully Copied'));
|
||||
clearSelectionAndRefresh();
|
||||
})
|
||||
.catch((error) => {
|
||||
showNotificationMessage(translateString('Failed to copy media.'), 'error');
|
||||
clearSelection();
|
||||
});
|
||||
};
|
||||
|
||||
// Permission modal handlers
|
||||
const handlePermissionModalCancel = () => {
|
||||
setShowPermissionModal(false);
|
||||
setPermissionType(null);
|
||||
};
|
||||
|
||||
const handlePermissionModalSuccess = (message) => {
|
||||
showNotificationMessage(message);
|
||||
clearSelection();
|
||||
setShowPermissionModal(false);
|
||||
setPermissionType(null);
|
||||
};
|
||||
|
||||
const handlePermissionModalError = (message) => {
|
||||
showNotificationMessage(message, 'error');
|
||||
setShowPermissionModal(false);
|
||||
setPermissionType(null);
|
||||
};
|
||||
|
||||
// Playlist modal handlers
|
||||
const handlePlaylistModalCancel = () => {
|
||||
setShowPlaylistModal(false);
|
||||
};
|
||||
|
||||
const handlePlaylistModalSuccess = (message) => {
|
||||
showNotificationMessage(message);
|
||||
clearSelection();
|
||||
setShowPlaylistModal(false);
|
||||
};
|
||||
|
||||
const handlePlaylistModalError = (message) => {
|
||||
showNotificationMessage(message, 'error');
|
||||
setShowPlaylistModal(false);
|
||||
};
|
||||
|
||||
// Change owner modal handlers
|
||||
const handleChangeOwnerModalCancel = () => {
|
||||
setShowChangeOwnerModal(false);
|
||||
};
|
||||
|
||||
const handleChangeOwnerModalSuccess = (message) => {
|
||||
showNotificationMessage(message);
|
||||
clearSelectionAndRefresh();
|
||||
setShowChangeOwnerModal(false);
|
||||
};
|
||||
|
||||
const handleChangeOwnerModalError = (message) => {
|
||||
showNotificationMessage(message, 'error');
|
||||
setShowChangeOwnerModal(false);
|
||||
};
|
||||
|
||||
// Publish state modal handlers
|
||||
const handlePublishStateModalCancel = () => {
|
||||
setShowPublishStateModal(false);
|
||||
};
|
||||
|
||||
const handlePublishStateModalSuccess = (message) => {
|
||||
showNotificationMessage(message);
|
||||
clearSelectionAndRefresh();
|
||||
setShowPublishStateModal(false);
|
||||
};
|
||||
|
||||
const handlePublishStateModalError = (message) => {
|
||||
showNotificationMessage(message, 'error');
|
||||
setShowPublishStateModal(false);
|
||||
};
|
||||
|
||||
// Category modal handlers
|
||||
const handleCategoryModalCancel = () => {
|
||||
setShowCategoryModal(false);
|
||||
};
|
||||
|
||||
const handleCategoryModalSuccess = (message) => {
|
||||
showNotificationMessage(message);
|
||||
clearSelection();
|
||||
setShowCategoryModal(false);
|
||||
};
|
||||
|
||||
const handleCategoryModalError = (message) => {
|
||||
showNotificationMessage(message, 'error');
|
||||
setShowCategoryModal(false);
|
||||
};
|
||||
|
||||
// Tag modal handlers
|
||||
const handleTagModalCancel = () => {
|
||||
setShowTagModal(false);
|
||||
};
|
||||
|
||||
const handleTagModalSuccess = (message) => {
|
||||
showNotificationMessage(message);
|
||||
clearSelection();
|
||||
setShowTagModal(false);
|
||||
};
|
||||
|
||||
const handleTagModalError = (message) => {
|
||||
showNotificationMessage(message, 'error');
|
||||
setShowTagModal(false);
|
||||
};
|
||||
|
||||
return {
|
||||
// State
|
||||
selectedMedia,
|
||||
availableMediaIds,
|
||||
listKey,
|
||||
showConfirmModal,
|
||||
confirmMessage,
|
||||
notificationMessage,
|
||||
showNotification,
|
||||
notificationType,
|
||||
showPermissionModal,
|
||||
permissionType,
|
||||
showPlaylistModal,
|
||||
showChangeOwnerModal,
|
||||
showPublishStateModal,
|
||||
showCategoryModal,
|
||||
showTagModal,
|
||||
|
||||
// Handlers
|
||||
handleMediaSelection,
|
||||
handleItemsUpdate,
|
||||
handleSelectAll,
|
||||
handleDeselectAll,
|
||||
handleBulkAction,
|
||||
handleConfirmCancel,
|
||||
handleConfirmProceed,
|
||||
handlePermissionModalCancel,
|
||||
handlePermissionModalSuccess,
|
||||
handlePermissionModalError,
|
||||
handlePlaylistModalCancel,
|
||||
handlePlaylistModalSuccess,
|
||||
handlePlaylistModalError,
|
||||
handleChangeOwnerModalCancel,
|
||||
handleChangeOwnerModalSuccess,
|
||||
handleChangeOwnerModalError,
|
||||
handlePublishStateModalCancel,
|
||||
handlePublishStateModalSuccess,
|
||||
handlePublishStateModalError,
|
||||
handleCategoryModalCancel,
|
||||
handleCategoryModalSuccess,
|
||||
handleCategoryModalError,
|
||||
handleTagModalCancel,
|
||||
handleTagModalSuccess,
|
||||
handleTagModalError,
|
||||
|
||||
// Utility
|
||||
getCsrfToken,
|
||||
clearSelection,
|
||||
clearSelectionAndRefresh,
|
||||
};
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user