Skip to content
Snippets Groups Projects
Commit 8de18df4 authored by Maximilian Giller's avatar Maximilian Giller :squid:
Browse files

Implemented simple tab view

parent 5372b8dc
No related branches found
No related tags found
No related merge requests found
Pipeline #57023 passed
...@@ -10,6 +10,7 @@ import Instructions from "./instructions"; ...@@ -10,6 +10,7 @@ import Instructions from "./instructions";
import { Node } from "../../common/graph/node"; import { Node } from "../../common/graph/node";
import { NodeType, NodeTypeData } from "../../common/graph/nodetype"; import { NodeType, NodeTypeData } from "../../common/graph/nodetype";
import { EditorSettings, NodeDataChangeRequest } from "../editor"; import { EditorSettings, NodeDataChangeRequest } from "../editor";
import TabHeader from "./tabheader";
interface SidepanelProps { interface SidepanelProps {
graph: DynamicGraph; graph: DynamicGraph;
...@@ -62,26 +63,38 @@ function Sidepanel({ ...@@ -62,26 +63,38 @@ function Sidepanel({
<button onClick={onSave}>Save</button> <button onClick={onSave}>Save</button>
</div> </div>
<hr /> <hr />
<NodeDetails <TabHeader tabs={["Edit", "Types", "Help"]}>
selectedNodes={selectedNodes} {/* Edit-Tab */}
idToObjectType={graph.idToObjectGroup} <NodeDetails
onNodeDataChange={onNodeDataChange} selectedNodes={selectedNodes}
createCheckpoint={createCheckpoint} idToObjectType={graph.idToObjectGroup}
/> onNodeDataChange={onNodeDataChange}
<hr /> createCheckpoint={createCheckpoint}
<NodeTypesEditor />
nodeTypes={graph.objectGroups}
onNodeTypeSelect={onNodeTypeSelect} {/* Types-Tab */}
onNodeTypeCreation={onNodeTypeCreation} <NodeTypesEditor
onNodeTypeDelete={onNodeTypeDelete} nodeTypes={graph.objectGroups}
onNodeTypeDataChange={onNodeTypeDataChange} onNodeTypeSelect={onNodeTypeSelect}
createCheckpoint={createCheckpoint} onNodeTypeCreation={onNodeTypeCreation}
/> onNodeTypeDelete={onNodeTypeDelete}
<hr /> onNodeTypeDataChange={onNodeTypeDataChange}
<Settings settings={settings} onSettingsChange={onSettingsChange} /> createCheckpoint={createCheckpoint}
<hr /> />
{/* Help-Tab */}
<div>
<Settings
settings={settings}
onSettingsChange={onSettingsChange}
/>
<hr />
<Instructions connectOnDragEnabled={settings.connectOnDrag} /> <Instructions
connectOnDragEnabled={settings.connectOnDrag}
/>
</div>
</TabHeader>
</div> </div>
); );
} }
......
div#ks-editor .tab-header {
display: flex;
margin-top: 0.2em;
margin-bottom: 0.5em;
}
div#ks-editor .tab-button {
display: block;
font-size: medium;
padding: 0.2em 0.5em;
border-bottom: 1px solid gray;
margin-bottom: 1px;
margin-right: 0.2em;
cursor: default;
}
div#ks-editor .tab-button:hover {
margin-bottom: 0px;
border-bottom: 2px solid gray;
}
div#ks-editor .tab-button.tab-open {
font-weight: bold;
margin-bottom: 0px;
border-bottom: 2px solid black;
}
import React, { useState } from "react";
import "./tabheader.css";
interface TabHeaderProps {
tabs: string[];
initialTabIndex?: number;
children: React.ReactNode[];
}
function TabHeader({ tabs, initialTabIndex, children }: TabHeaderProps) {
if (initialTabIndex === undefined) {
initialTabIndex = 0;
}
const [currentIndex, setCurrentIndex] = useState<number>(initialTabIndex);
return (
<div className={"tab-view"}>
<div className={"tab-header"}>
{tabs.map((name: string, index: number) => (
<div
key={index}
className={
index === currentIndex
? "tab-button tab-open"
: "tab-button"
}
onClick={() => setCurrentIndex(index)}
>
{name}
</div>
))}
</div>
<div>{children[currentIndex]}</div>
</div>
);
}
export default TabHeader;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment