import { __ } from '@wordpress/i18n'; import { useState, useEffect, useRef } from 'react'; export default function ControlPanel({ onAddNode, onSaveFlow }) { const imgPath = window.WAIC_DATA.imgPath; const waicWorkflow = window.WAIC_WORKFLOW || {}; const initialTitle = waicWorkflow.title?.trim() || ''; const globalSettings = waicWorkflow.global || {}; const taskId = parseInt(waicWorkflow.task_id) || 0; const [title, setTitle] = useState((initialTitle.length > 0 ? initialTitle : waicWorkflow.lang?.title_plh) || ''); const [showDialog, setShowDialog] = useState(false); const [tempTitle, setTempTitle] = useState(''); const [showLog, setShowLog] = useState(false); const [logDate, setLogDate] = useState(''); const [showSettings, setShowSettings] = useState(false); const [tempSettings, setTempSettings] = useState({}); const [taskStatus, setTaskStatus] = useState(waicWorkflow.status || 0); const dialogLogRef = useRef(null); useEffect(() => { if (!showLog) return; const dialog = dialogLogRef.current; if (!dialog) return; let isDragging = false; let offsetX = 0; let offsetY = 0; const header = dialog.querySelector('.waic-dialog-header'); const onMouseDown = (e) => { isDragging = true; offsetX = e.clientX - dialog.offsetLeft; offsetY = e.clientY - dialog.offsetTop; document.addEventListener('mousemove', onMouseMove); document.addEventListener('mouseup', onMouseUp); }; const onMouseMove = (e) => { if (!isDragging) return; dialog.style.left = e.clientX - offsetX + 'px'; dialog.style.top = e.clientY - offsetY + 'px'; }; const onMouseUp = () => { isDragging = false; document.removeEventListener('mousemove', onMouseMove); document.removeEventListener('mouseup', onMouseUp); }; header.addEventListener('mousedown', onMouseDown); return () => { header.removeEventListener('mousedown', onMouseDown); }; }, [showLog]); const onChangeTitle = () => { setTempTitle(waicWorkflow.title || ''); setShowDialog(true); }; const onConfirmTitle = () => { const t = tempTitle.trim() || ''; setTitle(t); window.WAIC_WORKFLOW.title = t; waicWorkflow.isDirty = true; setShowDialog(false); }; const onCancelTitle = () => { setShowDialog(false); }; const onChangeSettings = () => { setTempSettings(waicWorkflow.flow?.settings || {}); setShowSettings(true); }; const onCancelSettings = () => { setShowSettings(false); }; const onConfirmSettings = () => { window.WAIC_WORKFLOW.flow.settings = tempSettings || {}; waicWorkflow.isDirty = true; setShowSettings(false); }; const onShowLog = () => { setShowLog(true); }; const onCloseLog = () => { setShowLog(false); }; useEffect(() => { if (showLog) { getLogData(''); } }, [showLog]); const getLogData = (date) => { setLogDate(date); const logBlock = document.querySelector('.waic-log-block'); const loader = document.querySelector('.waic-log-loader'); if (!logBlock || !loader) return; logBlock.classList.add('wbw-hidden'); loader.classList.remove('wbw-hidden'); jQuery.sendFormWaic({ data: { task_id: taskId, mod: 'workflow', action: 'getLogData', date: date, pl: 'waic', reqType: 'ajax', waicNonce: window.WAIC_DATA.waicNonce, }, onSuccess: function(res) { if (!res.error && res.html) { logBlock.innerHTML = res.html || ''; } else { logBlock.innerHTML = '