[arvados-workbench2] created: 2.4.0-104-gea5a820f
git repository hosting
git at public.arvados.org
Wed Jun 1 13:45:45 UTC 2022
at ea5a820fec3ed912626227103ed6bd84d6ee8ff3 (commit)
commit ea5a820fec3ed912626227103ed6bd84d6ee8ff3
Author: Stephen Smith <stephen at curii.com>
Date: Wed Jun 1 09:45:04 2022 -0400
18984: Move and rename workflow / definition filter
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen at curii.com>
diff --git a/src/store/resource-type-filters/resource-type-filters.test.ts b/src/store/resource-type-filters/resource-type-filters.test.ts
index f001770e..c2ace021 100644
--- a/src/store/resource-type-filters/resource-type-filters.test.ts
+++ b/src/store/resource-type-filters/resource-type-filters.test.ts
@@ -44,8 +44,8 @@ describe("serializeResourceTypeFilters", () => {
it("should serialize output collections and projects", () => {
const filters = pipe(
() => getInitialResourceTypeFilters(),
- deselectNode(ObjectTypeFilter.PROCESS),
deselectNode(ObjectTypeFilter.WORKFLOW),
+ deselectNode(ObjectTypeFilter.DEFINITION),
deselectNode(CollectionTypeFilter.GENERAL_COLLECTION),
deselectNode(CollectionTypeFilter.LOG_COLLECTION),
deselectNode(CollectionTypeFilter.INTERMEDIATE_COLLECTION),
@@ -59,8 +59,8 @@ describe("serializeResourceTypeFilters", () => {
it("should serialize intermediate collections and projects", () => {
const filters = pipe(
() => getInitialResourceTypeFilters(),
- deselectNode(ObjectTypeFilter.PROCESS),
deselectNode(ObjectTypeFilter.WORKFLOW),
+ deselectNode(ObjectTypeFilter.DEFINITION),
deselectNode(CollectionTypeFilter.GENERAL_COLLECTION),
deselectNode(CollectionTypeFilter.LOG_COLLECTION),
deselectNode(CollectionTypeFilter.OUTPUT_COLLECTION),
@@ -75,8 +75,8 @@ describe("serializeResourceTypeFilters", () => {
const filters = pipe(
() => getInitialResourceTypeFilters(),
deselectNode(ObjectTypeFilter.PROJECT),
- deselectNode(ObjectTypeFilter.PROCESS),
deselectNode(ObjectTypeFilter.WORKFLOW),
+ deselectNode(ObjectTypeFilter.DEFINITION),
deselectNode(CollectionTypeFilter.OUTPUT_COLLECTION)
)();
@@ -91,7 +91,7 @@ describe("serializeResourceTypeFilters", () => {
deselectNode(ObjectTypeFilter.PROJECT),
deselectNode(ProcessTypeFilter.CHILD_PROCESS),
deselectNode(ObjectTypeFilter.COLLECTION),
- deselectNode(ObjectTypeFilter.WORKFLOW),
+ deselectNode(ObjectTypeFilter.DEFINITION),
)();
const serializedFilters = serializeResourceTypeFilters(filters);
@@ -105,7 +105,7 @@ describe("serializeResourceTypeFilters", () => {
deselectNode(ObjectTypeFilter.PROJECT),
deselectNode(ProcessTypeFilter.MAIN_PROCESS),
deselectNode(ObjectTypeFilter.COLLECTION),
- deselectNode(ObjectTypeFilter.WORKFLOW),
+ deselectNode(ObjectTypeFilter.DEFINITION),
)();
const serializedFilters = serializeResourceTypeFilters(filters);
@@ -116,9 +116,9 @@ describe("serializeResourceTypeFilters", () => {
it("should serialize all project types", () => {
const filters = pipe(
() => getInitialResourceTypeFilters(),
- deselectNode(ObjectTypeFilter.PROCESS),
- deselectNode(ObjectTypeFilter.COLLECTION),
deselectNode(ObjectTypeFilter.WORKFLOW),
+ deselectNode(ObjectTypeFilter.COLLECTION),
+ deselectNode(ObjectTypeFilter.DEFINITION),
)();
const serializedFilters = serializeResourceTypeFilters(filters);
@@ -130,9 +130,9 @@ describe("serializeResourceTypeFilters", () => {
const filters = pipe(
() => getInitialResourceTypeFilters(),
deselectNode(GroupTypeFilter.PROJECT),
- deselectNode(ObjectTypeFilter.PROCESS),
- deselectNode(ObjectTypeFilter.COLLECTION),
deselectNode(ObjectTypeFilter.WORKFLOW),
+ deselectNode(ObjectTypeFilter.COLLECTION),
+ deselectNode(ObjectTypeFilter.DEFINITION),
)();
const serializedFilters = serializeResourceTypeFilters(filters);
@@ -144,9 +144,9 @@ describe("serializeResourceTypeFilters", () => {
const filters = pipe(
() => getInitialResourceTypeFilters(),
deselectNode(GroupTypeFilter.FILTER_GROUP),
- deselectNode(ObjectTypeFilter.PROCESS),
- deselectNode(ObjectTypeFilter.COLLECTION),
deselectNode(ObjectTypeFilter.WORKFLOW),
+ deselectNode(ObjectTypeFilter.COLLECTION),
+ deselectNode(ObjectTypeFilter.DEFINITION),
)();
const serializedFilters = serializeResourceTypeFilters(filters);
diff --git a/src/store/resource-type-filters/resource-type-filters.ts b/src/store/resource-type-filters/resource-type-filters.ts
index 9f6d73ba..04c056dc 100644
--- a/src/store/resource-type-filters/resource-type-filters.ts
+++ b/src/store/resource-type-filters/resource-type-filters.ts
@@ -25,9 +25,9 @@ export enum ProcessStatusFilter {
export enum ObjectTypeFilter {
PROJECT = 'Project',
- PROCESS = 'Process',
- COLLECTION = 'Data collection',
WORKFLOW = 'Workflow',
+ COLLECTION = 'Data collection',
+ DEFINITION = 'Definition',
}
export enum GroupTypeFilter {
@@ -43,8 +43,8 @@ export enum CollectionTypeFilter {
}
export enum ProcessTypeFilter {
- MAIN_PROCESS = 'Main',
- CHILD_PROCESS = 'Child',
+ MAIN_PROCESS = 'Runs',
+ CHILD_PROCESS = 'Intermediate Steps',
}
const initFilter = (name: string, parent = '', isSelected?: boolean, isExpanded?: boolean) =>
@@ -63,9 +63,9 @@ const initFilter = (name: string, parent = '', isSelected?: boolean, isExpanded?
export const getSimpleObjectTypeFilters = pipe(
(): DataTableFilters => createTree<DataTableFilterItem>(),
initFilter(ObjectTypeFilter.PROJECT),
- initFilter(ObjectTypeFilter.PROCESS),
- initFilter(ObjectTypeFilter.COLLECTION),
initFilter(ObjectTypeFilter.WORKFLOW),
+ initFilter(ObjectTypeFilter.COLLECTION),
+ initFilter(ObjectTypeFilter.DEFINITION),
);
// Using pipe() with more than 7 arguments makes the return type be 'any',
@@ -78,9 +78,10 @@ export const getInitialResourceTypeFilters = pipe(
initFilter(GroupTypeFilter.FILTER_GROUP, ObjectTypeFilter.PROJECT),
),
pipe(
- initFilter(ObjectTypeFilter.PROCESS, '', false, true),
- initFilter(ProcessTypeFilter.MAIN_PROCESS, ObjectTypeFilter.PROCESS),
- initFilter(ProcessTypeFilter.CHILD_PROCESS, ObjectTypeFilter.PROCESS, false)
+ initFilter(ObjectTypeFilter.WORKFLOW, '', false, true),
+ initFilter(ObjectTypeFilter.DEFINITION, ObjectTypeFilter.WORKFLOW),
+ initFilter(ProcessTypeFilter.MAIN_PROCESS, ObjectTypeFilter.WORKFLOW),
+ initFilter(ProcessTypeFilter.CHILD_PROCESS, ObjectTypeFilter.WORKFLOW, false),
),
pipe(
initFilter(ObjectTypeFilter.COLLECTION, '', true, true),
@@ -89,7 +90,6 @@ export const getInitialResourceTypeFilters = pipe(
initFilter(CollectionTypeFilter.INTERMEDIATE_COLLECTION, ObjectTypeFilter.COLLECTION),
initFilter(CollectionTypeFilter.LOG_COLLECTION, ObjectTypeFilter.COLLECTION),
),
- initFilter(ObjectTypeFilter.WORKFLOW)
);
@@ -134,11 +134,11 @@ const objectTypeToResourceKind = (type: ObjectTypeFilter) => {
switch (type) {
case ObjectTypeFilter.PROJECT:
return ResourceKind.PROJECT;
- case ObjectTypeFilter.PROCESS:
+ case ObjectTypeFilter.WORKFLOW:
return ResourceKind.PROCESS;
case ObjectTypeFilter.COLLECTION:
return ResourceKind.COLLECTION;
- case ObjectTypeFilter.WORKFLOW:
+ case ObjectTypeFilter.DEFINITION:
return ResourceKind.WORKFLOW;
}
};
@@ -156,7 +156,7 @@ const serializeObjectTypeFilters = ({ fb, selectedFilters }: ReturnType<typeof c
? set.add(ObjectTypeFilter.COLLECTION)
: set,
set => processFilters.length > 0
- ? set.add(ObjectTypeFilter.PROCESS)
+ ? set.add(ObjectTypeFilter.WORKFLOW)
: set,
set => Array.from(set)
)();
commit 10465af2a9575f004b8f516d8c74b50413531972
Author: Stephen Smith <stephen at curii.com>
Date: Tue May 31 23:34:46 2022 -0400
18984: Add auto-apply with debounce to non-mutually exclusive data table filter popover
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen at curii.com>
diff --git a/src/components/data-table-filters/data-table-filters-popover.tsx b/src/components/data-table-filters/data-table-filters-popover.tsx
index 3183157b..b5187866 100644
--- a/src/components/data-table-filters/data-table-filters-popover.tsx
+++ b/src/components/data-table-filters/data-table-filters-popover.tsx
@@ -2,7 +2,7 @@
//
// SPDX-License-Identifier: AGPL-3.0
-import React from "react";
+import React, { useEffect } from "react";
import {
WithStyles,
withStyles,
@@ -23,6 +23,7 @@ import { DefaultTransformOrigin } from "components/popover/helpers";
import { createTree } from 'models/tree';
import { DataTableFilters, DataTableFiltersTree } from "./data-table-filters-tree";
import { getNodeDescendants } from 'models/tree';
+import debounce from "lodash/debounce";
export type CssRules = "root" | "icon" | "iconButton" | "active" | "checkbox";
@@ -127,7 +128,7 @@ export const DataTableFiltersPopover = withStyles(styles)(
open={!!this.state.anchorEl}
anchorOrigin={DefaultTransformOrigin}
transformOrigin={DefaultTransformOrigin}
- onClose={this.cancel}>
+ onClose={this.close}>
<Card>
<CardContent>
<Typography variant="caption">
@@ -137,36 +138,21 @@ export const DataTableFiltersPopover = withStyles(styles)(
<DataTableFiltersTree
filters={this.state.filters}
mutuallyExclusive={this.props.mutuallyExclusive}
- onChange={filters => {
- this.setState({ filters });
- if (this.props.mutuallyExclusive) {
- const { onChange } = this.props;
- if (onChange) {
- onChange(filters);
- }
- this.setState({ anchorEl: undefined });
- }
- }} />
+ onChange={this.onChange} />
{this.props.mutuallyExclusive ||
<CardActions>
- <Button
- color="primary"
- variant='contained'
- size="small"
- onClick={this.submit}>
- Ok
- </Button>
<Button
color="primary"
variant="outlined"
size="small"
- onClick={this.cancel}>
- Cancel
+ onClick={this.close}>
+ Close
</Button>
</CardActions >
}
</Card>
</Popover>
+ <this.MountHandler />
</>;
}
@@ -180,25 +166,43 @@ export const DataTableFiltersPopover = withStyles(styles)(
this.setState({ anchorEl: this.icon.current || undefined });
}
- submit = () => {
+ onChange = (filters) => {
+ this.setState({ filters });
+ if (this.props.mutuallyExclusive) {
+ // Mutually exclusive filters apply immediately
+ const { onChange } = this.props;
+ if (onChange) {
+ onChange(filters);
+ }
+ this.close();
+ } else {
+ // Non-mutually exclusive filters are debounced
+ this.submit();
+ }
+ }
+
+ submit = debounce (() => {
const { onChange } = this.props;
if (onChange) {
onChange(this.state.filters);
}
- this.setState({ anchorEl: undefined });
- }
+ }, 1000);
+
+ MountHandler = () => {
+ useEffect(() => {
+ return () => {
+ this.submit.cancel();
+ }
+ },[]);
+ return null;
+ };
- cancel = () => {
+ close = () => {
this.setState(prev => ({
...prev,
- filters: prev.prevFilters,
anchorEl: undefined
}));
}
- setFilters = (filters: DataTableFilters) => {
- this.setState({ filters });
- }
-
}
);
commit 2903199054f8ac49ff15386fa576a0765032fa25
Author: Stephen Smith <stephen at curii.com>
Date: Wed May 25 21:27:43 2022 -0400
19894: Change process type filter default values and collapse state
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen at curii.com>
diff --git a/src/store/resource-type-filters/resource-type-filters.ts b/src/store/resource-type-filters/resource-type-filters.ts
index 6f766b58..9f6d73ba 100644
--- a/src/store/resource-type-filters/resource-type-filters.ts
+++ b/src/store/resource-type-filters/resource-type-filters.ts
@@ -47,7 +47,7 @@ export enum ProcessTypeFilter {
CHILD_PROCESS = 'Child',
}
-const initFilter = (name: string, parent = '', isSelected?: boolean) =>
+const initFilter = (name: string, parent = '', isSelected?: boolean, isExpanded?: boolean) =>
setNode<DataTableFilterItem>({
id: name,
value: { name },
@@ -55,8 +55,8 @@ const initFilter = (name: string, parent = '', isSelected?: boolean) =>
children: [],
active: false,
selected: isSelected !== undefined ? isSelected : true,
- expanded: false,
initialState: isSelected !== undefined ? isSelected : true,
+ expanded: isExpanded !== undefined ? isExpanded : false,
status: TreeNodeStatus.LOADED,
});
@@ -73,17 +73,17 @@ export const getSimpleObjectTypeFilters = pipe(
export const getInitialResourceTypeFilters = pipe(
(): DataTableFilters => createTree<DataTableFilterItem>(),
pipe(
- initFilter(ObjectTypeFilter.PROJECT),
+ initFilter(ObjectTypeFilter.PROJECT, '', true, true),
initFilter(GroupTypeFilter.PROJECT, ObjectTypeFilter.PROJECT),
initFilter(GroupTypeFilter.FILTER_GROUP, ObjectTypeFilter.PROJECT),
),
pipe(
- initFilter(ObjectTypeFilter.PROCESS),
+ initFilter(ObjectTypeFilter.PROCESS, '', false, true),
initFilter(ProcessTypeFilter.MAIN_PROCESS, ObjectTypeFilter.PROCESS),
- initFilter(ProcessTypeFilter.CHILD_PROCESS, ObjectTypeFilter.PROCESS)
+ initFilter(ProcessTypeFilter.CHILD_PROCESS, ObjectTypeFilter.PROCESS, false)
),
pipe(
- initFilter(ObjectTypeFilter.COLLECTION),
+ initFilter(ObjectTypeFilter.COLLECTION, '', true, true),
initFilter(CollectionTypeFilter.GENERAL_COLLECTION, ObjectTypeFilter.COLLECTION),
initFilter(CollectionTypeFilter.OUTPUT_COLLECTION, ObjectTypeFilter.COLLECTION),
initFilter(CollectionTypeFilter.INTERMEDIATE_COLLECTION, ObjectTypeFilter.COLLECTION),
commit c69c6d43021b29186717ad30bea95cf50ee8c1e6
Author: Stephen Smith <stephen at curii.com>
Date: Wed May 25 21:26:35 2022 -0400
19894: Show dirty indicator on process type filter
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen at curii.com>
diff --git a/src/components/data-table-filters/data-table-filters-tree.tsx b/src/components/data-table-filters/data-table-filters-tree.tsx
index 659a385d..fab9086e 100644
--- a/src/components/data-table-filters/data-table-filters-tree.tsx
+++ b/src/components/data-table-filters/data-table-filters-tree.tsx
@@ -76,7 +76,12 @@ export class DataTableFiltersTree extends React.Component<DataTableFilterProps>
}
const renderItem = (item: TreeItem<DataTableFilterItem>) =>
- <span>{item.data.name}</span>;
+ <span>
+ {item.data.name}
+ {item.initialState !== item.selected ? <>
+ *
+ </> : null}
+ </span>;
const filterToTreeItem = (filters: DataTableFilters) =>
(id: string): TreeItem<any> => {
@@ -92,6 +97,7 @@ const filterToTreeItem = (filters: DataTableFilters) =>
items: items.length > 0 ? items : undefined,
open: node.expanded,
selected: node.selected,
+ initialState: node.initialState,
indeterminate: isIndeterminate,
status: TreeItemStatus.LOADED,
};
diff --git a/src/components/tree/tree.tsx b/src/components/tree/tree.tsx
index 6e562dfa..fc9dbc74 100644
--- a/src/components/tree/tree.tsx
+++ b/src/components/tree/tree.tsx
@@ -97,6 +97,7 @@ export interface TreeItem<T> {
open: boolean;
active: boolean;
selected?: boolean;
+ initialState?: boolean;
indeterminate?: boolean;
flatTree?: boolean;
status: TreeItemStatus;
diff --git a/src/models/tree.ts b/src/models/tree.ts
index e9291388..4a52d61a 100644
--- a/src/models/tree.ts
+++ b/src/models/tree.ts
@@ -14,6 +14,7 @@ export interface TreeNode<T = any> {
parent: string;
active: boolean;
selected: boolean;
+ initialState?: boolean;
expanded: boolean;
status: TreeNodeStatus;
}
diff --git a/src/store/resource-type-filters/resource-type-filters.ts b/src/store/resource-type-filters/resource-type-filters.ts
index 64a391ca..6f766b58 100644
--- a/src/store/resource-type-filters/resource-type-filters.ts
+++ b/src/store/resource-type-filters/resource-type-filters.ts
@@ -56,6 +56,7 @@ const initFilter = (name: string, parent = '', isSelected?: boolean) =>
active: false,
selected: isSelected !== undefined ? isSelected : true,
expanded: false,
+ initialState: isSelected !== undefined ? isSelected : true,
status: TreeNodeStatus.LOADED,
});
commit 0537bee45712945bd97d28f6d28118f7589a6840
Author: Stephen Smith <stephen at curii.com>
Date: Wed May 25 21:23:22 2022 -0400
18984: Add indeterminate ui for process type filters
Arvados-DCO-1.1-Signed-off-by: Stephen Smith <stephen at curii.com>
diff --git a/src/components/data-table-filters/data-table-filters-tree.tsx b/src/components/data-table-filters/data-table-filters-tree.tsx
index 6514078d..659a385d 100644
--- a/src/components/data-table-filters/data-table-filters-tree.tsx
+++ b/src/components/data-table-filters/data-table-filters-tree.tsx
@@ -83,6 +83,7 @@ const filterToTreeItem = (filters: DataTableFilters) =>
const node = getNode(id)(filters) || initTreeNode({ id: '', value: 'InvalidNode' });
const items = getNodeChildrenIds(node.id)(filters)
.map(filterToTreeItem(filters));
+ const isIndeterminate = !node.selected && items.some(i => i.selected || i.indeterminate);
return {
active: node.active,
@@ -91,6 +92,7 @@ const filterToTreeItem = (filters: DataTableFilters) =>
items: items.length > 0 ? items : undefined,
open: node.expanded,
selected: node.selected,
+ indeterminate: isIndeterminate,
status: TreeItemStatus.LOADED,
};
};
diff --git a/src/components/tree/tree.tsx b/src/components/tree/tree.tsx
index 3ae884b6..6e562dfa 100644
--- a/src/components/tree/tree.tsx
+++ b/src/components/tree/tree.tsx
@@ -97,6 +97,7 @@ export interface TreeItem<T> {
open: boolean;
active: boolean;
selected?: boolean;
+ indeterminate?: boolean;
flatTree?: boolean;
status: TreeItemStatus;
items?: Array<TreeItem<T>>;
@@ -292,6 +293,7 @@ export const Tree = withStyles(styles)(
{showSelection(it) && !useRadioButtons &&
<Checkbox
checked={it.selected}
+ indeterminate={!it.selected && it.indeterminate}
className={classes.checkbox}
color="primary"
onClick={this.handleCheckboxChange(it)} />}
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list