aboutsummaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/actions/actionSelectAll.ts
diff options
context:
space:
mode:
authorkj_sh6042026-03-15 16:19:35 -0400
committerkj_sh6042026-03-15 16:19:35 -0400
commit6ec259a0e71174651bae95d4628138bf6fd68742 (patch)
tree5e33c6a5ec091ecabfcb257fdc7b6a88ed8754ac /packages/excalidraw/actions/actionSelectAll.ts
parent16c8578b15c727f22921f8a80a56ee4d4e7f2272 (diff)
refactor: packages/
Diffstat (limited to 'packages/excalidraw/actions/actionSelectAll.ts')
-rw-r--r--packages/excalidraw/actions/actionSelectAll.ts57
1 files changed, 57 insertions, 0 deletions
diff --git a/packages/excalidraw/actions/actionSelectAll.ts b/packages/excalidraw/actions/actionSelectAll.ts
new file mode 100644
index 0000000..61c2780
--- /dev/null
+++ b/packages/excalidraw/actions/actionSelectAll.ts
@@ -0,0 +1,57 @@
+import { KEYS } from "../keys";
+import { register } from "./register";
+import { selectGroupsForSelectedElements } from "../groups";
+import { getNonDeletedElements, isTextElement } from "../element";
+import type { ExcalidrawElement } from "../element/types";
+import { isLinearElement } from "../element/typeChecks";
+import { LinearElementEditor } from "../element/linearElementEditor";
+import { selectAllIcon } from "../components/icons";
+import { CaptureUpdateAction } from "../store";
+
+export const actionSelectAll = register({
+ name: "selectAll",
+ label: "labels.selectAll",
+ icon: selectAllIcon,
+ trackEvent: { category: "canvas" },
+ viewMode: false,
+ perform: (elements, appState, value, app) => {
+ if (appState.editingLinearElement) {
+ return false;
+ }
+
+ const selectedElementIds = elements
+ .filter(
+ (element) =>
+ !element.isDeleted &&
+ !(isTextElement(element) && element.containerId) &&
+ !element.locked,
+ )
+ .reduce((map: Record<ExcalidrawElement["id"], true>, element) => {
+ map[element.id] = true;
+ return map;
+ }, {});
+
+ return {
+ appState: {
+ ...appState,
+ ...selectGroupsForSelectedElements(
+ {
+ editingGroupId: null,
+ selectedElementIds,
+ },
+ getNonDeletedElements(elements),
+ appState,
+ app,
+ ),
+ selectedLinearElement:
+ // single linear element selected
+ Object.keys(selectedElementIds).length === 1 &&
+ isLinearElement(elements[0])
+ ? new LinearElementEditor(elements[0])
+ : null,
+ },
+ captureUpdate: CaptureUpdateAction.IMMEDIATELY,
+ };
+ },
+ keyTest: (event) => event[KEYS.CTRL_OR_CMD] && event.key === KEYS.A,
+});