projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
21224: set toolbar to only display if the global selected uuid is populated Arvados...
[arvados.git]
/
services
/
workbench2
/
src
/
components
/
data-table
/
data-table.tsx
diff --git
a/services/workbench2/src/components/data-table/data-table.tsx
b/services/workbench2/src/components/data-table/data-table.tsx
index d3bbab5077f863a96010f3e248c1fbda232077e8..1335bdf3980603435a18997512b4dc23ee764d0f 100644
(file)
--- a/
services/workbench2/src/components/data-table/data-table.tsx
+++ b/
services/workbench2/src/components/data-table/data-table.tsx
@@
-29,6
+29,7
@@
import { SvgIconProps } from "@material-ui/core/SvgIcon";
import ArrowDownwardIcon from "@material-ui/icons/ArrowDownward";
import { createTree } from "models/tree";
import { DataTableMultiselectOption } from "../data-table-multiselect-popover/data-table-multiselect-popover";
import ArrowDownwardIcon from "@material-ui/icons/ArrowDownward";
import { createTree } from "models/tree";
import { DataTableMultiselectOption } from "../data-table-multiselect-popover/data-table-multiselect-popover";
+import { isExactlyOneSelected } from "store/multiselect/multiselect-actions";
export type DataColumns<I, R> = Array<DataColumn<I, R>>;
export type DataColumns<I, R> = Array<DataColumn<I, R>>;
@@
-49,11
+50,13
@@
export interface DataTableDataProps<I> {
working?: boolean;
defaultViewIcon?: IconType;
defaultViewMessages?: string[];
working?: boolean;
defaultViewIcon?: IconType;
defaultViewMessages?: string[];
- currentItemUuid?: string;
- currentRoute?: string;
toggleMSToolbar: (isVisible: boolean) => void;
setCheckedListOnStore: (checkedList: TCheckedList) => void;
toggleMSToolbar: (isVisible: boolean) => void;
setCheckedListOnStore: (checkedList: TCheckedList) => void;
+ currentRoute?: string;
+ currentRouteUuid: string;
checkedList: TCheckedList;
checkedList: TCheckedList;
+ selectedResourceUuid: string;
+ setSelectedUuid: (uuid: string) => void;
}
type CssRules =
}
type CssRules =
@@
-161,8
+164,9
@@
export const DataTable = withStyles(styles)(
}
componentDidUpdate(prevProps: Readonly<DataTableProps<T>>, prevState: DataTableState) {
}
componentDidUpdate(prevProps: Readonly<DataTableProps<T>>, prevState: DataTableState) {
- const { items, setCheckedListOnStore } = this.props;
+ const { items,
currentRouteUuid,
setCheckedListOnStore } = this.props;
const { isSelected } = this.state;
const { isSelected } = this.state;
+ const singleSelected = isExactlyOneSelected(this.props.checkedList);
if (prevProps.items !== items) {
if (isSelected === true) this.setState({ isSelected: false });
if (items.length) this.initializeCheckedList(items);
if (prevProps.items !== items) {
if (isSelected === true) this.setState({ isSelected: false });
if (items.length) this.initializeCheckedList(items);
@@
-171,6
+175,12
@@
export const DataTable = withStyles(styles)(
if (prevProps.currentRoute !== this.props.currentRoute) {
this.initializeCheckedList([])
}
if (prevProps.currentRoute !== this.props.currentRoute) {
this.initializeCheckedList([])
}
+ if (singleSelected && singleSelected !== isExactlyOneSelected(prevProps.checkedList)) {
+ this.props.setSelectedUuid(singleSelected);
+ }
+ if (!singleSelected && !!currentRouteUuid) {
+ this.props.setSelectedUuid(currentRouteUuid);
+ }
}
componentWillUnmount(): void {
}
componentWillUnmount(): void {
@@
-216,11
+226,12
@@
export const DataTable = withStyles(styles)(
initializeCheckedList = (uuids: any[]): void => {
const newCheckedList = { ...this.props.checkedList };
initializeCheckedList = (uuids: any[]): void => {
const newCheckedList = { ...this.props.checkedList };
-
uuids.forEach(uuid =>
{
-
if (!newCheckedList.hasOwnProperty(uuid))
{
- newCheckedList[uuid] = false
;
+
if(Object.keys(newCheckedList).length === 0)
{
+
for(const uuid of uuids)
{
+ newCheckedList[uuid] = false
}
}
- });
+ }
+
for (const key in newCheckedList) {
if (!uuids.includes(key)) {
delete newCheckedList[key];
for (const key in newCheckedList) {
if (!uuids.includes(key)) {
delete newCheckedList[key];
@@
-395,7
+406,7
@@
export const DataTable = withStyles(styles)(
);
renderBodyRow = (item: any, index: number) => {
);
renderBodyRow = (item: any, index: number) => {
- const { onRowClick, onRowDoubleClick, extractKey, classes,
currentItem
Uuid, currentRoute } = this.props;
+ const { onRowClick, onRowDoubleClick, extractKey, classes,
selectedResource
Uuid, currentRoute } = this.props;
return (
<TableRow
data-cy={'data-table-row'}
return (
<TableRow
data-cy={'data-table-row'}
@@
-404,7
+415,7
@@
export const DataTable = withStyles(styles)(
onClick={event => onRowClick && onRowClick(event, item)}
onContextMenu={this.handleRowContextMenu(item)}
onDoubleClick={event => onRowDoubleClick && onRowDoubleClick(event, item)}
onClick={event => onRowClick && onRowClick(event, item)}
onContextMenu={this.handleRowContextMenu(item)}
onDoubleClick={event => onRowDoubleClick && onRowDoubleClick(event, item)}
- selected={item ===
currentItem
Uuid}>
+ selected={item ===
selectedResource
Uuid}>
{this.mapVisibleColumns((column, index) => (
<TableCell
key={column.key || index}
{this.mapVisibleColumns((column, index) => (
<TableCell
key={column.key || index}