X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/5e88476747d9fb0c77ef76d63430192fa4b77f22..2d31e440b94eca0f22b2968f30a48cfc825514f1:/src/views-components/project-explorer/project-explorer.tsx diff --git a/src/views-components/project-explorer/project-explorer.tsx b/src/views-components/project-explorer/project-explorer.tsx index 4931c09a..16f670cb 100644 --- a/src/views-components/project-explorer/project-explorer.tsx +++ b/src/views-components/project-explorer/project-explorer.tsx @@ -4,152 +4,59 @@ import * as React from 'react'; import { ProjectExplorerItem } from './project-explorer-item'; -import { Grid, Typography } from '@material-ui/core'; +import { Grid, Typography, Button, Toolbar, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; import { formatDate, formatFileSize } from '../../common/formatters'; -import DataExplorer from '../../components/data-explorer/data-explorer'; -import { DataColumn, toggleSortDirection, resetSortDirection } from '../../components/data-table/data-column'; +import DataExplorer from '../data-explorer/data-explorer'; +import { DataColumn } 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 { DataColumns } from '../../components/data-table/data-table'; -export interface ProjectExplorerContextActions { - onAddToFavourite: (item: ProjectExplorerItem) => void; - onCopy: (item: ProjectExplorerItem) => void; - onDownload: (item: ProjectExplorerItem) => void; - onMoveTo: (item: ProjectExplorerItem) => void; - onRemove: (item: ProjectExplorerItem) => void; - onRename: (item: ProjectExplorerItem) => void; - onShare: (item: ProjectExplorerItem) => void; -} - -interface ProjectExplorerProps { - items: ProjectExplorerItem[]; -} - -interface ProjectExplorerState { - columns: Array>; - searchValue: string; - page: number; - rowsPerPage: number; -} - -class ProjectExplorer extends React.Component { - state: ProjectExplorerState = { - searchValue: "", - page: 0, - rowsPerPage: 10, - columns: [{ - name: "Name", - selected: true, - sortDirection: "asc", - render: renderName - }, { - name: "Status", - selected: true, - filters: [{ - name: "In progress", - selected: true - }, { - name: "Complete", - selected: true - }], - render: renderStatus - }, { - name: "Type", - selected: true, - filters: [{ - name: "Collection", - selected: true - }, { - name: "Group", - selected: true - }], - render: item => renderType(item.type) - }, { - name: "Owner", - selected: true, - render: item => renderOwner(item.owner) - }, { - name: "File size", - selected: true, - sortDirection: "none", - render: item => renderFileSize(item.fileSize) - }, { - name: "Last modified", - selected: true, - render: item => renderDate(item.lastModified) - }] - }; - - contextMenuActions = [[{ - icon: "fas fa-users fa-fw", - name: "Share" - }, { - icon: "fas fa-sign-out-alt fa-fw", - name: "Move to" - }, { - icon: "fas fa-star fa-fw", - name: "Add to favourite" - }, { - icon: "fas fa-edit fa-fw", - name: "Rename" - }, { - icon: "fas fa-copy fa-fw", - name: "Make a copy" - }, { - icon: "fas fa-download fa-fw", - name: "Download" - }], [{ - icon: "fas fa-trash-alt fa-fw", - name: "Remove" +export const PROJECT_EXPLORER_ID = "projectExplorer"; +class ProjectExplorer extends React.Component> { + render() { + return
+
+ + + +
+ ; +
; } - ]]; - render() { - return ; + componentDidMount() { + this.props.dispatch(actions.SET_COLUMNS({ id: PROJECT_EXPLORER_ID, columns })); } toggleColumn = (toggledColumn: DataColumn) => { - this.setState({ - columns: this.state.columns.map(column => - column.name === toggledColumn.name - ? { ...column, selected: !column.selected } - : column - ) - }); + this.props.dispatch(actions.TOGGLE_COLUMN({ id: PROJECT_EXPLORER_ID, columnName: toggledColumn.name })); } toggleSort = (toggledColumn: DataColumn) => { - this.setState({ - columns: this.state.columns.map(column => - column.name === toggledColumn.name - ? toggleSortDirection(column) - : resetSortDirection(column) - ) - }); + this.props.dispatch(actions.TOGGLE_SORT({ id: PROJECT_EXPLORER_ID, columnName: toggledColumn.name })); } changeFilters = (filters: DataTableFilterItem[], updatedColumn: DataColumn) => { - this.setState({ - columns: this.state.columns.map(column => - column.name === updatedColumn.name - ? { ...column, filters } - : column - ) - }); + this.props.dispatch(actions.SET_FILTERS({ id: PROJECT_EXPLORER_ID, columnName: updatedColumn.name, filters })); } executeAction = (action: ContextMenuAction, item: ProjectExplorerItem) => { @@ -157,18 +64,30 @@ class ProjectExplorer extends React.Component { - this.setState({ searchValue }); + this.props.dispatch(actions.SET_SEARCH_VALUE({ id: PROJECT_EXPLORER_ID, searchValue })); } changePage = (page: number) => { - this.setState({ page }); + this.props.dispatch(actions.SET_PAGE({ id: PROJECT_EXPLORER_ID, page })); } changeRowsPerPage = (rowsPerPage: number) => { - this.setState({ rowsPerPage }); + this.props.dispatch(actions.SET_ROWS_PER_PAGE({ id: PROJECT_EXPLORER_ID, rowsPerPage })); } } +type CssRules = "toolbar" | "button"; + +const styles: StyleRulesCallback = theme => ({ + toolbar: { + paddingBottom: theme.spacing.unit * 3, + textAlign: "right" + }, + button: { + marginLeft: theme.spacing.unit + } +}); + const renderName = (item: ProjectExplorerItem) => {item.status || "-"} ; -export default ProjectExplorer; +const columns: DataColumns = [{ + name: "Name", + selected: true, + sortDirection: "asc", + render: renderName +}, { + name: "Status", + selected: true, + filters: [{ + name: "In progress", + selected: true + }, { + name: "Complete", + selected: true + }], + render: renderStatus +}, { + name: "Type", + selected: true, + filters: [{ + name: "Collection", + selected: true + }, { + name: "Group", + selected: true + }], + render: item => renderType(item.type) +}, { + name: "Owner", + selected: true, + render: item => renderOwner(item.owner) +}, { + name: "File size", + selected: true, + sortDirection: "none", + render: item => renderFileSize(item.fileSize) +}, { + name: "Last modified", + selected: true, + render: item => renderDate(item.lastModified) +}]; + +const contextMenuActions = [[{ + icon: "fas fa-users fa-fw", + name: "Share" +}, { + icon: "fas fa-sign-out-alt fa-fw", + name: "Move to" +}, { + icon: "fas fa-star fa-fw", + name: "Add to favourite" +}, { + icon: "fas fa-edit fa-fw", + name: "Rename" +}, { + icon: "fas fa-copy fa-fw", + name: "Make a copy" +}, { + icon: "fas fa-download fa-fw", + name: "Download" +}], [{ + icon: "fas fa-trash-alt fa-fw", + name: "Remove" +} +]]; + +export default withStyles(styles)(connect()(ProjectExplorer));