onFiltersChange: (filters: DataTableFilterItem[], column: DataColumn<T>) => void;
onChangePage: (page: number) => void;
onChangeRowsPerPage: (rowsPerPage: number) => void;
+ openContextMenu: (event: React.MouseEvent<HTMLElement>, item: T) => void;
+ closeContextMenu: () => void;
}
interface DataExplorerState<T> {
import { ContainerRequestState } from '../../models/container-request';
import { SortDirection } from '../../components/data-table/data-column';
import DialogProjectCreate from '../../components/dialog-create/dialog-project-create';
+import { mockAnchorFromMouseEvent } from "../../components/popover/helpers";
export const PROJECT_PANEL_ID = "projectPanel";
type: ResourceKind | ContainerRequestState;
}
+interface DataExplorerState<T> {
+ contextMenu: {
+ anchorEl?: HTMLElement;
+ item?: T;
+ };
+ open?: boolean;
+}
+
type ProjectPanelProps = {
currentItemId: string,
onItemClick: (item: ProjectPanelItem) => void,
& DispatchProp
& WithStyles<CssRules>
& RouteComponentProps<{ id: string }>;
-class ProjectPanel extends React.Component<ProjectPanelProps> {
- state = {
+
+class ProjectPanel extends React.Component<ProjectPanelProps, DataExplorerState<any>> {
+ state: DataExplorerState<any> = {
+ contextMenu: {},
open: false,
};
-
+
render() {
return <div>
<div className={this.props.classes.toolbar}>
id={PROJECT_PANEL_ID}
contextActions={contextMenuActions}
onRowClick={this.props.onItemClick}
- onContextAction={this.executeAction} />;
+ onContextAction={this.executeAction}
+ openContextMenu={this.openContextMenu}
+ closeContextMenu={this.closeContextMenu} />;
</div>;
}
alert(`Executing ${action.name} on ${item.name}`);
}
+ openContextMenu = (event: React.MouseEvent<HTMLElement>, item: any) => {
+ event.preventDefault();
+ event.stopPropagation();
+ this.setState({
+ contextMenu: {
+ anchorEl: mockAnchorFromMouseEvent(event),
+ item
+ }
+ });
+ }
+
+ closeContextMenu = () => {
+ this.setState({ contextMenu: {} });
+ }
+
}
type CssRules = "toolbar" | "button";
}];
const contextMenuActions = [[{
+ icon: "fas fa-plus fa-fw",
+ name: "New project"
+}, {
icon: "fas fa-users fa-fw",
name: "Share"
}, {