From 26623dc2c18cde1e5cdd3dd01be8b1a026a444cd Mon Sep 17 00:00:00 2001 From: DeOwl Date: Wed, 6 May 2026 14:46:16 +0300 Subject: [PATCH] added comp_systems and modular instances frontend --- index.html | 38 +- public/favicon.ico | Bin 0 -> 15406 bytes public/index.html | 5975 +++++++++++++++++ src/Api/PluginLoader/PluginLoader.tsx | 82 + src/Api/QuantumBackend/MachineManagment.tsx | 110 + src/Api/QuantumBackend/TeamManagement.tsx | 66 +- src/App.tsx | 5 +- src/Components/CodeTextArea/CodeTextArea.tsx | 85 - src/Components/Layout/Sidebar/Sidebar.tsx | 5 +- .../ListCard/ExperimentsListCard.tsx | 63 +- .../MachineListCard/MachinesListCard.css | 56 + .../MachineListCard/MachinesListCard.tsx | 193 + .../TeamMachineListCard.tsx | 136 + .../TeamInMachineCard/TeamInMachine.tsx | 116 + .../TeamMemberCard/TeamMemberCard.css | 7 +- .../TeamMemberCard/TeamMemberCard.tsx | 13 +- .../ListCard/TeamListCard/TeamsListCard.tsx | 14 +- .../MoleculeViewer/MoleculeViewer.css | 22 - .../MoleculeViewer/MoleculeViewer.tsx | 269 - .../MoleculeViewer/MoleculeViewerMenu.tsx | 29 - .../PaginationContainer.css | 1 + src/Modals/AddMember/AddMember.tsx | 2 - .../AddTeamToDevice/AddTeamToDevice.tsx | 127 + src/Modals/NewExperiment/NewExperiment.tsx | 9 +- src/Modals/NewMolecule/NewMolecule.tsx | 2 - src/Modals/NewTeam/NewTeam.tsx | 2 - .../DevicesPage/DevicePage/DevicePage.tsx | 194 + src/Pages/DevicesPage/DevicesPage.css | 5 + src/Pages/DevicesPage/DevicesPage.tsx | 106 +- src/Pages/ExperimentsPage/ExperimentPage.tsx | 14 +- src/Pages/ExperimentsPage/MoleculePage.css | 65 - src/Pages/ExperimentsPage/MoleculePage.tsx | 113 - src/Pages/TaskPage/TaskPage.tsx | 70 + src/Pages/TeamsPage/TeamPage/TeamPage.css | 23 +- src/Pages/TeamsPage/TeamPage/TeamPage.tsx | 386 +- src/Routes/Breadcrumbs/Breadcrumbs.tsx | 1 - src/Routes/RouterAuhGuard.tsx | 37 +- src/Routes/Routes.tsx | 21 +- src/Stores/DeviceStore.tsx | 40 + src/Stores/MoleculeEditStore.tsx | 17 - src/Types/Experiment/Experiment.tsx | 3 + .../Experiment/MoleculeEdit/MoleculeEdit.tsx | 5 - src/Types/Machine/Machine.tsx | 69 + src/Types/Team/Team.tsx | 42 + 44 files changed, 7739 insertions(+), 899 deletions(-) create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 src/Api/PluginLoader/PluginLoader.tsx create mode 100644 src/Api/QuantumBackend/MachineManagment.tsx delete mode 100755 src/Components/CodeTextArea/CodeTextArea.tsx create mode 100644 src/Components/ListCard/MachineListCard/MachinesListCard.css create mode 100644 src/Components/ListCard/MachineListCard/MachinesListCard.tsx create mode 100644 src/Components/ListCard/MachineListCard/TeamMachineListCard/TeamMachineListCard.tsx create mode 100644 src/Components/ListCard/TeamListCard/TeamInMachineCard/TeamInMachine.tsx delete mode 100755 src/Components/MoleculeViewer/MoleculeViewer.css delete mode 100755 src/Components/MoleculeViewer/MoleculeViewer.tsx delete mode 100755 src/Components/MoleculeViewer/MoleculeViewerMenu.tsx create mode 100644 src/Modals/AddTeamToDevice/AddTeamToDevice.tsx create mode 100644 src/Pages/DevicesPage/DevicePage/DevicePage.tsx delete mode 100755 src/Pages/ExperimentsPage/MoleculePage.css delete mode 100755 src/Pages/ExperimentsPage/MoleculePage.tsx create mode 100644 src/Pages/TaskPage/TaskPage.tsx create mode 100644 src/Stores/DeviceStore.tsx delete mode 100755 src/Stores/MoleculeEditStore.tsx delete mode 100755 src/Types/Experiment/MoleculeEdit/MoleculeEdit.tsx create mode 100644 src/Types/Machine/Machine.tsx diff --git a/index.html b/index.html index 313de99..d51b804 100755 --- a/index.html +++ b/index.html @@ -1,14 +1,24 @@ - - - - - - - QMolSim - - -
- - - - + + + + + + + QMolSim + + + +
+ + + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f1437e7c23bb2a175f6ffe0e9ced5f7bf34e3ec3 GIT binary patch literal 15406 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 U8he^5Z>;TKWq)zt|1}5x7uZF-jsO4v literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..e543358 --- /dev/null +++ b/public/index.html @@ -0,0 +1,5975 @@ + + + + + + + + + + + +
+ + diff --git a/src/Api/PluginLoader/PluginLoader.tsx b/src/Api/PluginLoader/PluginLoader.tsx new file mode 100644 index 0000000..48e46a1 --- /dev/null +++ b/src/Api/PluginLoader/PluginLoader.tsx @@ -0,0 +1,82 @@ +import React, { useRef, useEffect, useState, useMemo } from "react"; +import { useUserPreferencesStore } from "Stores/PreferencesStore"; +import type { TaskData } from "Types/Experiment/Experiment"; + +interface IframePluginProps { + pluginUrl: string; + mode: "list" | "editor"; + taskData: TaskData; + onUpdate?: (data: any) => void; +} + +export const IframePlugin: React.FC = ({ + pluginUrl, + mode, + taskData, + onUpdate, +}) => { + const iframeRef = useRef(null); + const theme = useUserPreferencesStore(); + const [isIframeReady, setIsIframeReady] = useState(false); + + // Memoize the iframe component to prevent recreation when taskData changes + const memoizedIframe = useMemo(() => { + const url = `${pluginUrl}?mode=${mode}`; + return ( +