X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/2d37867eccb0a76df1a285e7b7e32bbb13db99a1..137f7f8bbfb118af318cea460df8bd6e717fcf82:/src/views/project-panel/project-panel.tsx diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx index 0cd74ff9..ff3dd9c8 100644 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@ -7,19 +7,21 @@ import { ProjectPanelItem } from './project-panel-item'; import { Grid, Typography, Button, Toolbar, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; import { formatDate, formatFileSize } from '../../common/formatters'; import DataExplorer from "../../views-components/data-explorer/data-explorer"; -import { DataColumn, toggleSortDirection } from '../../components/data-table/data-column'; -import { DataTableFilterItem } from '../../components/data-table-filters/data-table-filters'; import { ContextMenuAction } from '../../components/context-menu/context-menu'; import { DispatchProp, connect } from 'react-redux'; import actions from "../../store/data-explorer/data-explorer-action"; -import { setProjectItem, ItemMode } from "../../store/navigation/navigation-action"; import { DataColumns } from '../../components/data-table/data-table'; import { ResourceKind } from "../../models/resource"; import { RouteComponentProps } from 'react-router'; +import { RootState } from '../../store/store'; export const PROJECT_PANEL_ID = "projectPanel"; -type ProjectPanelProps = { onItemOpen: (itemId: string) => void } +type ProjectPanelProps = { + currentItemId: string, + onItemClick: (item: ProjectPanelItem) => void, + onItemRouteChange: (itemId: string) => void +} & DispatchProp & WithStyles & RouteComponentProps<{ id: string }>; @@ -40,58 +42,21 @@ class ProjectPanel extends React.Component { ; + onRowClick={this.props.onItemClick} + onContextAction={this.executeAction} />; ; } - componentDidMount() { - this.props.dispatch(actions.SET_COLUMNS({ id: PROJECT_PANEL_ID, columns })); - } - - componentWillReceiveProps(nextProps: ProjectPanelProps) { - if (this.props.match.params.id !== nextProps.match.params.id) { - this.props.onItemOpen(nextProps.match.params.id); + componentWillReceiveProps({ match, currentItemId }: ProjectPanelProps) { + if (match.params.id !== currentItemId) { + this.props.onItemRouteChange(match.params.id); } } - toggleColumn = (toggledColumn: DataColumn) => { - this.props.dispatch(actions.TOGGLE_COLUMN({ id: PROJECT_PANEL_ID, columnName: toggledColumn.name })); - } - - toggleSort = (column: DataColumn) => { - this.props.dispatch(actions.TOGGLE_SORT({ id: PROJECT_PANEL_ID, columnName: column.name })); - } - - changeFilters = (filters: DataTableFilterItem[], column: DataColumn) => { - this.props.dispatch(actions.SET_FILTERS({ id: PROJECT_PANEL_ID, columnName: column.name, filters })); - } - executeAction = (action: ContextMenuAction, item: ProjectPanelItem) => { alert(`Executing ${action.name} on ${item.name}`); } - search = (searchValue: string) => { - this.props.dispatch(actions.SET_SEARCH_VALUE({ id: PROJECT_PANEL_ID, searchValue })); - } - - changePage = (page: number) => { - this.props.dispatch(actions.SET_PAGE({ id: PROJECT_PANEL_ID, page })); - } - - changeRowsPerPage = (rowsPerPage: number) => { - this.props.dispatch(actions.SET_ROWS_PER_PAGE({ id: PROJECT_PANEL_ID, rowsPerPage })); - } - - openProject = (item: ProjectPanelItem) => { - this.props.onItemOpen(item.uuid); - } } type CssRules = "toolbar" | "button"; @@ -159,7 +124,7 @@ const renderStatus = (item: ProjectPanelItem) => {item.status || "-"} ; -const columns: DataColumns = [{ +export const columns: DataColumns = [{ name: "Name", selected: true, sortDirection: "desc", @@ -224,4 +189,6 @@ const contextMenuActions = [[{ } ]]; -export default withStyles(styles)(connect()(ProjectPanel)); +export default withStyles(styles)( + connect((state: RootState) => ({ currentItemId: state.projects.currentItemId }))( + ProjectPanel));