From: Michal Klobukowski Date: Wed, 5 Sep 2018 11:41:44 +0000 (+0200) Subject: Extract data-table-default-view component X-Git-Tag: 1.3.0~112^2~2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/00b22552554ddcae9cf3b68ed4017067555ba02e Extract data-table-default-view component Feature #14160 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/components/data-explorer/data-explorer.tsx b/src/components/data-explorer/data-explorer.tsx index 002aee4a..1535fde2 100644 --- a/src/components/data-explorer/data-explorer.tsx +++ b/src/components/data-explorer/data-explorer.tsx @@ -32,7 +32,7 @@ interface DataExplorerDataProps { rowsPerPageOptions: number[]; page: number; contextMenuColumn: boolean; - noItemsPlaceholder?: React.ReactNode; + dataTableDefaultView?: React.ReactNode; } interface DataExplorerActionProps { @@ -63,7 +63,7 @@ export const DataExplorer = withStyles(styles)( columns, onContextMenu, onFiltersChange, onSortToggle, extractKey, rowsPerPage, rowsPerPageOptions, onColumnToggle, searchValue, onSearch, items, itemsAvailable, onRowClick, onRowDoubleClick, classes, - noItemsPlaceholder + dataTableDefaultView } = this.props; return @@ -87,7 +87,7 @@ export const DataExplorer = withStyles(styles)( onFiltersChange={onFiltersChange} onSortToggle={onSortToggle} extractKey={extractKey} - noItemsPlaceholder={noItemsPlaceholder} + defaultView={dataTableDefaultView} /> diff --git a/src/components/data-table-default-view/data-table-default-view.tsx b/src/components/data-table-default-view/data-table-default-view.tsx new file mode 100644 index 00000000..9f674b94 --- /dev/null +++ b/src/components/data-table-default-view/data-table-default-view.tsx @@ -0,0 +1,27 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import * as React from 'react'; +import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'; +import { DefaultViewDataProps, DefaultView } from '~/components/default-view/default-view'; +import { ArvadosTheme } from '~/common/custom-theme'; +import { DetailsIcon } from '~/components/icon/icon'; + +type CssRules = 'classRoot'; + +const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ + classRoot: { + marginTop: theme.spacing.unit * 4, + marginBottom: theme.spacing.unit * 4, + }, +}); +type DataTableDefaultViewDataProps = Partial>; +type DataTableDefaultViewProps = DataTableDefaultViewDataProps & WithStyles; + +export const DataTableDefaultView = withStyles(styles)( + ({ classes, ...props }: DataTableDefaultViewProps) => { + const icon = props.icon || DetailsIcon; + const messages = props.messages || ['No items found']; + return ; + }); diff --git a/src/components/data-table/data-table.tsx b/src/components/data-table/data-table.tsx index 2216160c..db7b484a 100644 --- a/src/components/data-table/data-table.tsx +++ b/src/components/data-table/data-table.tsx @@ -6,8 +6,7 @@ import * as React from 'react'; import { Table, TableBody, TableRow, TableCell, TableHead, TableSortLabel, StyleRulesCallback, Theme, WithStyles, withStyles } from '@material-ui/core'; import { DataColumn, SortDirection } from './data-column'; import { DataTableFilters, DataTableFilterItem } from "../data-table-filters/data-table-filters"; -import { DefaultView } from '~/components/default-view/default-view'; -import { DetailsIcon } from '~/components/icon/icon'; +import { DataTableDefaultView } from '../data-table-default-view/data-table-default-view'; export type DataColumns = Array>; @@ -20,10 +19,10 @@ export interface DataTableDataProps { onSortToggle: (column: DataColumn) => void; onFiltersChange: (filters: DataTableFilterItem[], column: DataColumn) => void; extractKey?: (item: T) => React.Key; - noItemsPlaceholder?: React.ReactNode; + defaultView?: React.ReactNode; } -type CssRules = "tableBody" | "root" | "content" | "noItemsInfo" | "noItemsPlaceholder"; +type CssRules = "tableBody" | "root" | "content" | "noItemsInfo"; const styles: StyleRulesCallback = (theme: Theme) => ({ root: { @@ -40,10 +39,6 @@ const styles: StyleRulesCallback = (theme: Theme) => ({ textAlign: "center", padding: theme.spacing.unit }, - noItemsPlaceholder: { - marginTop: theme.spacing.unit * 4, - marginBottom: theme.spacing.unit * 4, - } }); type DataTableProps = DataTableDataProps & WithStyles; @@ -70,11 +65,9 @@ export const DataTable = withStyles(styles)( } renderNoItemsPlaceholder = () => { - return this.props.noItemsPlaceholder - ? this.props.noItemsPlaceholder - :
- -
; + return this.props.defaultView + ? this.props.defaultView + : ; } renderHeadCell = (column: DataColumn, index: number) => { diff --git a/src/views/favorite-panel/favorite-panel.tsx b/src/views/favorite-panel/favorite-panel.tsx index 6ba05b06..9f35ecd6 100644 --- a/src/views/favorite-panel/favorite-panel.tsx +++ b/src/views/favorite-panel/favorite-panel.tsx @@ -31,6 +31,7 @@ import { ContainerRequestState } from "~/models/container-request"; import { FavoritesState } from '../../store/favorites/favorites-reducer'; import { RootState } from '~/store/store'; import { PanelDefaultView } from '~/components/panel-default-view/panel-default-view'; +import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view'; type CssRules = "toolbar" | "button"; @@ -175,7 +176,8 @@ export const FavoritePanel = withStyles(styles)( onRowClick={this.props.onItemClick} onRowDoubleClick={this.props.onItemDoubleClick} onContextMenu={this.props.onContextMenu} - contextMenuColumn={true} /> + contextMenuColumn={true} + dataTableDefaultView={} /> : ; diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx index 3e503956..aa361bc9 100644 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@ -29,6 +29,7 @@ import { openCollectionCreateDialog } from '~/store/collections/collection-creat import { openProjectCreateDialog } from '~/store/projects/project-create-actions'; import { filterResources } from '~/store/resources/resources'; import { PanelDefaultView } from '~/components/panel-default-view/panel-default-view'; +import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view'; type CssRules = 'root' | "toolbar" | "button"; @@ -165,7 +166,8 @@ export const ProjectPanel = withStyles(styles)( onRowClick={this.handleRowClick} onRowDoubleClick={this.handleRowDoubleClick} onContextMenu={this.handleContextMenu} - contextMenuColumn={true} /> + contextMenuColumn={true} + dataTableDefaultView={} /> : diff --git a/src/views/trash-panel/trash-panel.tsx b/src/views/trash-panel/trash-panel.tsx index ad78360b..a3664542 100644 --- a/src/views/trash-panel/trash-panel.tsx +++ b/src/views/trash-panel/trash-panel.tsx @@ -32,6 +32,7 @@ import { toggleTrashed } from "~/store/trash/trash-actions"; import { ContextMenuKind } from "~/views-components/context-menu/context-menu"; import { Dispatch } from "redux"; import { PanelDefaultView } from '~/components/panel-default-view/panel-default-view'; +import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view'; type CssRules = "toolbar" | "button"; @@ -169,7 +170,8 @@ export const TrashPanel = withStyles(styles)( onRowClick={this.handleRowClick} onRowDoubleClick={this.handleRowDoubleClick} onContextMenu={this.handleContextMenu} - contextMenuColumn={false} /> + contextMenuColumn={false} + dataTableDefaultView={} /> : ;