mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
Z-index
This commit is contained in:
parent
b1a90c0020
commit
a726ea5346
1 changed files with 64 additions and 4 deletions
|
@ -559,6 +559,25 @@ function deleteSelectedElements() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function someElementIsSelected() {
|
||||||
|
return elements.some(e => e.isSelected);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSelectedElementsWithIndexes() {
|
||||||
|
const indexes: Array<{ element: ExcalidrawElement; index: number }> = [];
|
||||||
|
|
||||||
|
elements.forEach((element, index) => {
|
||||||
|
if (element.isSelected) {
|
||||||
|
indexes.push({
|
||||||
|
element,
|
||||||
|
index
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return indexes.reverse();
|
||||||
|
}
|
||||||
|
|
||||||
function save(state: AppState) {
|
function save(state: AppState) {
|
||||||
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(elements));
|
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(elements));
|
||||||
localStorage.setItem(LOCAL_STORAGE_KEY_STATE, JSON.stringify(state));
|
localStorage.setItem(LOCAL_STORAGE_KEY_STATE, JSON.stringify(state));
|
||||||
|
@ -693,8 +712,7 @@ class App extends React.Component<{}, AppState> {
|
||||||
this.forceUpdate();
|
this.forceUpdate();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
} else if (event.key === KEYS.BACKSPACE || event.key === KEYS.DELETE) {
|
} else if (event.key === KEYS.BACKSPACE || event.key === KEYS.DELETE) {
|
||||||
deleteSelectedElements();
|
this.deleteSelectedElements();
|
||||||
this.forceUpdate();
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
} else if (isArrowKey(event.key)) {
|
} else if (isArrowKey(event.key)) {
|
||||||
const step = event.shiftKey
|
const step = event.shiftKey
|
||||||
|
@ -721,6 +739,39 @@ class App extends React.Component<{}, AppState> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private deleteSelectedElements = () => {
|
||||||
|
deleteSelectedElements();
|
||||||
|
this.forceUpdate();
|
||||||
|
};
|
||||||
|
|
||||||
|
private moveToFront = () => {
|
||||||
|
const elementsWithIndexes = getSelectedElementsWithIndexes();
|
||||||
|
|
||||||
|
elementsWithIndexes.forEach(elementWithIndex => {
|
||||||
|
elements.splice(elementWithIndex.index, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
elementsWithIndexes.forEach(elementWithIndex => {
|
||||||
|
elements.push(elementWithIndex.element);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.forceUpdate();
|
||||||
|
};
|
||||||
|
|
||||||
|
private sendToBack = () => {
|
||||||
|
const elementsWithIndexes = getSelectedElementsWithIndexes();
|
||||||
|
|
||||||
|
elementsWithIndexes.forEach(elementWithIndex => {
|
||||||
|
elements.splice(elementWithIndex.index, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
elementsWithIndexes.forEach(elementWithIndex => {
|
||||||
|
elements.splice(0, 0, elementWithIndex.element);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.forceUpdate();
|
||||||
|
};
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
@ -730,8 +781,7 @@ class App extends React.Component<{}, AppState> {
|
||||||
"text/plain",
|
"text/plain",
|
||||||
JSON.stringify(elements.filter(element => element.isSelected))
|
JSON.stringify(elements.filter(element => element.isSelected))
|
||||||
);
|
);
|
||||||
deleteSelectedElements();
|
this.deleteSelectedElements();
|
||||||
this.forceUpdate();
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}}
|
}}
|
||||||
onCopy={e => {
|
onCopy={e => {
|
||||||
|
@ -865,6 +915,16 @@ class App extends React.Component<{}, AppState> {
|
||||||
px)
|
px)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{someElementIsSelected() && (
|
||||||
|
<>
|
||||||
|
<h4>Shape options</h4>
|
||||||
|
<div className="panelColumn">
|
||||||
|
<button onClick={this.deleteSelectedElements}>Delete</button>
|
||||||
|
<button onClick={this.moveToFront}>Move to front</button>
|
||||||
|
<button onClick={this.sendToBack}>Send to back</button>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<canvas
|
<canvas
|
||||||
id="canvas"
|
id="canvas"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue