From 16af001e211a23d9a44c3f04d613cc86ae03869c Mon Sep 17 00:00:00 2001 From: Maximilian Giller <m.giller@tu-bs.de> Date: Wed, 27 Jul 2022 23:44:22 +0200 Subject: [PATCH] Implements scaffolding for space manager --- src/editor/js/components/editor.tsx | 2 + src/editor/js/components/spacemanager.css | 14 +++ src/editor/js/components/spacemanager.tsx | 108 ++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 src/editor/js/components/spacemanager.css create mode 100644 src/editor/js/components/spacemanager.tsx diff --git a/src/editor/js/components/editor.tsx b/src/editor/js/components/editor.tsx index cb406dc..53cad32 100644 --- a/src/editor/js/components/editor.tsx +++ b/src/editor/js/components/editor.tsx @@ -11,6 +11,7 @@ import { HistoryNavigator } from "./historynavigator"; import { GraphElement } from "../structures/graph/graphelement"; import { Link } from "../structures/graph/link"; import { NodeTypesEditor } from "./nodetypeseditor"; +import { SpaceManager } from "./spacemanager"; type propTypes = any; type stateTypes = { @@ -393,6 +394,7 @@ export class Editor extends React.PureComponent<propTypes, stateTypes> { <div id="ks-editor"> <h1>Interface</h1> <SpaceSelect onLoadSpace={this.loadSpace} /> + <SpaceManager /> <div id="content"> <div id="force-graph-renderer"> {this.state.graph ? ( diff --git a/src/editor/js/components/spacemanager.css b/src/editor/js/components/spacemanager.css new file mode 100644 index 0000000..250fd4b --- /dev/null +++ b/src/editor/js/components/spacemanager.css @@ -0,0 +1,14 @@ +div#ks-editor #space-manager #pop-up { + border: 1px lightgrey solid; + border-radius: 5px; + background-color: white; + + width: auto; + max-width: 20rem; + margin: 0.5rem 0rem; + padding: 0.7rem; +} + +div#ks-editor #space-manager .warning { + background-color: red; +} diff --git a/src/editor/js/components/spacemanager.tsx b/src/editor/js/components/spacemanager.tsx new file mode 100644 index 0000000..dbfec19 --- /dev/null +++ b/src/editor/js/components/spacemanager.tsx @@ -0,0 +1,108 @@ +import React from "react"; +import { ReactNode } from "react"; +import "./spacemanager.css"; + +type propTypes = unknown; +type stateTypes = { + hidden: boolean; + deleteConfirmationHidden: boolean; + newName: string; +}; + +export class SpaceManager extends React.Component<propTypes, stateTypes> { + constructor(props: propTypes) { + super(props); + this.deleteSpace = this.deleteSpace.bind(this); + + this.state = { + hidden: true, + deleteConfirmationHidden: true, + newName: "New space", + }; + } + + private deleteSpace() { + this.setState({ + deleteConfirmationHidden: true, + }); + } + + render(): ReactNode { + return ( + <div id="space-manager"> + <button + className="warning" + onClick={() => + this.setState({ + hidden: !this.state.hidden, + deleteConfirmationHidden: true, + }) + } + > + Manage Space + </button> + {this.state.hidden ? ( + "" + ) : ( + <div id="pop-up"> + <input + className="space-name" + type={"text"} + value={this.state.newName} + onChange={(event) => + this.setState({ newName: event.target.value }) + } + /> + <ul> + <li> + <button> + Rename to {'"' + this.state.newName + '"'} + </button> + </li> + <li> + <button> + Duplicate as{" "} + {'"' + this.state.newName + '"'} + </button> + </li> + <li> + <button> + Create empty space{" "} + {'"' + this.state.newName + '"'} + </button> + </li> + </ul> + <hr /> + <ul> + <li> + <button + onClick={() => + this.setState({ + deleteConfirmationHidden: + !this.state + .deleteConfirmationHidden, + }) + } + > + Delete Space? + </button> + </li> + {this.state.deleteConfirmationHidden ? ( + "" + ) : ( + <li> + <button + className="warning" + onClick={this.deleteSpace} + > + Delete the space and all its data + </button> + </li> + )} + </ul> + </div> + )} + </div> + ); + } +} -- GitLab