|
@@ -7,15 +7,31 @@ export function selectGroup(
|
|
|
appState: AppState,
|
|
|
elements: readonly NonDeleted<ExcalidrawElement>[],
|
|
|
): AppState {
|
|
|
+ const elementsInGroup = elements.filter((element) =>
|
|
|
+ element.groupIds.includes(groupId),
|
|
|
+ );
|
|
|
+
|
|
|
+ if (elementsInGroup.length < 2) {
|
|
|
+ if (
|
|
|
+ appState.selectedGroupIds[groupId] ||
|
|
|
+ appState.editingGroupId === groupId
|
|
|
+ ) {
|
|
|
+ return {
|
|
|
+ ...appState,
|
|
|
+ selectedGroupIds: { ...appState.selectedGroupIds, [groupId]: false },
|
|
|
+ editingGroupId: null,
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return appState;
|
|
|
+ }
|
|
|
+
|
|
|
return {
|
|
|
...appState,
|
|
|
selectedGroupIds: { ...appState.selectedGroupIds, [groupId]: true },
|
|
|
selectedElementIds: {
|
|
|
...appState.selectedElementIds,
|
|
|
...Object.fromEntries(
|
|
|
- elements
|
|
|
- .filter((element) => element.groupIds.includes(groupId))
|
|
|
- .map((element) => [element.id, true]),
|
|
|
+ elementsInGroup.map((element) => [element.id, true]),
|
|
|
),
|
|
|
},
|
|
|
};
|
|
@@ -89,8 +105,8 @@ export function getSelectedGroupIdForElement(
|
|
|
}
|
|
|
|
|
|
export function getNewGroupIdsForDuplication(
|
|
|
- groupIds: GroupId[],
|
|
|
- editingGroupId: GroupId | null,
|
|
|
+ groupIds: ExcalidrawElement["groupIds"],
|
|
|
+ editingGroupId: AppState["editingGroupId"],
|
|
|
mapper: (groupId: GroupId) => GroupId,
|
|
|
) {
|
|
|
const copy = [...groupIds];
|
|
@@ -107,9 +123,9 @@ export function getNewGroupIdsForDuplication(
|
|
|
}
|
|
|
|
|
|
export function addToGroup(
|
|
|
- prevGroupIds: GroupId[],
|
|
|
+ prevGroupIds: ExcalidrawElement["groupIds"],
|
|
|
newGroupId: GroupId,
|
|
|
- editingGroupId: GroupId | null,
|
|
|
+ editingGroupId: AppState["editingGroupId"],
|
|
|
) {
|
|
|
// insert before the editingGroupId, or push to the end.
|
|
|
const groupIds = [...prevGroupIds];
|
|
@@ -123,7 +139,7 @@ export function addToGroup(
|
|
|
}
|
|
|
|
|
|
export function removeFromSelectedGroups(
|
|
|
- groupIds: GroupId[],
|
|
|
+ groupIds: ExcalidrawElement["groupIds"],
|
|
|
selectedGroupIds: { [groupId: string]: boolean },
|
|
|
) {
|
|
|
return groupIds.filter((groupId) => !selectedGroupIds[groupId]);
|