import { Table, TableBody, TableRow, TableCell, TableHead, StyleRulesCallback, Theme, WithStyles, withStyles, Typography } from '@material-ui/core';
import { DataColumn } from './data-column';
+ export type DataColumns<T> = Array<DataColumn<T>>;
+
export interface DataTableProps<T> {
items: T[];
- columns: Array<DataColumn<T>>;
+ columns: DataColumns<T>;
- onItemClick?: (item: T) => void;
+ onRowClick?: (event: React.MouseEvent<HTMLTableRowElement>, item: T) => void;
+ onRowContextMenu?: (event: React.MouseEvent<HTMLTableRowElement>, item: T) => void;
}
class DataTable<T> extends React.Component<DataTableProps<T> & WithStyles<CssRules>> {
// SPDX-License-Identifier: AGPL-3.0
import * as React from 'react';
- import { DataTable, DataColumn, ColumnSelector } from "../../components/data-table";
-import { Typography, Grid, ListItem, Divider, List, ListItemIcon, ListItemText, Paper, Toolbar } from '@material-ui/core';
-import IconButton, { IconButtonProps } from '@material-ui/core/IconButton';
+import { Typography, Grid, Paper, Toolbar } from '@material-ui/core';
+import IconButton from '@material-ui/core/IconButton';
import MoreVertIcon from "@material-ui/icons/MoreVert";
-import Popover from '../../components/popover/popover';
import { formatFileSize, formatDate } from '../../common/formatters';
import { DataItem } from './data-item';
- import { mockAnchorFromMouseEvent } from '../popover/helpers';
- import ContextMenu from '../context-menu/context-menu';
-import { DataColumns, DataTableProps } from "../../components/data-table/data-table";
-import { DataColumn } from "../../components/data-table/data-column";
++import { DataColumns } from "../../components/data-table/data-table";
++import ContextMenu from "../../components/context-menu/context-menu";
+ import ColumnSelector from "../../components/column-selector/column-selector";
+ import DataTable from "../../components/data-table/data-table";
++import { mockAnchorFromMouseEvent } from "../../components/popover/helpers";
++import { DataColumn } from "../../components/data-table/data-column";
+export interface DataExplorerContextActions {
+ onAddToFavourite: (dataIitem: DataItem) => void;
+ onCopy: (dataIitem: DataItem) => void;
+ onDownload: (dataIitem: DataItem) => void;
+ onMoveTo: (dataIitem: DataItem) => void;
+ onRemove: (dataIitem: DataItem) => void;
+ onRename: (dataIitem: DataItem) => void;
+ onShare: (dataIitem: DataItem) => void;
+}
interface DataExplorerProps {
items: DataItem[];
onItemClick: (item: DataItem) => void;
}
interface DataExplorerState {
- columns: Array<DataColumn<DataItem>>;
+ columns: DataColumns<DataItem>;
+ contextMenu: {
+ anchorEl?: HTMLElement;
+ item?: DataItem;
+ };
}
class DataExplorer extends React.Component<DataExplorerProps, DataExplorerState> {
import { connect, DispatchProp } from 'react-redux';
import { push } from 'react-router-redux';
import projectActions from "../../store/project/project-action";
- import { DataExplorer, DataItem } from '../../components/data-explorer';
- import { TreeItem } from '../../components/tree/tree';
- import { DataExplorerContextActions } from '../../components/data-explorer/data-explorer';
+ import { DataColumns } from "../../components/data-table/data-table";
-import { DataItem } from "../../views-components/data-explorer/data-item";
-import DataExplorer from "../../views-components/data-explorer/data-explorer";
++import DataExplorer, { DataExplorerContextActions } from "../../views-components/data-explorer/data-explorer";
+ import { mapProjectTreeItem } from "./data-explorer-selectors";
++import { DataItem } from "../../views-components/data-explorer/data-item";
interface DataExplorerViewDataProps {
projects: ProjectState;
const projectItems = project && project.items || [];
return (
<DataExplorer
- items={projectItems.map(mapTreeItem)}
+ items={projectItems.map(mapProjectTreeItem)}
onItemClick={this.goToProject}
+ contextActions={this.contextActions}
/>
);
}
- goToProject = (project: MappedProjectItem) => {
- this.props.dispatch(push(`/project/${project.uuid}`));
- this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(project.uuid));
+ contextActions: DataExplorerContextActions = {
+ onAddToFavourite: console.log,
+ onCopy: console.log,
+ onDownload: console.log,
+ onMoveTo: console.log,
+ onRemove: console.log,
+ onRename: console.log,
+ onShare: console.log
+ };
+
- this.props.dispatch(push(`/project/${item.uuid}`));
+ goToProject = (item: DataItem) => {
++ this.props.dispatch(push(`/project/${item}`));
+ this.props.dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM(item.uuid));
}
-
}
- const mapTreeItem = (item: TreeItem<Project>): MappedProjectItem => ({
- name: item.data.name,
- type: item.data.kind,
- owner: item.data.ownerUuid,
- lastModified: item.data.modifiedAt,
- uuid: item.data.uuid
- });
-
-
export default connect(
(state: RootState) => ({
projects: state.projects