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 [selectedState, setSelectedState] = useState('public'); const [initialState, setInitialState] = useState('public'); const [isProcessing, setIsProcessing] = useState(false); useEffect(() => { if (!isOpen) { // Reset state when modal closes setSelectedState('public'); setInitialState('public'); } else { // When modal opens, set initial state setInitialState('public'); } }, [isOpen]); const handleSubmit = async () => { if (!selectedState) { onError(translateString('Please select a publish state')); return; } setIsProcessing(true); try { const response = await fetch('/api/v1/media/user/bulk_actions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrfToken, }, body: JSON.stringify({ action: 'set_state', media_ids: selectedMediaIds, state: selectedState, }), }); 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; const hasStateChanged = selectedState !== initialState; return (

{translateString('Publish State')}

); };