nitropage
Version:
A free and open source, extensible visual page builder based on SolidStart.
28 lines (26 loc) • 979 B
text/typescript
import { useContext } from "solid-js";
import { EditorUiState } from "../../../../types";
import { EditorUiContext } from "../../../lib/context/admin";
import { StateContext } from "../../../lib/context/page";
import { makeCancelElementCreation } from "./element/makeCancelElementCreation";
export const makeViewportToolToggle = ({
stateContext = useContext(StateContext),
editorUiContext = useContext(EditorUiContext),
} = {}) => {
const [editorUi, setEditorUi] = editorUiContext!;
const cancelElementCreation = makeCancelElementCreation({
stateContext,
editorUiContext,
});
return (mode: EditorUiState["viewport"]["tool"]) => {
if (editorUi.movingElementId) return;
cancelElementCreation();
setEditorUi((d) => {
const nextMode = d.viewport.tool !== mode ? mode : "idle";
if (!["selecting", "moving", "deleting"].includes(nextMode)) {
d.hoveredElementId = undefined;
}
d.viewport.tool = nextMode;
});
};
};