remove more AppState assertions

This commit is contained in:
dwelle 2023-08-05 12:06:58 +02:00
parent 40cc901d56
commit 2f940fefc0
4 changed files with 82 additions and 68 deletions

View File

@ -259,23 +259,26 @@ const duplicateElements = (
return {
elements: finalElements,
appState: selectGroupsForSelectedElements(
{
...appState,
selectedGroupIds: {},
selectedElementIds: nextElementsToSelect.reduce(
(acc: Record<ExcalidrawElement["id"], true>, element) => {
if (!isBoundToContainer(element)) {
acc[element.id] = true;
}
return acc;
},
{},
),
},
getNonDeletedElements(finalElements),
appState,
null,
) as AppState,
appState: {
...appState,
...selectGroupsForSelectedElements(
{
...appState,
selectedGroupIds: {},
selectedElementIds: nextElementsToSelect.reduce(
(acc: Record<ExcalidrawElement["id"], true>, element) => {
if (!isBoundToContainer(element)) {
acc[element.id] = true;
}
return acc;
},
{},
),
},
getNonDeletedElements(finalElements),
appState,
null,
),
},
};
};

View File

@ -6,7 +6,6 @@ import { ExcalidrawElement } from "../element/types";
import { isLinearElement } from "../element/typeChecks";
import { LinearElementEditor } from "../element/linearElementEditor";
import { excludeElementsInFramesFromSelection } from "../scene/selection";
import { AppState } from "../types";
export const actionSelectAll = register({
name: "selectAll",
@ -29,22 +28,25 @@ export const actionSelectAll = register({
}, {});
return {
appState: selectGroupsForSelectedElements(
{
...appState,
selectedLinearElement:
// single linear element selected
Object.keys(selectedElementIds).length === 1 &&
isLinearElement(elements[0])
? new LinearElementEditor(elements[0], app.scene)
: null,
editingGroupId: null,
selectedElementIds,
},
getNonDeletedElements(elements),
appState,
app,
) as AppState,
appState: {
...appState,
...selectGroupsForSelectedElements(
{
...appState,
selectedLinearElement:
// single linear element selected
Object.keys(selectedElementIds).length === 1 &&
isLinearElement(elements[0])
? new LinearElementEditor(elements[0], app.scene)
: null,
editingGroupId: null,
selectedElementIds,
},
getNonDeletedElements(elements),
appState,
app,
),
},
commitToHistory: true,
};
},

View File

@ -7591,21 +7591,24 @@ class App extends React.Component<AppProps, AppState> {
this.setState(
{
...(element && !this.state.selectedElementIds[element.id]
? selectGroupsForSelectedElements(
{
...this.state,
selectedElementIds: { [element.id]: true },
selectedLinearElement: isLinearElement(element)
? new LinearElementEditor(element, this.scene)
: null,
},
this.scene.getNonDeletedElements(),
this.state,
this,
)
? {
...this.state,
...selectGroupsForSelectedElements(
{
...this.state,
selectedElementIds: { [element.id]: true },
selectedLinearElement: isLinearElement(element)
? new LinearElementEditor(element, this.scene)
: null,
},
this.scene.getNonDeletedElements(),
this.state,
this,
),
}
: this.state),
showHyperlinkPopup: false,
} as AppState,
},
() => {
this.setState({
contextMenu: { top, left, items: this.getContextMenuItems(type) },

View File

@ -21,12 +21,15 @@ export const selectGroup = (
InteractiveCanvasAppState,
"selectedGroupIds" | "selectedElementIds" | "editingGroupId"
> => {
const elementsInGroup = elements.reduce((acc, element) => {
if (element.groupIds.includes(groupId)) {
acc[element.id] = true;
}
return acc;
}, {} as Record<string, boolean>);
const elementsInGroup = elements.reduce(
(acc: Record<string, true>, element) => {
if (element.groupIds.includes(groupId)) {
acc[element.id] = true;
}
return acc;
},
{},
);
if (Object.keys(elementsInGroup).length < 2) {
if (
@ -48,7 +51,7 @@ export const selectGroup = (
selectedElementIds: {
...appState.selectedElementIds,
...elementsInGroup,
} as AppState["selectedElementIds"],
},
};
};
@ -92,21 +95,24 @@ export const selectGroups = (function () {
// Gather all the elements within selected groups
const groupElementsIndex: Record<GroupId, string[]> = {};
const selectedElementIdsInGroups = elements.reduce((acc, element) => {
const groupId = element.groupIds.find((id) => selectedGroupIds[id]);
const selectedElementIdsInGroups = elements.reduce(
(acc: Record<string, true>, element) => {
const groupId = element.groupIds.find((id) => selectedGroupIds[id]);
if (groupId) {
acc[element.id] = true;
if (groupId) {
acc[element.id] = true;
// Populate the index
if (!Array.isArray(groupElementsIndex[groupId])) {
groupElementsIndex[groupId] = [element.id];
} else {
groupElementsIndex[groupId].push(element.id);
// Populate the index
if (!Array.isArray(groupElementsIndex[groupId])) {
groupElementsIndex[groupId] = [element.id];
} else {
groupElementsIndex[groupId].push(element.id);
}
}
}
return acc;
}, {} as Record<string, boolean>);
return acc;
},
{},
);
for (const groupId of Object.keys(groupElementsIndex)) {
// If there is one element in the group, and the group is selected or it's being edited, it's not a group
@ -126,7 +132,7 @@ export const selectGroups = (function () {
selectedElementIds: {
...appState.selectedElementIds,
...selectedElementIdsInGroups,
} as AppState["selectedElementIds"],
},
};
return lastAppState;