From 8fa6d0edd889a919437768f09be6f4d748c59fd5 Mon Sep 17 00:00:00 2001 From: Long Jun Date: Thu, 10 Oct 2019 20:40:36 +0800 Subject: [PATCH 1/5] short cut for copy paste undo redo --- Composer/packages/client/src/ShellApi.ts | 2 ++ .../ExtensionContainer.tsx | 8 +++++++ .../src/components/lib/KeyboardZone.tsx | 22 ++++++++++++------- .../src/constants/KeyboardCommandTypes.ts | 14 ++++++++++++ .../src/constants/NodeEventTypes.ts | 2 ++ .../visual-designer/src/editors/ObiEditor.tsx | 18 +++++++++++++++ .../src/editors/editorConfig.ts | 2 +- .../extensions/visual-designer/src/index.tsx | 14 +++++++++++- 8 files changed, 72 insertions(+), 10 deletions(-) diff --git a/Composer/packages/client/src/ShellApi.ts b/Composer/packages/client/src/ShellApi.ts index d7e4fc976f..f40b9c5f3a 100644 --- a/Composer/packages/client/src/ShellApi.ts +++ b/Composer/packages/client/src/ShellApi.ts @@ -116,6 +116,8 @@ export const ShellApi: React.FC = () => { }); }); }); + apiClient.registerApi('undo', actions.undo); + apiClient.registerApi('redo', actions.redo); return () => { apiClient.disconnect(); diff --git a/Composer/packages/client/src/extension-container/ExtensionContainer.tsx b/Composer/packages/client/src/extension-container/ExtensionContainer.tsx index 8542049eec..9a7ef7cfa2 100644 --- a/Composer/packages/client/src/extension-container/ExtensionContainer.tsx +++ b/Composer/packages/client/src/extension-container/ExtensionContainer.tsx @@ -99,6 +99,14 @@ const shellApi = { validateExpression: (expression: string) => { return apiClient.apiCall('isExpression', { expression }); }, + + undo: () => { + return apiClient.apiCall('undo'); + }, + + redo: () => { + return apiClient.apiCall('redo'); + }, }; function ExtensionContainer() { diff --git a/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx b/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx index 219e1b3ef6..c3964fb9dc 100644 --- a/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx +++ b/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx @@ -2,7 +2,8 @@ import { jsx } from '@emotion/core'; import { FC, useRef } from 'react'; -import { mapShortcutToKeyboardCommand } from '../../constants/KeyboardCommandTypes'; +import { mapShortcutToKeyboardCommand, KeyboardCommandTypes } from '../../constants/KeyboardCommandTypes'; +import { any } from 'prop-types'; interface NodeProps { when: string; @@ -23,14 +24,19 @@ export const KeyboardZone: FC = ({ when, onCommand, children }): JSX. }; const handleKeyUp = e => { - if (when !== 'normal') { - let keyCode = isMac() ? 'Mac' : 'Windows'; - for (const key in keyPressed.current) { - if (keyPressed.current[key]) { - keyCode += `.${key}`; - } + let keyCode = isMac() ? 'Mac' : 'Windows'; + let cmdDetail: { [key: string]: string } = {}; + for (const key in keyPressed.current) { + if (keyPressed.current[key]) { + keyCode += `.${key}`; } - onCommand(mapShortcutToKeyboardCommand(keyCode)); + cmdDetail = mapShortcutToKeyboardCommand(keyCode); + } + if ( + when !== 'normal' || + (cmdDetail.command === KeyboardCommandTypes.Node.Undo || cmdDetail.command === KeyboardCommandTypes.Node.Redo) + ) { + onCommand(cmdDetail); } delete keyPressed.current[e.key]; }; diff --git a/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts b/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts index 67c6e68983..e148037fc5 100644 --- a/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts +++ b/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts @@ -18,6 +18,8 @@ export const KeyboardCommandTypes = { Copy: 'copy', Cut: 'cut', Paste: 'paste', + Redo: 'redo', + Undo: 'undo', }, }; @@ -81,11 +83,23 @@ const KeyboardNodeEditingShortcuts = { 'Windows.Control.c': KeyboardCommandTypes.Node.Copy, 'Windows.Control.X': KeyboardCommandTypes.Node.Cut, 'Windows.Control.x': KeyboardCommandTypes.Node.Cut, + 'Windows.Control.v': KeyboardCommandTypes.Node.Paste, + 'Windows.Control.V': KeyboardCommandTypes.Node.Paste, + 'Windows.Control.Z': KeyboardCommandTypes.Node.Undo, + 'Windows.Control.z': KeyboardCommandTypes.Node.Undo, + 'Windows.Control.Shift.Z': KeyboardCommandTypes.Node.Redo, + 'Windows.Control.Shift.z': KeyboardCommandTypes.Node.Redo, 'Mac.Meta.C': KeyboardCommandTypes.Node.Copy, 'Mac.Meta.c': KeyboardCommandTypes.Node.Copy, 'Mac.Meta.X': KeyboardCommandTypes.Node.Cut, 'Mac.Meta.x': KeyboardCommandTypes.Node.Cut, + 'Mac.Meta.v': KeyboardCommandTypes.Node.Paste, + 'Mac.Meta.V': KeyboardCommandTypes.Node.Paste, + 'Mac.Meta.Z': KeyboardCommandTypes.Node.Undo, + 'Mac.Meta.z': KeyboardCommandTypes.Node.Undo, + 'Mac.Meta.Shift.Z': KeyboardCommandTypes.Node.Redo, + 'Mac.Meta.Shift.z': KeyboardCommandTypes.Node.Redo, }; const { arrowNavigation, tabNavigation, keyboardNodeEditing } = EditorConfig.features; diff --git a/Composer/packages/extensions/visual-designer/src/constants/NodeEventTypes.ts b/Composer/packages/extensions/visual-designer/src/constants/NodeEventTypes.ts index 0ec9df5bc7..f659794f82 100644 --- a/Composer/packages/extensions/visual-designer/src/constants/NodeEventTypes.ts +++ b/Composer/packages/extensions/visual-designer/src/constants/NodeEventTypes.ts @@ -13,4 +13,6 @@ export enum NodeEventTypes { DeleteSelection = 'event.data.delete-selection', AppendSelection = 'event.data.paste-selection--keyboard', InsertSelection = 'event.data.paste-selection--menu', + Undo = 'event.data.undo', + Redo = 'event.data.redo', } diff --git a/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx b/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx index 790a6513b8..d153136869 100644 --- a/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx +++ b/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx @@ -34,6 +34,8 @@ export const ObiEditor: FC = ({ onOpen, onChange, onSelect, + undo, + redo, }): JSX.Element | null => { let divRef; @@ -125,6 +127,12 @@ export const ObiEditor: FC = ({ onChange(dialog); }; break; + case NodeEventTypes.Undo: + handler = undo; + break; + case NodeEventTypes.Redo: + handler = redo; + break; default: handler = onFocusSteps; break; @@ -239,6 +247,12 @@ export const ObiEditor: FC = ({ actions: clipboardContext.clipboardActions, }); break; + case KeyboardCommandTypes.Node.Undo: + dispatchEvent(NodeEventTypes.Undo, {}); + break; + case KeyboardCommandTypes.Node.Redo: + dispatchEvent(NodeEventTypes.Redo, {}); + break; } break; case KeyboardPrimaryTypes.Cursor: { @@ -310,6 +324,8 @@ ObiEditor.defaultProps = { onOpen: () => {}, onChange: () => {}, onSelect: () => {}, + undo: () => {}, + redo: () => {}, }; interface ObiEditorProps { @@ -323,4 +339,6 @@ interface ObiEditorProps { onOpen: (calleeDialog: string, callerId: string) => any; onChange: (newDialog: any) => any; onSelect: (selection: any) => any; + undo?: () => any; + redo?: () => any; } diff --git a/Composer/packages/extensions/visual-designer/src/editors/editorConfig.ts b/Composer/packages/extensions/visual-designer/src/editors/editorConfig.ts index 60e0c8c337..8c1028271a 100644 --- a/Composer/packages/extensions/visual-designer/src/editors/editorConfig.ts +++ b/Composer/packages/extensions/visual-designer/src/editors/editorConfig.ts @@ -3,6 +3,6 @@ export const EditorConfig = { showEvents: false, arrowNavigation: true, tabNavigation: true, - keyboardNodeEditing: false, + keyboardNodeEditing: true, }, }; diff --git a/Composer/packages/extensions/visual-designer/src/index.tsx b/Composer/packages/extensions/visual-designer/src/index.tsx index f3308359fa..2142bcb02c 100644 --- a/Composer/packages/extensions/visual-designer/src/index.tsx +++ b/Composer/packages/extensions/visual-designer/src/index.tsx @@ -30,7 +30,17 @@ const VisualDesigner: React.FC = ({ } const data = dataCache.current; - const { navTo, onFocusEvent, onFocusSteps, onSelect, saveData, getLgTemplates, removeLgTemplate } = shellApi; + const { + navTo, + onFocusEvent, + onFocusSteps, + onSelect, + saveData, + getLgTemplates, + removeLgTemplate, + undo, + redo, + } = shellApi; const focusedId = Array.isArray(focusedSteps) && focusedSteps[0] ? focusedSteps[0] : ''; @@ -64,6 +74,8 @@ const VisualDesigner: React.FC = ({ onOpen={(x, rest) => navTo(x, rest)} onChange={x => saveData(x)} onSelect={onSelect} + undo={undo} + redo={redo} /> From dddbfe5be655affa99540f72f2c6b58f0c5f4c2b Mon Sep 17 00:00:00 2001 From: Long Jun Date: Fri, 11 Oct 2019 17:59:19 +0800 Subject: [PATCH 2/5] refactor keyboardZone & close copy&paste shortcut --- .../src/components/lib/KeyboardZone.tsx | 15 +---- .../src/constants/KeyboardCommandTypes.ts | 26 +++++--- .../visual-designer/src/editors/ObiEditor.tsx | 63 +++++++++++-------- .../src/editors/editorConfig.ts | 3 +- 4 files changed, 58 insertions(+), 49 deletions(-) diff --git a/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx b/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx index c3964fb9dc..65d0e8cde0 100644 --- a/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx +++ b/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx @@ -2,18 +2,16 @@ import { jsx } from '@emotion/core'; import { FC, useRef } from 'react'; -import { mapShortcutToKeyboardCommand, KeyboardCommandTypes } from '../../constants/KeyboardCommandTypes'; -import { any } from 'prop-types'; +import { mapShortcutToKeyboardCommand } from '../../constants/KeyboardCommandTypes'; interface NodeProps { - when: string; onCommand: (action) => object | void; } const isMac = () => { return /macintosh|mac os x/i.test(navigator.userAgent); }; -export const KeyboardZone: FC = ({ when, onCommand, children }): JSX.Element => { +export const KeyboardZone: FC = ({ onCommand, children }): JSX.Element => { const keyPressed = useRef({}); const handleKeyDown = e => { if (e.key === 'Tab') { @@ -25,19 +23,12 @@ export const KeyboardZone: FC = ({ when, onCommand, children }): JSX. const handleKeyUp = e => { let keyCode = isMac() ? 'Mac' : 'Windows'; - let cmdDetail: { [key: string]: string } = {}; for (const key in keyPressed.current) { if (keyPressed.current[key]) { keyCode += `.${key}`; } - cmdDetail = mapShortcutToKeyboardCommand(keyCode); - } - if ( - when !== 'normal' || - (cmdDetail.command === KeyboardCommandTypes.Node.Undo || cmdDetail.command === KeyboardCommandTypes.Node.Redo) - ) { - onCommand(cmdDetail); } + onCommand(mapShortcutToKeyboardCommand(keyCode)); delete keyPressed.current[e.key]; }; return ( diff --git a/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts b/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts index e148037fc5..3d33dce9ef 100644 --- a/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts +++ b/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts @@ -18,6 +18,8 @@ export const KeyboardCommandTypes = { Copy: 'copy', Cut: 'cut', Paste: 'paste', + }, + Operation: { Redo: 'redo', Undo: 'undo', }, @@ -42,6 +44,7 @@ const findCommandAreaByValue = (() => { export const KeyboardPrimaryTypes = { Cursor: 'Cursor', Node: 'Node', + Operation: 'Operation', }; const BasicShortcuts = { @@ -85,10 +88,6 @@ const KeyboardNodeEditingShortcuts = { 'Windows.Control.x': KeyboardCommandTypes.Node.Cut, 'Windows.Control.v': KeyboardCommandTypes.Node.Paste, 'Windows.Control.V': KeyboardCommandTypes.Node.Paste, - 'Windows.Control.Z': KeyboardCommandTypes.Node.Undo, - 'Windows.Control.z': KeyboardCommandTypes.Node.Undo, - 'Windows.Control.Shift.Z': KeyboardCommandTypes.Node.Redo, - 'Windows.Control.Shift.z': KeyboardCommandTypes.Node.Redo, 'Mac.Meta.C': KeyboardCommandTypes.Node.Copy, 'Mac.Meta.c': KeyboardCommandTypes.Node.Copy, @@ -96,19 +95,28 @@ const KeyboardNodeEditingShortcuts = { 'Mac.Meta.x': KeyboardCommandTypes.Node.Cut, 'Mac.Meta.v': KeyboardCommandTypes.Node.Paste, 'Mac.Meta.V': KeyboardCommandTypes.Node.Paste, - 'Mac.Meta.Z': KeyboardCommandTypes.Node.Undo, - 'Mac.Meta.z': KeyboardCommandTypes.Node.Undo, - 'Mac.Meta.Shift.Z': KeyboardCommandTypes.Node.Redo, - 'Mac.Meta.Shift.z': KeyboardCommandTypes.Node.Redo, }; -const { arrowNavigation, tabNavigation, keyboardNodeEditing } = EditorConfig.features; +const KeyboardOperationEditingShortcuts = { + 'Windows.Control.Z': KeyboardCommandTypes.Operation.Undo, + 'Windows.Control.z': KeyboardCommandTypes.Operation.Undo, + 'Windows.Control.Shift.Z': KeyboardCommandTypes.Operation.Redo, + 'Windows.Control.Shift.z': KeyboardCommandTypes.Operation.Redo, + + 'Mac.Meta.Z': KeyboardCommandTypes.Operation.Undo, + 'Mac.Meta.z': KeyboardCommandTypes.Operation.Undo, + 'Mac.Meta.Shift.Z': KeyboardCommandTypes.Operation.Redo, + 'Mac.Meta.Shift.z': KeyboardCommandTypes.Operation.Redo, +}; + +const { arrowNavigation, tabNavigation, keyboardNodeEditing, keyboardOperationEditing } = EditorConfig.features; const SupportedShortcuts = { ...BasicShortcuts, ...(arrowNavigation ? ArrowMoveShortcuts : null), ...(tabNavigation ? TabNavShortcuts : null), ...(keyboardNodeEditing ? KeyboardNodeEditingShortcuts : null), + ...(keyboardOperationEditing ? KeyboardOperationEditingShortcuts : null), }; export function mapShortcutToKeyboardCommand(keyCode) { diff --git a/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx b/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx index d153136869..b003049f2a 100644 --- a/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx +++ b/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx @@ -231,39 +231,48 @@ export const ObiEditor: FC = ({ const handleKeyboardCommand = ({ area, command }) => { switch (area) { case KeyboardPrimaryTypes.Node: + if (keyboardStatus !== 'normal') { + switch (command) { + case KeyboardCommandTypes.Node.Delete: + dispatchEvent(NodeEventTypes.DeleteSelection, { actionIds: getClipboardTargetsFromContext() }); + break; + case KeyboardCommandTypes.Node.Copy: + dispatchEvent(NodeEventTypes.CopySelection, { actionIds: getClipboardTargetsFromContext() }); + break; + case KeyboardCommandTypes.Node.Cut: + dispatchEvent(NodeEventTypes.CutSelection, { actionIds: getClipboardTargetsFromContext() }); + break; + case KeyboardCommandTypes.Node.Paste: + dispatchEvent(NodeEventTypes.AppendSelection, { + target: focusedId, + actions: clipboardContext.clipboardActions, + }); + break; + } + } + break; + case KeyboardPrimaryTypes.Cursor: { + if (keyboardStatus !== 'normal') { + const currentSelectedId = selectionContext.selectedIds[0] || focusedId; + const { selected, focused } = moveCursor(selectedElements, currentSelectedId, command); + setSelectionContext({ + getNodeIndex: selectionContext.getNodeIndex, + selectedIds: [selected as string], + }); + focused && onFocusSteps([focused]); + } + break; + } + case KeyboardPrimaryTypes.Operation: { switch (command) { - case KeyboardCommandTypes.Node.Delete: - dispatchEvent(NodeEventTypes.DeleteSelection, { actionIds: getClipboardTargetsFromContext() }); - break; - case KeyboardCommandTypes.Node.Copy: - dispatchEvent(NodeEventTypes.CopySelection, { actionIds: getClipboardTargetsFromContext() }); - break; - case KeyboardCommandTypes.Node.Cut: - dispatchEvent(NodeEventTypes.CutSelection, { actionIds: getClipboardTargetsFromContext() }); - break; - case KeyboardCommandTypes.Node.Paste: - dispatchEvent(NodeEventTypes.AppendSelection, { - target: focusedId, - actions: clipboardContext.clipboardActions, - }); - break; - case KeyboardCommandTypes.Node.Undo: + case KeyboardCommandTypes.Operation.Undo: dispatchEvent(NodeEventTypes.Undo, {}); break; - case KeyboardCommandTypes.Node.Redo: + case KeyboardCommandTypes.Operation.Redo: dispatchEvent(NodeEventTypes.Redo, {}); break; } break; - case KeyboardPrimaryTypes.Cursor: { - const currentSelectedId = selectionContext.selectedIds[0] || focusedId; - const { selected, focused } = moveCursor(selectedElements, currentSelectedId, command); - setSelectionContext({ - getNodeIndex: selectionContext.getNodeIndex, - selectedIds: [selected as string], - }); - focused && onFocusSteps([focused]); - break; } default: break; @@ -273,7 +282,7 @@ export const ObiEditor: FC = ({ return ( - +
Date: Fri, 11 Oct 2019 10:41:50 -0700 Subject: [PATCH 3/5] revert changes in 'KeyboardZone' --- .../src/components/lib/KeyboardZone.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx b/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx index 65d0e8cde0..219e1b3ef6 100644 --- a/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx +++ b/Composer/packages/extensions/visual-designer/src/components/lib/KeyboardZone.tsx @@ -5,13 +5,14 @@ import { FC, useRef } from 'react'; import { mapShortcutToKeyboardCommand } from '../../constants/KeyboardCommandTypes'; interface NodeProps { + when: string; onCommand: (action) => object | void; } const isMac = () => { return /macintosh|mac os x/i.test(navigator.userAgent); }; -export const KeyboardZone: FC = ({ onCommand, children }): JSX.Element => { +export const KeyboardZone: FC = ({ when, onCommand, children }): JSX.Element => { const keyPressed = useRef({}); const handleKeyDown = e => { if (e.key === 'Tab') { @@ -22,13 +23,15 @@ export const KeyboardZone: FC = ({ onCommand, children }): JSX.Elemen }; const handleKeyUp = e => { - let keyCode = isMac() ? 'Mac' : 'Windows'; - for (const key in keyPressed.current) { - if (keyPressed.current[key]) { - keyCode += `.${key}`; + if (when !== 'normal') { + let keyCode = isMac() ? 'Mac' : 'Windows'; + for (const key in keyPressed.current) { + if (keyPressed.current[key]) { + keyCode += `.${key}`; + } } + onCommand(mapShortcutToKeyboardCommand(keyCode)); } - onCommand(mapShortcutToKeyboardCommand(keyCode)); delete keyPressed.current[e.key]; }; return ( From 8181a99408aa5cd2bab3a09fad242a55a346021a Mon Sep 17 00:00:00 2001 From: zeye Date: Fri, 11 Oct 2019 10:48:30 -0700 Subject: [PATCH 4/5] revert some unnecessary changes --- .../src/constants/KeyboardCommandTypes.ts | 4 -- .../visual-designer/src/editors/ObiEditor.tsx | 52 +++++++++---------- 2 files changed, 24 insertions(+), 32 deletions(-) diff --git a/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts b/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts index 3d33dce9ef..c6b1fbdabb 100644 --- a/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts +++ b/Composer/packages/extensions/visual-designer/src/constants/KeyboardCommandTypes.ts @@ -86,15 +86,11 @@ const KeyboardNodeEditingShortcuts = { 'Windows.Control.c': KeyboardCommandTypes.Node.Copy, 'Windows.Control.X': KeyboardCommandTypes.Node.Cut, 'Windows.Control.x': KeyboardCommandTypes.Node.Cut, - 'Windows.Control.v': KeyboardCommandTypes.Node.Paste, - 'Windows.Control.V': KeyboardCommandTypes.Node.Paste, 'Mac.Meta.C': KeyboardCommandTypes.Node.Copy, 'Mac.Meta.c': KeyboardCommandTypes.Node.Copy, 'Mac.Meta.X': KeyboardCommandTypes.Node.Cut, 'Mac.Meta.x': KeyboardCommandTypes.Node.Cut, - 'Mac.Meta.v': KeyboardCommandTypes.Node.Paste, - 'Mac.Meta.V': KeyboardCommandTypes.Node.Paste, }; const KeyboardOperationEditingShortcuts = { diff --git a/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx b/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx index b003049f2a..46284724f4 100644 --- a/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx +++ b/Composer/packages/extensions/visual-designer/src/editors/ObiEditor.tsx @@ -231,36 +231,32 @@ export const ObiEditor: FC = ({ const handleKeyboardCommand = ({ area, command }) => { switch (area) { case KeyboardPrimaryTypes.Node: - if (keyboardStatus !== 'normal') { - switch (command) { - case KeyboardCommandTypes.Node.Delete: - dispatchEvent(NodeEventTypes.DeleteSelection, { actionIds: getClipboardTargetsFromContext() }); - break; - case KeyboardCommandTypes.Node.Copy: - dispatchEvent(NodeEventTypes.CopySelection, { actionIds: getClipboardTargetsFromContext() }); - break; - case KeyboardCommandTypes.Node.Cut: - dispatchEvent(NodeEventTypes.CutSelection, { actionIds: getClipboardTargetsFromContext() }); - break; - case KeyboardCommandTypes.Node.Paste: - dispatchEvent(NodeEventTypes.AppendSelection, { - target: focusedId, - actions: clipboardContext.clipboardActions, - }); - break; - } + switch (command) { + case KeyboardCommandTypes.Node.Delete: + dispatchEvent(NodeEventTypes.DeleteSelection, { actionIds: getClipboardTargetsFromContext() }); + break; + case KeyboardCommandTypes.Node.Copy: + dispatchEvent(NodeEventTypes.CopySelection, { actionIds: getClipboardTargetsFromContext() }); + break; + case KeyboardCommandTypes.Node.Cut: + dispatchEvent(NodeEventTypes.CutSelection, { actionIds: getClipboardTargetsFromContext() }); + break; + case KeyboardCommandTypes.Node.Paste: + dispatchEvent(NodeEventTypes.AppendSelection, { + target: focusedId, + actions: clipboardContext.clipboardActions, + }); + break; } break; case KeyboardPrimaryTypes.Cursor: { - if (keyboardStatus !== 'normal') { - const currentSelectedId = selectionContext.selectedIds[0] || focusedId; - const { selected, focused } = moveCursor(selectedElements, currentSelectedId, command); - setSelectionContext({ - getNodeIndex: selectionContext.getNodeIndex, - selectedIds: [selected as string], - }); - focused && onFocusSteps([focused]); - } + const currentSelectedId = selectionContext.selectedIds[0] || focusedId; + const { selected, focused } = moveCursor(selectedElements, currentSelectedId, command); + setSelectionContext({ + getNodeIndex: selectionContext.getNodeIndex, + selectedIds: [selected as string], + }); + focused && onFocusSteps([focused]); break; } case KeyboardPrimaryTypes.Operation: { @@ -282,7 +278,7 @@ export const ObiEditor: FC = ({ return ( - +
Date: Fri, 11 Oct 2019 11:07:34 -0700 Subject: [PATCH 5/5] rename undo/remo event type --- .../visual-designer/src/constants/NodeEventTypes.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Composer/packages/extensions/visual-designer/src/constants/NodeEventTypes.ts b/Composer/packages/extensions/visual-designer/src/constants/NodeEventTypes.ts index f659794f82..05e585d1d6 100644 --- a/Composer/packages/extensions/visual-designer/src/constants/NodeEventTypes.ts +++ b/Composer/packages/extensions/visual-designer/src/constants/NodeEventTypes.ts @@ -13,6 +13,6 @@ export enum NodeEventTypes { DeleteSelection = 'event.data.delete-selection', AppendSelection = 'event.data.paste-selection--keyboard', InsertSelection = 'event.data.paste-selection--menu', - Undo = 'event.data.undo', - Redo = 'event.data.redo', + Undo = 'event.operation.undo', + Redo = 'event.operation.redo', }