actionMenu.tsx 2.2 KB

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