actionMenu.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { menu, palette } from "../components/icons";
  2. import { ToolButton } from "../components/ToolButton";
  3. import { t } from "../i18n";
  4. import { showSelectedShapeActions, getNonDeletedElements } from "../element";
  5. import { register } from "./register";
  6. import { allowFullScreen, exitFullScreen, isFullScreen } from "../utils";
  7. import { CODES, KEYS } from "../keys";
  8. import { HelpIcon } from "../components/HelpIcon";
  9. export const actionToggleCanvasMenu = register({
  10. name: "toggleCanvasMenu",
  11. trackEvent: { category: "menu" },
  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. trackEvent: { category: "menu" },
  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. trackEvent: { category: "canvas", predicate: (appState) => !isFullScreen() },
  56. perform: () => {
  57. if (!isFullScreen()) {
  58. allowFullScreen();
  59. }
  60. if (isFullScreen()) {
  61. exitFullScreen();
  62. }
  63. return {
  64. commitToHistory: false,
  65. };
  66. },
  67. keyTest: (event) => event.code === CODES.F && !event[KEYS.CTRL_OR_CMD],
  68. });
  69. export const actionShortcuts = register({
  70. name: "toggleShortcuts",
  71. trackEvent: { category: "menu", action: "toggleHelpDialog" },
  72. perform: (_elements, appState, _, { focusContainer }) => {
  73. if (appState.showHelpDialog) {
  74. focusContainer();
  75. }
  76. return {
  77. appState: {
  78. ...appState,
  79. showHelpDialog: !appState.showHelpDialog,
  80. },
  81. commitToHistory: false,
  82. };
  83. },
  84. PanelComponent: ({ updateData }) => (
  85. <HelpIcon title={t("helpDialog.title")} onClick={updateData} />
  86. ),
  87. keyTest: (event) => event.key === KEYS.QUESTION_MARK,
  88. });