diff --git a/src/components/IconButton/IconButton.tsx b/src/components/IconButton/IconButton.tsx index 9e99ce4..53a13fd 100644 --- a/src/components/IconButton/IconButton.tsx +++ b/src/components/IconButton/IconButton.tsx @@ -6,7 +6,7 @@ interface Props { name: string; Icon: React.ReactNode; isActive?: boolean; - onClick: () => void; + onClick: (e: React.MouseEvent) => void; tooltipPosition?: TooltipProps['placement']; disabled?: boolean; } diff --git a/src/components/MainMenu/MainMenu.tsx b/src/components/MainMenu/MainMenu.tsx index df51348..5b3dfcb 100644 --- a/src/components/MainMenu/MainMenu.tsx +++ b/src/components/MainMenu/MainMenu.tsx @@ -1,12 +1,49 @@ -import React from 'react'; +import React, { useState, useCallback } from 'react'; +import { Menu, MenuItem } from '@mui/material'; +import { Menu as MenuIcon } from '@mui/icons-material'; import { UiElement } from 'src/components/UiElement/UiElement'; import { IconButton } from 'src/components/IconButton/IconButton'; -import { Menu as MenuIcon } from '@mui/icons-material'; +import { useUiStateStore } from 'src/stores/uiStateStore'; export const MainMenu = () => { + const [anchorEl, setAnchorEl] = useState(null); + const isMainMenuOpen = useUiStateStore((state) => { + return state.isMainMenuOpen; + }); + const setIsMainMenuOpen = useUiStateStore((state) => { + return state.actions.setIsMainMenuOpen; + }); + + const onClick = useCallback( + (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + setIsMainMenuOpen(true); + }, + [setIsMainMenuOpen] + ); + return ( - } name="Main menu" onClick={() => {}} /> + } name="Main menu" onClick={onClick} /> + + { + return setIsMainMenuOpen(false); + }} + elevation={0} + sx={{ + mt: 1 + }} + MenuListProps={{ + sx: { + minWidth: '250px' + } + }} + > + Export + ); }; diff --git a/src/stores/uiStateStore.tsx b/src/stores/uiStateStore.tsx index 9d9649f..901f8ce 100644 --- a/src/stores/uiStateStore.tsx +++ b/src/stores/uiStateStore.tsx @@ -12,6 +12,7 @@ const initialState = () => { showCursor: true, mousedownItem: null }, + isMainMenuOpen: false, mouse: { position: { screen: CoordsUtils.zero(), tile: CoordsUtils.zero() }, mousedown: null, @@ -31,6 +32,9 @@ const initialState = () => { setMode: (mode) => { set({ mode }); }, + setIsMainMenuOpen: (isMainMenuOpen) => { + set({ isMainMenuOpen, itemControls: null }); + }, incrementZoom: () => { const { zoom } = get(); set({ zoom: incrementZoom(zoom) }); diff --git a/src/types/ui.ts b/src/types/ui.ts index 5304e27..bbd5002 100644 --- a/src/types/ui.ts +++ b/src/types/ui.ts @@ -121,6 +121,7 @@ export interface Scroll { export interface UiState { disableInteractions: boolean; mode: Mode; + isMainMenuOpen: boolean; itemControls: ItemControls; contextMenu: ContextMenu; zoom: number; @@ -134,6 +135,7 @@ export interface UiStateActions { setMode: (mode: Mode) => void; incrementZoom: () => void; decrementZoom: () => void; + setIsMainMenuOpen: (isOpen: boolean) => void; setZoom: (zoom: number) => void; setScroll: (scroll: Scroll) => void; setItemControls: (itemControls: ItemControls) => void;