mirror of
https://github.com/drawdb-io/drawdb.git
synced 2025-05-24 10:29:11 +00:00
Abstract controls on fullscreen
This commit is contained in:
parent
dc8bbc0f9c
commit
680d349380
57
src/components/Controls.jsx
Normal file
57
src/components/Controls.jsx
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import { Divider, Tooltip } from "@douyinfe/semi-ui";
|
||||||
|
import { exitFullscreen } from "../utils";
|
||||||
|
import useTransform from "../hooks/useTransform";
|
||||||
|
import useLayout from "../hooks/useLayout";
|
||||||
|
|
||||||
|
export default function Controls() {
|
||||||
|
const { transform, setTransform } = useTransform();
|
||||||
|
const { setLayout } = useLayout();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex gap-2">
|
||||||
|
<div className="popover-theme flex rounded-lg items-center">
|
||||||
|
<button
|
||||||
|
className="px-3 py-2"
|
||||||
|
onClick={() =>
|
||||||
|
setTransform((prev) => ({
|
||||||
|
...prev,
|
||||||
|
zoom: prev.zoom / 1.2,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<i className="bi bi-dash-lg"></i>
|
||||||
|
</button>
|
||||||
|
<Divider align="center" layout="vertical" />
|
||||||
|
<div className="px-3 py-2">{parseInt(transform.zoom * 100)}%</div>
|
||||||
|
<Divider align="center" layout="vertical" />
|
||||||
|
<button
|
||||||
|
className="px-3 py-2"
|
||||||
|
onClick={() =>
|
||||||
|
setTransform((prev) => ({
|
||||||
|
...prev,
|
||||||
|
zoom: prev.zoom * 1.2,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<i className="bi bi-plus-lg"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<Tooltip content="Exit">
|
||||||
|
<button
|
||||||
|
className="px-3 py-2 rounded-lg popover-theme"
|
||||||
|
onClick={() => {
|
||||||
|
setLayout((prev) => ({
|
||||||
|
...prev,
|
||||||
|
sidebar: true,
|
||||||
|
toolbar: true,
|
||||||
|
header: true,
|
||||||
|
}));
|
||||||
|
exitFullscreen();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<i className="bi bi-fullscreen-exit"></i>
|
||||||
|
</button>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
@ -5,6 +5,7 @@ export const UndoRedoContext = createContext(null);
|
|||||||
export default function UndoRedoContextProvider({ children }) {
|
export default function UndoRedoContextProvider({ children }) {
|
||||||
const [undoStack, setUndoStack] = useState([]);
|
const [undoStack, setUndoStack] = useState([]);
|
||||||
const [redoStack, setRedoStack] = useState([]);
|
const [redoStack, setRedoStack] = useState([]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<UndoRedoContext.Provider
|
<UndoRedoContext.Provider
|
||||||
value={{ undoStack, redoStack, setUndoStack, setRedoStack }}
|
value={{ undoStack, redoStack, setUndoStack, setRedoStack }}
|
||||||
|
@ -11,8 +11,6 @@ import {
|
|||||||
State,
|
State,
|
||||||
} from "../data/data";
|
} from "../data/data";
|
||||||
import { db } from "../data/db";
|
import { db } from "../data/db";
|
||||||
import { Divider, Tooltip } from "@douyinfe/semi-ui";
|
|
||||||
import { exitFullscreen } from "../utils";
|
|
||||||
import useLayout from "../hooks/useLayout";
|
import useLayout from "../hooks/useLayout";
|
||||||
import LayoutContextProvider from "../context/LayoutContext";
|
import LayoutContextProvider from "../context/LayoutContext";
|
||||||
import useSettings from "../hooks/useSettings";
|
import useSettings from "../hooks/useSettings";
|
||||||
@ -24,6 +22,7 @@ import useUndoRedo from "../hooks/useUndoRedo";
|
|||||||
import UndoRedoContextProvider from "../context/UndoRedoContext";
|
import UndoRedoContextProvider from "../context/UndoRedoContext";
|
||||||
import SelectContextProvider from "../context/SelectContext";
|
import SelectContextProvider from "../context/SelectContext";
|
||||||
import useSelect from "../hooks/useSelect";
|
import useSelect from "../hooks/useSelect";
|
||||||
|
import Controls from "../components/Controls";
|
||||||
|
|
||||||
export const StateContext = createContext();
|
export const StateContext = createContext();
|
||||||
export const AreaContext = createContext();
|
export const AreaContext = createContext();
|
||||||
@ -60,7 +59,7 @@ function WorkSpace() {
|
|||||||
const [resize, setResize] = useState(false);
|
const [resize, setResize] = useState(false);
|
||||||
const [width, setWidth] = useState(340);
|
const [width, setWidth] = useState(340);
|
||||||
const [tab, setTab] = useState(Tab.tables);
|
const [tab, setTab] = useState(Tab.tables);
|
||||||
const { layout, setLayout } = useLayout();
|
const { layout } = useLayout();
|
||||||
const { settings, setSettings } = useSettings();
|
const { settings, setSettings } = useSettings();
|
||||||
const { transform, setTransform } = useTransform();
|
const { transform, setTransform } = useTransform();
|
||||||
const { selectedElement, setSelectedElement } = useSelect();
|
const { selectedElement, setSelectedElement } = useSelect();
|
||||||
@ -557,52 +556,8 @@ function WorkSpace() {
|
|||||||
<div className="relative w-full h-full overflow-hidden">
|
<div className="relative w-full h-full overflow-hidden">
|
||||||
<Canvas state={state} setState={setState} />
|
<Canvas state={state} setState={setState} />
|
||||||
{!(layout.sidebar || layout.toolbar || layout.header) && (
|
{!(layout.sidebar || layout.toolbar || layout.header) && (
|
||||||
<div className="fixed right-5 bottom-4 flex gap-2">
|
<div className="fixed right-5 bottom-4">
|
||||||
<div className="popover-theme flex rounded-lg items-center">
|
<Controls />
|
||||||
<button
|
|
||||||
className="px-3 py-2"
|
|
||||||
onClick={() =>
|
|
||||||
setTransform((prev) => ({
|
|
||||||
...prev,
|
|
||||||
zoom: prev.zoom / 1.2,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
>
|
|
||||||
<i className="bi bi-dash-lg"></i>
|
|
||||||
</button>
|
|
||||||
<Divider align="center" layout="vertical" />
|
|
||||||
<div className="px-3 py-2">
|
|
||||||
{parseInt(transform.zoom * 100)}%
|
|
||||||
</div>
|
|
||||||
<Divider align="center" layout="vertical" />
|
|
||||||
<button
|
|
||||||
className="px-3 py-2"
|
|
||||||
onClick={() =>
|
|
||||||
setTransform((prev) => ({
|
|
||||||
...prev,
|
|
||||||
zoom: prev.zoom * 1.2,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
>
|
|
||||||
<i className="bi bi-plus-lg"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<Tooltip content="Exit">
|
|
||||||
<button
|
|
||||||
className="px-3 py-2 rounded-lg popover-theme"
|
|
||||||
onClick={() => {
|
|
||||||
setLayout((prev) => ({
|
|
||||||
...prev,
|
|
||||||
sidebar: true,
|
|
||||||
toolbar: true,
|
|
||||||
header: true,
|
|
||||||
}));
|
|
||||||
exitFullscreen();
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<i className="bi bi-fullscreen-exit"></i>
|
|
||||||
</button>
|
|
||||||
</Tooltip>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user