import { Helmet } from "react-helmet"; import { IconCancel, IconPlus } from "@tabler/icons-react"; import { useParams } from "react-router"; import CustomButton from "Components/CustomButton/CustomButton"; import { IframePlugin } from "Api/PluginLoader/PluginLoader"; import { useEffect, useState } from "react"; import type { InstanceData } from "Types/Experiment/Experiment"; import { getFrontendFile, getInstanceById, updateInstance, } from "Api/QuantumBackend/ExperimentsManagment"; import { useAuthenticationStore } from "Stores/AuthenticationStore"; import { useExperimentStore } from "Stores/ExperimentStore"; import { SimpleGrid, TextInput, Title } from "@mantine/core"; import { notifications } from "@mantine/notifications"; import "./TaskPage.css"; function TaskPage() { const { task_id } = useParams(); const [instance, set_instance] = useState(); const { loadedHtmlFiles, addLoadedHtml, setInstances } = useExperimentStore(); const { profile, is_loading } = useAuthenticationStore(); const [, set_is_loading] = useState(true); const [data, setData] = useState(); const [progress, setProgress] = useState(); const [qubits_needed, set_qubits_needed] = useState(); const [name, setName] = useState(); const [descr, setDescr] = useState(""); const [reload, setReload] = useState(0); const saveData = () => { if (instance && qubits_needed) { updateInstance({ instance_id: instance.instance_id, name: name, description: descr, instance_data: JSON.stringify(data), qubits_needed: qubits_needed, }).then((updated) => { set_instance({ instance_id: instance.instance_id, name: updated.name, description: updated.description, instance_data: updated.instance_data, qubits_needed: updated.qubits_needed, simulation_result: instance.simulation_result, }); setName(updated.name); setDescr(updated.description || ""); setData(updated.instance_data); }); } else { if (!qubits_needed) { notifications.show({ message: "Количество кубит не было определено", }); } } }; const ResetData = () => { if (instance) { setData(instance.instance_data); setName(instance.name); setDescr(instance.description || ""); setReload(reload + 1); } }; useEffect(() => { if (profile && !is_loading && task_id) { getInstanceById(Number(task_id)) .then((inst) => { set_instance(inst); setData(inst.instance_data); setProgress(inst.simulation_result?.simulation_result); setName(inst.name); setDescr(inst.description || ""); set_qubits_needed(inst.qubits_needed); getFrontendFile(1).then((file) => { addLoadedHtml(1, file); }); set_is_loading(false); }) .catch(() => { set_is_loading(false); }); } return () => { setInstances([]); }; }, [profile, is_loading]); return ( <> {task_id ? "Task " + task_id + " | QMolSim" : "Error |QmolSim"}
{(!instance?.simulation_result || instance?.simulation_result?.status == "DRAFT") && ( <>
} text="Сохранить" /> } text="Отменить" disabled={ JSON.stringify(data) == JSON.stringify(instance?.instance_data) && instance?.name == name && (instance?.description || "") == (descr || "") } />
)}
Имя: { setName(e.target.value); } //set_username(e.currentTarget.value) } /> Описание: { setDescr(e.target.value); } //set_email(e.currentTarget.value) } />
{instance && ( { setData(JSON.parse(data)); set_qubits_needed(qubits_need); }} index={instance.instance_id + reload} simProgress={JSON.stringify(progress)} /> )}
); } export default TaskPage;