This commit is contained in:
1ilit 2023-09-19 15:48:22 +03:00
parent f760f844bb
commit da7aed543b

View File

@ -6,7 +6,7 @@ import {
IconShareStroked, IconShareStroked,
IconChevronUp, IconChevronUp,
IconChevronDown, IconChevronDown,
IconPlus, IconCheckboxTick,
} 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";
@ -16,40 +16,12 @@ import {
Button, Button,
Divider, Divider,
Dropdown, Dropdown,
Form,
} from "@douyinfe/semi-ui"; } from "@douyinfe/semi-ui";
export default function ControlPanel() { export default function ControlPanel() {
const Tool = {
TOOLBAR: 0,
ZOOM: 1,
UNDO: 2,
REDO: 3,
ADD: 4,
COUNT: 5,
};
const [showToolBar, setShowToolBar] = useState(true); const [showToolBar, setShowToolBar] = useState(true);
const [openZoom, setOpenZoom] = useState(false);
const [openAdd, setOpenAdd] = useState(false);
const invert = (e, tool) => {
switch (tool) {
case Tool.TOOLBAR:
setShowToolBar((prev) => !prev);
break;
case Tool.ZOOM:
setOpenZoom((prev) => !prev);
setOpenAdd(false);
break;
case Tool.ADD:
setOpenAdd((prev) => !prev);
setOpenZoom(false);
break;
default:
break;
}
};
return ( return (
<> <>
{showToolBar && ( {showToolBar && (
@ -65,6 +37,7 @@ export default function ControlPanel() {
{Object.keys(menu).map((category) => ( {Object.keys(menu).map((category) => (
<Dropdown <Dropdown
key={category} key={category}
position="bottomLeft"
style={{ width: "200px" }} style={{ width: "200px" }}
render={ render={
<Dropdown.Menu> <Dropdown.Menu>
@ -89,7 +62,7 @@ export default function ControlPanel() {
style={{ style={{
display: "flex", display: "flex",
justifyContent: "space-between", justifyContent: "space-between",
alignItems: "center" alignItems: "center",
}} }}
> >
<div>{item}</div> <div>{item}</div>
@ -99,9 +72,7 @@ export default function ControlPanel() {
); );
} }
return ( return (
<Dropdown.Item key={index}> <Dropdown.Item key={index}>{item}</Dropdown.Item>
{item}
</Dropdown.Item>
); );
})} })}
</Dropdown.Menu> </Dropdown.Menu>
@ -139,7 +110,6 @@ export default function ControlPanel() {
fontSize: "16px", fontSize: "16px",
marginLeft: "12px", marginLeft: "12px",
marginRight: "12px", marginRight: "12px",
border: "1px solid white",
}} }}
size="large" size="large"
icon={<IconShareStroked />} icon={<IconShareStroked />}
@ -152,104 +122,119 @@ export default function ControlPanel() {
</div> </div>
</nav> </nav>
)} )}
<div className="p-2 px-5 flex justify-between items-center rounded-xl bg-slate-100 my-1 mx-6 text-slate-700">
<div className="p-1 flex justify-between items-center rounded-xl bg-slate-100 my-1 mx-6 text-slate-700">
<div className="flex justify-start items-center"> <div className="flex justify-start items-center">
<div className="relative"> <Dropdown
<button className="ms-2 py-2 px-3 hover:bg-gray-300 relative"> position="bottomLeft"
<i className="fa-solid fa-table-list"></i> style={{ width: "180px" }}
</button> render={
<Divider layout="vertical" margin="8px" /> <Dropdown.Menu>
<button <Dropdown.Item icon={<IconCheckboxTick />}>
className="py-2 px-3 hover:bg-gray-300 relative" Header
onClick={(e) => invert(e, Tool.ZOOM)} </Dropdown.Item>
> <Dropdown.Item icon={<IconCheckboxTick />}>
Overview
</Dropdown.Item>
<Dropdown.Item icon={<IconCheckboxTick />}>
Services
</Dropdown.Item>
<Dropdown.Divider />
<Dropdown.Item icon={<IconCheckboxTick />}>
Fullscreen
</Dropdown.Item>
</Dropdown.Menu>
}
trigger="click"
>
<div className="py-1 px-2 hover:bg-gray-300">
<i className="fa-solid fa-table-list"></i> <IconCaretdown />
</div>
</Dropdown>
<Divider layout="vertical" margin="8px" />
<Dropdown
style={{ width: "180px" }}
position="bottomLeft"
render={
<Dropdown.Menu>
<Dropdown.Item>Fit window</Dropdown.Item>
<Dropdown.Divider />
{[
"25%",
"50%",
"75%",
"100%",
"125%",
"150%",
"200%",
"300%",
].map((e, i) => (
<Dropdown.Item key={i}>{e}</Dropdown.Item>
))}
<Dropdown.Divider />
<Dropdown.Item>
<Form>
<Form.InputNumber
field="zoom"
label="Custom zoom"
placeholder="Zoom"
suffix={<div className="p-1">%</div>}
/>
</Form>
</Dropdown.Item>
</Dropdown.Menu>
}
trigger="click"
>
<div className="py-1 px-2 hover:bg-gray-300">
zoom <IconCaretdown /> zoom <IconCaretdown />
</button> </div>
<ul </Dropdown>
className={`${
openZoom ? "" : "hidden"
} w-[200px] flex-col drop-shadow-lg bg-white py-1 ms-2 absolute z-20 top-full`}
>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
Fit window
</li>
<hr />
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">25%</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">50%</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">75%</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
100%
</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
125%
</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
150%
</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
175%
</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
200%
</li>
<hr />
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
Custom
</li>
</ul>
</div>
<button className="py-1 px-2 hover:bg-gray-300" title="Zoom in"> <button className="py-1 px-2 hover:bg-gray-300" title="Zoom in">
<i className="fa-solid fa-magnifying-glass-plus"></i> <i className="fa-solid fa-magnifying-glass-plus"></i>
</button> </button>
<button className="py-1 px-2 hover:bg-gray-300" title="Zoom out"> <button className="py-1 px-2 hover:bg-gray-300" title="Zoom out">
<i className="fa-solid fa-magnifying-glass-minus"></i> <i className="fa-solid fa-magnifying-glass-minus"></i>
</button> </button>
<Divider layout="vertical" margin="8px" />
<button className="py-1 px-2 hover:bg-gray-300" title="Undo"> <button className="py-1 px-2 hover:bg-gray-300" title="Undo">
<i className="fa-solid fa-rotate-left "></i> <i className="fa-solid fa-rotate-left "></i>
</button> </button>
<button className="py-1 px-2 hover:bg-gray-300" title="Redo"> <button className="py-1 px-2 hover:bg-gray-300" title="Redo">
<i className="fa-solid fa-rotate-right"></i> <i className="fa-solid fa-rotate-right"></i>
</button> </button>
<Divider layout="vertical" margin="8px" />
<Dropdown
position="bottomLeft"
style={{ width: "180px" }}
render={
<Dropdown.Menu>
<Dropdown.Item>Table</Dropdown.Item>
<Dropdown.Item>Note</Dropdown.Item>
<Dropdown.Item>Subject area</Dropdown.Item>
<Dropdown.Item>Text</Dropdown.Item>
</Dropdown.Menu>
}
trigger="click"
>
<div className="py-1 px-2 hover:bg-gray-300">
<i className="fa-solid fa-plus"></i> <IconCaretdown />
</div>
</Dropdown>
<button className="py-1 px-2 hover:bg-gray-300" title="Edit"> <button className="py-1 px-2 hover:bg-gray-300" title="Edit">
<i className="fa-solid fa-pen-to-square"></i> <i className="fa-solid fa-pen-to-square"></i>
</button> </button>
<div className="relative">
<button
className="py-1 px-2 hover:bg-gray-300 relative"
title="Add"
onClick={(e) => invert(e, Tool.ADD)}
>
<IconPlus />
<IconCaretdown />
</button>
<ul
className={`${
openAdd ? "" : "hidden"
} w-[200px] flex-col drop-shadow-lg bg-white py-1 absolute z-20 top-full`}
>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
Table
</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
Relationship
</li>
<li className="px-5 py-3 hover:bg-gray-200 relative z-20">
Note
</li>
</ul>
</div>
<button className="py-1 px-2 hover:bg-gray-300" title="Delete"> <button className="py-1 px-2 hover:bg-gray-300" title="Delete">
<i className="fa-solid fa-trash"></i> <i className="fa-solid fa-trash"></i>
</button> </button>
<button className="py-1 px-2 hover:bg-gray-300" title="Move"> <Divider layout="vertical" margin="8px" />
<i className="fa-regular fa-hand"></i> <button className="py-1 px-2 hover:bg-gray-300" title="Save">
<i className="fa-regular fa-floppy-disk"></i>
</button> </button>
<button className="py-1 px-2 hover:bg-gray-300" title="Commit"> <button className="py-1 px-2 hover:bg-gray-300" title="Commit">
<i className="fa-solid fa-code-commit"></i> <i className="fa-solid fa-code-branch"></i>
</button> </button>
</div> </div>
<button onClick={(e) => invert(e, Tool.TOOLBAR)} className="me-3"> <button onClick={(e) => setShowToolBar((prev) => !prev)}>
{showToolBar ? <IconChevronUp /> : <IconChevronDown />} {showToolBar ? <IconChevronUp /> : <IconChevronDown />}
</button> </button>
</div> </div>