Clear diagram, copy as image

This commit is contained in:
1ilit 2023-09-19 15:49:39 +03:00
parent df6b352824
commit d2515a0bcb
4 changed files with 44 additions and 8 deletions

View File

@ -34,6 +34,7 @@ import {
enterFullscreen,
exitFullscreen,
ddbDiagramIsValid,
dataURItoBlob,
} from "../utils";
import {
AreaContext,
@ -246,6 +247,15 @@ export default function ControlPanel(props) {
children: [],
function: () => {},
},
Clear: {
children: [],
function: () => {
setTables([]);
setRelationships([]);
setAreas([]);
setNotes([]);
},
},
Cut: {
children: [],
function: () => {},
@ -254,14 +264,26 @@ export default function ControlPanel(props) {
children: [],
function: () => {},
},
"Copy as image": {
children: [],
function: () => {},
},
Paste: {
children: [],
function: () => {},
},
"Copy as image": {
children: [],
function: () => {
toPng(document.getElementById("canvas")).then(function (dataUrl) {
const blob = dataURItoBlob(dataUrl);
navigator.clipboard
.write([new ClipboardItem({ "image/png": blob })])
.then(() => {
Toast.success("Copied to clipboard.");
})
.catch((error) => {
Toast.error("Could not copy to clipboard.");
});
});
},
},
Delete: {
children: [],
function: () => {},

View File

@ -60,7 +60,7 @@ const EditorPanel = (props) => {
return (
<div className="flex h-full">
<div
className="flex flex-col h-full relative"
className="flex flex-col h-full relative border-r border-gray-200"
style={{ width: `${props.width}px` }}
>
<div className="h-full flex-1 overflow-y-auto">

View File

@ -21,7 +21,7 @@ export default function Editor(props) {
const [areas, setAreas] = useState([]);
const [notes, setNotes] = useState([]);
const [resize, setResize] = useState(false);
const [width, setWidth] = useState(320);
const [width, setWidth] = useState(340);
const [selectedTable, setSelectedTable] = useState("");
const [tab, setTab] = useState(Tab.tables);
const [layout, setLayout] = useState({
@ -46,7 +46,7 @@ export default function Editor(props) {
const dragHandler = (e) => {
if (!resize) return;
const w = e.clientX;
if (w > 320) setWidth(w);
if (w > 340) setWidth(w);
};
useEffect(() => {

View File

@ -34,9 +34,23 @@ const ddbDiagramIsValid = (obj) => {
return new Validator().validate(obj, ddbSchema).valid;
};
function dataURItoBlob(dataUrl) {
const byteString = atob(dataUrl.split(",")[1]);
const mimeString = dataUrl.split(",")[0].split(":")[1].split(";")[0];
const arrayBuffer = new ArrayBuffer(byteString.length);
const intArray = new Uint8Array(arrayBuffer);
for (let i = 0; i < byteString.length; i++) {
intArray[i] = byteString.charCodeAt(i);
}
return new Blob([intArray], { type: mimeString });
}
export {
enterFullscreen,
exitFullscreen,
jsonDiagramIsValid,
ddbDiagramIsValid,
dataURItoBlob,
};