enable hotkeys only when a widget is selected (#2262)

This commit is contained in:
Rishabh Saxena 2020-12-23 16:58:29 +05:30 committed by GitHub
parent 77801b10ff
commit 778b82f9ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 29 deletions

View File

@ -94,8 +94,9 @@ Cypress.Commands.add("CheckShareIcon", (orgName, count) => {
cy.get(homePage.orgList.concat(orgName).concat(")")) cy.get(homePage.orgList.concat(orgName).concat(")"))
.scrollIntoView() .scrollIntoView()
.should("be.visible"); .should("be.visible");
cy.get(homePage.orgList.concat(orgName).concat(") .org-share-user-icons")) cy.get(
.should('have.length', count) homePage.orgList.concat(orgName).concat(") .org-share-user-icons"),
).should("have.length", count);
}); });
Cypress.Commands.add("shareApp", (email, role) => { Cypress.Commands.add("shareApp", (email, role) => {
@ -1144,8 +1145,8 @@ Cypress.Commands.add("Deletepage", Pagename => {
cy.get(".t--page-sidebar-" + Pagename + ""); cy.get(".t--page-sidebar-" + Pagename + "");
cy.get( cy.get(
".t--page-sidebar-" + ".t--page-sidebar-" +
Pagename + Pagename +
">.t--page-sidebar-menu-actions>.bp3-popover-target", ">.t--page-sidebar-menu-actions>.bp3-popover-target",
).click({ force: true }); ).click({ force: true });
cy.get(pages.Menuaction).click({ force: true }); cy.get(pages.Menuaction).click({ force: true });
cy.get(pages.Delete).click({ force: true }); cy.get(pages.Delete).click({ force: true });

View File

@ -45,6 +45,8 @@ import {
pasteWidget, pasteWidget,
} from "actions/widgetActions"; } from "actions/widgetActions";
import { isMac } from "utils/helpers"; import { isMac } from "utils/helpers";
import { getSelectedWidget } from "selectors/ui";
import { MAIN_CONTAINER_WIDGET_ID } from "constants/WidgetConstants";
type EditorProps = { type EditorProps = {
currentApplicationId?: string; currentApplicationId?: string;
@ -60,11 +62,33 @@ type EditorProps = {
deleteSelectedWidget: () => void; deleteSelectedWidget: () => void;
cutSelectedWidget: () => void; cutSelectedWidget: () => void;
user?: User; user?: User;
selectedWidget?: string;
}; };
type Props = EditorProps & RouteComponentProps<BuilderRouteParams>; type Props = EditorProps & RouteComponentProps<BuilderRouteParams>;
const getSelectedText = () => {
if (typeof window.getSelection === "function") {
const selectionObj = window.getSelection();
return selectionObj && selectionObj.toString();
}
};
@HotkeysTarget @HotkeysTarget
class Editor extends Component<Props> { class Editor extends Component<Props> {
public stopPropagationIfWidgetSelected(e: KeyboardEvent): boolean {
if (
this.props.selectedWidget &&
this.props.selectedWidget != MAIN_CONTAINER_WIDGET_ID &&
!getSelectedText()
) {
e.preventDefault();
e.stopPropagation();
return true;
}
return false;
}
public renderHotkeys() { public renderHotkeys() {
return ( return (
<Hotkeys> <Hotkeys>
@ -91,10 +115,10 @@ class Editor extends Component<Props> {
label="Copy Widget" label="Copy Widget"
group="Canvas" group="Canvas"
onKeyDown={(e: any) => { onKeyDown={(e: any) => {
this.props.copySelectedWidget(); if (this.stopPropagationIfWidgetSelected(e)) {
this.props.copySelectedWidget();
}
}} }}
preventDefault
stopPropagation
/> />
<Hotkey <Hotkey
global={true} global={true}
@ -104,19 +128,6 @@ class Editor extends Component<Props> {
onKeyDown={(e: any) => { onKeyDown={(e: any) => {
this.props.pasteCopiedWidget(); this.props.pasteCopiedWidget();
}} }}
preventDefault
stopPropagation
/>
<Hotkey
global={true}
combo="del"
label="Delete Widget"
group="Canvas"
onKeyDown={(e: any) => {
if (!isMac()) this.props.deleteSelectedWidget();
}}
preventDefault
stopPropagation
/> />
<Hotkey <Hotkey
global={true} global={true}
@ -124,10 +135,10 @@ class Editor extends Component<Props> {
label="Delete Widget" label="Delete Widget"
group="Canvas" group="Canvas"
onKeyDown={(e: any) => { onKeyDown={(e: any) => {
if (isMac()) this.props.deleteSelectedWidget(); if (this.stopPropagationIfWidgetSelected(e) && isMac()) {
this.props.pasteCopiedWidget();
}
}} }}
preventDefault
stopPropagation
/> />
<Hotkey <Hotkey
global={true} global={true}
@ -135,10 +146,10 @@ class Editor extends Component<Props> {
label="Delete Widget" label="Delete Widget"
group="Canvas" group="Canvas"
onKeyDown={(e: any) => { onKeyDown={(e: any) => {
this.props.deleteSelectedWidget(); if (this.stopPropagationIfWidgetSelected(e)) {
this.props.deleteSelectedWidget();
}
}} }}
preventDefault
stopPropagation
/> />
<Hotkey <Hotkey
global={true} global={true}
@ -146,10 +157,10 @@ class Editor extends Component<Props> {
label="Cut Widget" label="Cut Widget"
group="Canvas" group="Canvas"
onKeyDown={(e: any) => { onKeyDown={(e: any) => {
this.props.cutSelectedWidget(); if (this.stopPropagationIfWidgetSelected(e)) {
this.props.cutSelectedWidget();
}
}} }}
preventDefault
stopPropagation
/> />
</Hotkeys> </Hotkeys>
); );
@ -264,6 +275,7 @@ const mapStateToProps = (state: AppState) => ({
isEditorLoading: getIsEditorLoading(state), isEditorLoading: getIsEditorLoading(state),
isEditorInitialized: getIsEditorInitialized(state), isEditorInitialized: getIsEditorInitialized(state),
user: getCurrentUser(state), user: getCurrentUser(state),
selectedWidget: getSelectedWidget(state),
}); });
const mapDispatchToProps = (dispatch: any) => { const mapDispatchToProps = (dispatch: any) => {

View File

@ -0,0 +1,4 @@
import { AppState } from "reducers";
export const getSelectedWidget = (state: AppState) =>
state.ui.widgetDragResize.selectedWidget;