import React, { useState, useEffect } from 'react'; import './BulkActionPublishStateModal.scss'; import { translateString } from '../utils/helpers/'; interface BulkActionPublishStateModalProps { isOpen: boolean; selectedMediaIds: string[]; onCancel: () => void; onSuccess: (message: string) => void; onError: (message: string) => void; csrfToken: string; } const PUBLISH_STATES = [ { value: 'public', label: translateString('Public') }, { value: 'unlisted', label: translateString('Unlisted') }, { value: 'private', label: translateString('Private') }, ]; export const BulkActionPublishStateModal: React.FC = ({ isOpen, selectedMediaIds, onCancel, onSuccess, onError, csrfToken, }) => { const isLmsEmbedMode = sessionStorage.getItem('lms_embed_mode') === 'true' || new URLSearchParams(window.location.search).get('mode') === 'lms_embed_mode'; const availableStates = isLmsEmbedMode ? PUBLISH_STATES.filter((s) => s.value !== 'public') : PUBLISH_STATES; const [selectedState, setSelectedState] = useState(''); const [removeSharing, setRemoveSharing] = useState(false); const [acknowledged, setAcknowledged] = useState(false); const [isProcessing, setIsProcessing] = useState(false); useEffect(() => { if (!isOpen) { setSelectedState(''); setRemoveSharing(false); setAcknowledged(false); } }, [isOpen]); const handleSubmit = async () => { if (!selectedState) { onError(translateString('Please select a publish state')); return; } if (removeSharing && !acknowledged) { onError(translateString('Please acknowledge the sharing removal')); return; } setIsProcessing(true); try { const body: Record = { action: 'set_state', media_ids: selectedMediaIds, state: selectedState, }; if (removeSharing) { body.remove_sharing = true; } const response = await fetch('/api/v1/media/user/bulk_actions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrfToken, }, body: JSON.stringify(body), }); if (!response.ok) { throw new Error(translateString('Failed to set publish state')); } const data = await response.json(); onSuccess(data.detail || translateString('Successfully updated publish state')); onCancel(); } catch (error) { console.error('Error setting publish state:', error); onError(translateString('Failed to set publish state. Please try again.')); } finally { setIsProcessing(false); } }; if (!isOpen) return null; return (

{translateString('Publish State')}

{translateString('Sharing will be removed from all selected media.')}

{removeSharing && ( )}
); };