export interface ContextMenuProps {
anchorEl?: HTMLElement;
items: ContextMenuItemGroup[];
+ open: boolean;
onItemClick: (action: ContextMenuItem) => void;
onClose: () => void;
}
export class ContextMenu extends React.PureComponent<ContextMenuProps> {
render() {
- const { anchorEl, items, onClose, onItemClick } = this.props;
+ const { anchorEl, items, open, onClose, onItemClick } = this.props;
return <Popover
anchorEl={anchorEl}
- open={!!anchorEl}
+ open={open}
onClose={onClose}
transformOrigin={DefaultTransformOrigin}
anchorOrigin={DefaultTransformOrigin}
import { contextMenuActions, ContextMenuAction } from "./context-menu-actions";
export interface ContextMenuState {
+ open: boolean;
position: ContextMenuPosition;
resource?: ContextMenuResource;
}
}
const initialState = {
+ open: false,
position: { x: 0, y: 0 }
};
export const contextMenuReducer = (state: ContextMenuState = initialState, action: ContextMenuAction) =>
contextMenuActions.match(action, {
default: () => state,
- OPEN_CONTEXT_MENU: ({resource, position}) => ({ resource, position }),
- CLOSE_CONTEXT_MENU: () => ({ position: state.position })
+ OPEN_CONTEXT_MENU: ({ resource, position }) => ({ open: true, resource, position }),
+ CLOSE_CONTEXT_MENU: () => ({ ...state, open: false })
});
import { ContextMenuActionSet, ContextMenuAction } from "./context-menu-action-set";
import { Dispatch } from "redux";
-type DataProps = Pick<ContextMenuProps, "anchorEl" | "items"> & { resource?: ContextMenuResource };
+type DataProps = Pick<ContextMenuProps, "anchorEl" | "items" | "open"> & { resource?: ContextMenuResource };
const mapStateToProps = (state: RootState): DataProps => {
- const { position, resource } = state.contextMenu;
+ const { open, position, resource } = state.contextMenu;
return {
anchorEl: resource ? createAnchorAt(position) : undefined,
items: getMenuActionSet(resource),
+ open,
resource
};
};