Create a new diagram
This commit is contained in:
parent
50d82fb435
commit
9588d7c918
@ -11,6 +11,7 @@ import {
|
|||||||
IconRedo,
|
IconRedo,
|
||||||
IconRowsStroked,
|
IconRowsStroked,
|
||||||
IconEdit,
|
IconEdit,
|
||||||
|
IconPlus,
|
||||||
} from "@douyinfe/semi-icons";
|
} from "@douyinfe/semi-icons";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import icon from "../assets/icon_dark_64.png";
|
import icon from "../assets/icon_dark_64.png";
|
||||||
@ -71,6 +72,7 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
RENAME: 4,
|
RENAME: 4,
|
||||||
OPEN: 5,
|
OPEN: 5,
|
||||||
SAVEAS: 6,
|
SAVEAS: 6,
|
||||||
|
NEW: 7,
|
||||||
};
|
};
|
||||||
const STATUS = {
|
const STATUS = {
|
||||||
NONE: 0,
|
NONE: 0,
|
||||||
@ -84,6 +86,7 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
const [prevTitle, setPrevTitle] = useState(title);
|
const [prevTitle, setPrevTitle] = useState(title);
|
||||||
const [saveAsTitle, setSaveAsTitle] = useState(title);
|
const [saveAsTitle, setSaveAsTitle] = useState(title);
|
||||||
const [selectedDiagramId, setSelectedDiagramId] = useState(0);
|
const [selectedDiagramId, setSelectedDiagramId] = useState(0);
|
||||||
|
const [selectedTemplateId, setSelectedTemplateId] = useState(-1);
|
||||||
const [showEditName, setShowEditName] = useState(false);
|
const [showEditName, setShowEditName] = useState(false);
|
||||||
const [exportData, setExportData] = useState({
|
const [exportData, setExportData] = useState({
|
||||||
data: null,
|
data: null,
|
||||||
@ -713,11 +716,15 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
Toast.error("Oops! Couldn't load diagram.");
|
Toast.error("Oops! Couldn't load diagram.");
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
const createNewDiagram = (id) => {
|
||||||
|
localStorage.setItem("args", `${id}`);
|
||||||
|
window.open("/editor", "_blank");
|
||||||
|
};
|
||||||
|
|
||||||
const menu = {
|
const menu = {
|
||||||
File: {
|
File: {
|
||||||
New: {
|
New: {
|
||||||
function: () => {},
|
function: () => setVisible(MODAL.NEW),
|
||||||
},
|
},
|
||||||
"New window": {
|
"New window": {
|
||||||
function: () => {},
|
function: () => {},
|
||||||
@ -1114,6 +1121,8 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
return "Open diagram";
|
return "Open diagram";
|
||||||
case MODAL.SAVEAS:
|
case MODAL.SAVEAS:
|
||||||
return "Save as";
|
return "Save as";
|
||||||
|
case MODAL.NEW:
|
||||||
|
return "New diagram";
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -1132,6 +1141,8 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
return "Open";
|
return "Open";
|
||||||
case MODAL.SAVEAS:
|
case MODAL.SAVEAS:
|
||||||
return "Save as";
|
return "Save as";
|
||||||
|
case MODAL.NEW:
|
||||||
|
return "Create";
|
||||||
default:
|
default:
|
||||||
return "Confirm";
|
return "Confirm";
|
||||||
}
|
}
|
||||||
@ -1166,6 +1177,10 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
loadDiagram(selectedDiagramId);
|
loadDiagram(selectedDiagramId);
|
||||||
setVisible(MODAL.NONE);
|
setVisible(MODAL.NONE);
|
||||||
return;
|
return;
|
||||||
|
case MODAL.RENAME:
|
||||||
|
setPrevTitle(title);
|
||||||
|
setVisible(MODAL.NONE);
|
||||||
|
return;
|
||||||
case MODAL.SAVEAS:
|
case MODAL.SAVEAS:
|
||||||
db.diagrams.add({
|
db.diagrams.add({
|
||||||
name: saveAsTitle,
|
name: saveAsTitle,
|
||||||
@ -1178,6 +1193,10 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
});
|
});
|
||||||
setVisible(MODAL.NONE);
|
setVisible(MODAL.NONE);
|
||||||
return;
|
return;
|
||||||
|
case MODAL.NEW:
|
||||||
|
setVisible(MODAL.NONE);
|
||||||
|
createNewDiagram(selectedTemplateId);
|
||||||
|
return;
|
||||||
default:
|
default:
|
||||||
setVisible(MODAL.NONE);
|
setVisible(MODAL.NONE);
|
||||||
return;
|
return;
|
||||||
@ -1291,11 +1310,46 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const newModalBody = () => (
|
||||||
|
<div className="h-[360px] grid grid-cols-3 gap-2 overflow-auto px-1">
|
||||||
|
<div>
|
||||||
|
<div
|
||||||
|
className={`h-[180px] w-full bg-blue-400 bg-opacity-30 flex justify-center items-center rounded hover:bg-opacity-40 hover:border-2 hover:border-dashed ${
|
||||||
|
settings.mode === "light"
|
||||||
|
? "hover:border-blue-500"
|
||||||
|
: "hover:border-white"
|
||||||
|
} ${selectedTemplateId === 0 && "border-2 border-blue-500"}`}
|
||||||
|
onClick={() => setSelectedTemplateId(0)}
|
||||||
|
>
|
||||||
|
<IconPlus style={{ color: "#fff" }} size="extra-large" />
|
||||||
|
</div>
|
||||||
|
<div className="text-center mt-1">Blank</div>
|
||||||
|
</div>
|
||||||
|
{[1, 2, 3, 4, 5, 6, 7, 8].map((i) => (
|
||||||
|
<div key={i}>
|
||||||
|
<div
|
||||||
|
className={`h-[180px] w-full bg-blue-400 bg-opacity-30 flex justify-center items-center rounded hover:bg-opacity-40 hover:border-2 hover:border-dashed ${
|
||||||
|
settings.mode === "light"
|
||||||
|
? "hover:border-blue-500"
|
||||||
|
: "hover:border-white"
|
||||||
|
} ${selectedTemplateId === i && "border-2 border-blue-500"}`}
|
||||||
|
onClick={() => setSelectedTemplateId(i)}
|
||||||
|
>
|
||||||
|
+
|
||||||
|
</div>
|
||||||
|
<div className="text-center mt-1">Template {i}</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
const getModalBody = () => {
|
const getModalBody = () => {
|
||||||
if (visible === MODAL.IMPORT) {
|
switch (visible) {
|
||||||
|
case MODAL.IMPORT:
|
||||||
return importModalBody();
|
return importModalBody();
|
||||||
}
|
case MODAL.NEW:
|
||||||
if (visible === MODAL.RENAME) {
|
return newModalBody();
|
||||||
|
case MODAL.RENAME:
|
||||||
return (
|
return (
|
||||||
<Input
|
<Input
|
||||||
placeholder="Diagram name"
|
placeholder="Diagram name"
|
||||||
@ -1303,17 +1357,7 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
onChange={(v) => setTitle(v)}
|
onChange={(v) => setTitle(v)}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
case MODAL.OPEN:
|
||||||
if (visible === MODAL.SAVEAS) {
|
|
||||||
return (
|
|
||||||
<Input
|
|
||||||
placeholder="Diagram name"
|
|
||||||
value={saveAsTitle}
|
|
||||||
onChange={(v) => setSaveAsTitle(v)}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (visible === MODAL.OPEN) {
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{diagrams.length === 0 ? (
|
{diagrams.length === 0 ? (
|
||||||
@ -1379,7 +1423,16 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
case MODAL.SAVEAS:
|
||||||
|
return (
|
||||||
|
<Input
|
||||||
|
placeholder="Diagram name"
|
||||||
|
value={saveAsTitle}
|
||||||
|
onChange={(v) => setSaveAsTitle(v)}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
case MODAL.CODE:
|
||||||
|
case MODAL.IMG:
|
||||||
if (exportData.data !== "" || exportData.data) {
|
if (exportData.data !== "" || exportData.data) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@ -1413,6 +1466,9 @@ export default function ControlPanel({ diagramId, setDiagramId }) {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
return <></>;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -8,11 +8,11 @@ import en_US from "@douyinfe/semi-ui/lib/es/locale/source/en_US";
|
|||||||
|
|
||||||
const root = ReactDOM.createRoot(document.getElementById("root"));
|
const root = ReactDOM.createRoot(document.getElementById("root"));
|
||||||
root.render(
|
root.render(
|
||||||
<React.StrictMode>
|
// <React.StrictMode>
|
||||||
<LocaleProvider locale={en_US}>
|
<LocaleProvider locale={en_US}>
|
||||||
<App />
|
<App />
|
||||||
</LocaleProvider>
|
</LocaleProvider>
|
||||||
</React.StrictMode>
|
// </React.StrictMode>
|
||||||
);
|
);
|
||||||
|
|
||||||
// If you want to start measuring performance in your app, pass a function
|
// If you want to start measuring performance in your app, pass a function
|
||||||
|
@ -480,7 +480,13 @@ export default function Editor(props) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const args = localStorage.getItem("args");
|
||||||
|
if (!args || args === "-1") {
|
||||||
loadLatestDiagram();
|
loadLatestDiagram();
|
||||||
|
} else {
|
||||||
|
console.log("Loading template with id", args);
|
||||||
|
localStorage.setItem("args", "-1");
|
||||||
|
}
|
||||||
|
|
||||||
socket.connect();
|
socket.connect();
|
||||||
|
|
||||||
@ -583,7 +589,7 @@ export default function Editor(props) {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="h-[100vh] overflow-hidden theme">
|
<div className="h-[100vh] overflow-hidden theme">
|
||||||
<ControlPanel diagramId={id} setDiagramId={setId}/>
|
<ControlPanel diagramId={id} setDiagramId={setId} />
|
||||||
<div
|
<div
|
||||||
className={
|
className={
|
||||||
layout.header
|
layout.header
|
||||||
|
Loading…
Reference in New Issue
Block a user