소스 검색

feat: shortcut for clearCanvas confirmDialog (#6114)

Co-authored-by: dwelle <[email protected]>
resolve https://github.com/excalidraw/excalidraw/issues/5818
Jang Min 2 년 전
부모
커밋
11e2f90ca1
4개의 변경된 파일38개의 추가작업 그리고 22개의 파일을 삭제
  1. 3 1
      src/actions/actionDeleteSelected.tsx
  2. 2 0
      src/actions/shortcuts.ts
  3. 9 1
      src/components/App.tsx
  4. 24 20
      src/components/HelpDialog.tsx

+ 3 - 1
src/actions/actionDeleteSelected.tsx

@@ -154,7 +154,9 @@ export const actionDeleteSelected = register({
     };
     };
   },
   },
   contextItemLabel: "labels.delete",
   contextItemLabel: "labels.delete",
-  keyTest: (event) => event.key === KEYS.BACKSPACE || event.key === KEYS.DELETE,
+  keyTest: (event, appState, elements) =>
+    (event.key === KEYS.BACKSPACE || event.key === KEYS.DELETE) &&
+    !event[KEYS.CTRL_OR_CMD],
   PanelComponent: ({ elements, appState, updateData }) => (
   PanelComponent: ({ elements, appState, updateData }) => (
     <ToolButton
     <ToolButton
       type="button"
       type="button"

+ 2 - 0
src/actions/shortcuts.ts

@@ -8,6 +8,7 @@ export type ShortcutName =
       ActionName,
       ActionName,
       | "toggleTheme"
       | "toggleTheme"
       | "loadScene"
       | "loadScene"
+      | "clearCanvas"
       | "cut"
       | "cut"
       | "copy"
       | "copy"
       | "paste"
       | "paste"
@@ -41,6 +42,7 @@ const shortcutMap: Record<ShortcutName, string[]> = {
   toggleTheme: [getShortcutKey("Shift+Alt+D")],
   toggleTheme: [getShortcutKey("Shift+Alt+D")],
   saveScene: [getShortcutKey("CtrlOrCmd+S")],
   saveScene: [getShortcutKey("CtrlOrCmd+S")],
   loadScene: [getShortcutKey("CtrlOrCmd+O")],
   loadScene: [getShortcutKey("CtrlOrCmd+O")],
+  clearCanvas: [getShortcutKey("CtrlOrCmd+Delete")],
   imageExport: [getShortcutKey("CtrlOrCmd+Shift+E")],
   imageExport: [getShortcutKey("CtrlOrCmd+Shift+E")],
   cut: [getShortcutKey("CtrlOrCmd+X")],
   cut: [getShortcutKey("CtrlOrCmd+X")],
   copy: [getShortcutKey("CtrlOrCmd+C")],
   copy: [getShortcutKey("CtrlOrCmd+C")],

+ 9 - 1
src/components/App.tsx

@@ -279,6 +279,8 @@ import { shouldShowBoundingBox } from "../element/transformHandles";
 import { Fonts } from "../scene/Fonts";
 import { Fonts } from "../scene/Fonts";
 import { actionPaste } from "../actions/actionClipboard";
 import { actionPaste } from "../actions/actionClipboard";
 import { actionToggleHandTool } from "../actions/actionCanvas";
 import { actionToggleHandTool } from "../actions/actionCanvas";
+import { jotaiStore } from "../jotai";
+import { activeConfirmDialogAtom } from "./ActiveConfirmDialog";
 
 
 const deviceContextInitialValue = {
 const deviceContextInitialValue = {
   isSmScreen: false,
   isSmScreen: false,
@@ -1952,7 +1954,6 @@ class App extends React.Component<AppProps, AppState> {
   );
   );
 
 
   // Input handling
   // Input handling
-
   private onKeyDown = withBatchedUpdates(
   private onKeyDown = withBatchedUpdates(
     (event: React.KeyboardEvent | KeyboardEvent) => {
     (event: React.KeyboardEvent | KeyboardEvent) => {
       // normalize `event.key` when CapsLock is pressed #2372
       // normalize `event.key` when CapsLock is pressed #2372
@@ -2194,6 +2195,13 @@ class App extends React.Component<AppProps, AppState> {
           event.stopPropagation();
           event.stopPropagation();
         }
         }
       }
       }
+
+      if (
+        event[KEYS.CTRL_OR_CMD] &&
+        (event.key === KEYS.BACKSPACE || event.key === KEYS.DELETE)
+      ) {
+        jotaiStore.set(activeConfirmDialogAtom, "clearCanvas");
+      }
     },
     },
   );
   );
 
 

+ 24 - 20
src/components/HelpDialog.tsx

@@ -273,22 +273,6 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => {
             className="HelpDialog__island--editor"
             className="HelpDialog__island--editor"
             caption={t("helpDialog.editor")}
             caption={t("helpDialog.editor")}
           >
           >
-            <Shortcut
-              label={t("labels.selectAll")}
-              shortcuts={[getShortcutKey("CtrlOrCmd+A")]}
-            />
-            <Shortcut
-              label={t("labels.multiSelect")}
-              shortcuts={[getShortcutKey(`Shift+${t("helpDialog.click")}`)]}
-            />
-            <Shortcut
-              label={t("helpDialog.deepSelect")}
-              shortcuts={[getShortcutKey(`CtrlOrCmd+${t("helpDialog.click")}`)]}
-            />
-            <Shortcut
-              label={t("helpDialog.deepBoxSelect")}
-              shortcuts={[getShortcutKey(`CtrlOrCmd+${t("helpDialog.drag")}`)]}
-            />
             <Shortcut
             <Shortcut
               label={t("labels.moveCanvas")}
               label={t("labels.moveCanvas")}
               shortcuts={[
               shortcuts={[
@@ -297,6 +281,14 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => {
               ]}
               ]}
               isOr={true}
               isOr={true}
             />
             />
+            <Shortcut
+              label={t("buttons.clearReset")}
+              shortcuts={[getShortcutKey("CtrlOrCmd+Delete")]}
+            />
+            <Shortcut
+              label={t("labels.delete")}
+              shortcuts={[getShortcutKey("Delete")]}
+            />
             <Shortcut
             <Shortcut
               label={t("labels.cut")}
               label={t("labels.cut")}
               shortcuts={[getShortcutKey("CtrlOrCmd+X")]}
               shortcuts={[getShortcutKey("CtrlOrCmd+X")]}
@@ -313,6 +305,22 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => {
               label={t("labels.pasteAsPlaintext")}
               label={t("labels.pasteAsPlaintext")}
               shortcuts={[getShortcutKey("CtrlOrCmd+Shift+V")]}
               shortcuts={[getShortcutKey("CtrlOrCmd+Shift+V")]}
             />
             />
+            <Shortcut
+              label={t("labels.selectAll")}
+              shortcuts={[getShortcutKey("CtrlOrCmd+A")]}
+            />
+            <Shortcut
+              label={t("labels.multiSelect")}
+              shortcuts={[getShortcutKey(`Shift+${t("helpDialog.click")}`)]}
+            />
+            <Shortcut
+              label={t("helpDialog.deepSelect")}
+              shortcuts={[getShortcutKey(`CtrlOrCmd+${t("helpDialog.click")}`)]}
+            />
+            <Shortcut
+              label={t("helpDialog.deepBoxSelect")}
+              shortcuts={[getShortcutKey(`CtrlOrCmd+${t("helpDialog.drag")}`)]}
+            />
             {/* firefox supports clipboard API under a flag, so we'll
             {/* firefox supports clipboard API under a flag, so we'll
                 show users what they can do in the error message */}
                 show users what they can do in the error message */}
             {(probablySupportsClipboardBlob || isFirefox) && (
             {(probablySupportsClipboardBlob || isFirefox) && (
@@ -329,10 +337,6 @@ export const HelpDialog = ({ onClose }: { onClose?: () => void }) => {
               label={t("labels.pasteStyles")}
               label={t("labels.pasteStyles")}
               shortcuts={[getShortcutKey("CtrlOrCmd+Alt+V")]}
               shortcuts={[getShortcutKey("CtrlOrCmd+Alt+V")]}
             />
             />
-            <Shortcut
-              label={t("labels.delete")}
-              shortcuts={[getShortcutKey("Delete")]}
-            />
             <Shortcut
             <Shortcut
               label={t("labels.sendToBack")}
               label={t("labels.sendToBack")}
               shortcuts={[
               shortcuts={[