actionMenu.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import React from "react";
  2. import { menu, palette } from "../components/icons";
  3. import { ToolButton } from "../components/ToolButton";
  4. import { t } from "../i18n";
  5. import { showSelectedShapeActions, getNonDeletedElements } from "../element";
  6. import { register } from "./register";
  7. import { allowFullScreen, exitFullScreen, isFullScreen } from "../utils";
  8. import { CODES, KEYS } from "../keys";
  9. import { HelpIcon } from "../components/HelpIcon";
  10. import { EVENT_DIALOG, trackEvent } from "../analytics";
  11. export const actionToggleCanvasMenu = register({
  12. name: "toggleCanvasMenu",
  13. perform: (_, appState) => ({
  14. appState: {
  15. ...appState,
  16. openMenu: appState.openMenu === "canvas" ? null : "canvas",
  17. },
  18. commitToHistory: false,
  19. }),
  20. PanelComponent: ({ appState, updateData }) => (
  21. <ToolButton
  22. type="button"
  23. icon={menu}
  24. aria-label={t("buttons.menu")}
  25. onClick={updateData}
  26. selected={appState.openMenu === "canvas"}
  27. />
  28. ),
  29. });
  30. export const actionToggleEditMenu = register({
  31. name: "toggleEditMenu",
  32. perform: (_elements, appState) => ({
  33. appState: {
  34. ...appState,
  35. openMenu: appState.openMenu === "shape" ? null : "shape",
  36. },
  37. commitToHistory: false,
  38. }),
  39. PanelComponent: ({ elements, appState, updateData }) => (
  40. <ToolButton
  41. visible={showSelectedShapeActions(
  42. appState,
  43. getNonDeletedElements(elements),
  44. )}
  45. type="button"
  46. icon={palette}
  47. aria-label={t("buttons.edit")}
  48. onClick={updateData}
  49. selected={appState.openMenu === "shape"}
  50. />
  51. ),
  52. });
  53. export const actionFullScreen = register({
  54. name: "toggleFullScreen",
  55. perform: () => {
  56. if (!isFullScreen()) {
  57. allowFullScreen();
  58. }
  59. if (isFullScreen()) {
  60. exitFullScreen();
  61. }
  62. return {
  63. commitToHistory: false,
  64. };
  65. },
  66. keyTest: (event) => event.code === CODES.F && !event[KEYS.CTRL_OR_CMD],
  67. });
  68. export const actionShortcuts = register({
  69. name: "toggleShortcuts",
  70. perform: (_elements, appState) => {
  71. trackEvent(EVENT_DIALOG, "shortcuts");
  72. return {
  73. appState: {
  74. ...appState,
  75. showShortcutsDialog: true,
  76. },
  77. commitToHistory: false,
  78. };
  79. },
  80. PanelComponent: ({ updateData }) => (
  81. <HelpIcon title={t("shortcutsDialog.title")} onClick={updateData} />
  82. ),
  83. keyTest: (event) => event.key === KEYS.QUESTION_MARK,
  84. });