X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/3cb71e5a3dadfaa307dc948f8933e6ca3af4df60..f9a41a09f7f884aeaf4291d155acf4bab74e71d8:/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 b8811476..d79b98cf 100644 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@ -14,11 +14,17 @@ import { RootState } from '~/store/store'; import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters'; import { ContainerRequestState } from '~/models/container-request'; import { SortDirection } from '~/components/data-table/data-column'; -import { ResourceKind, Resource } from '~/models/resource'; -import { ResourceFileSize, ResourceLastModifiedDate, ProcessStatus, ResourceType, ResourceOwner } from '~/views-components/data-explorer/renderers'; +import { ResourceKind, Resource, EditableResource } from '~/models/resource'; +import { + ResourceFileSize, + ResourceLastModifiedDate, + ProcessStatus, + ResourceType, + ResourceOwner +} from '~/views-components/data-explorer/renderers'; import { ProjectIcon } from '~/components/icon/icon'; import { ResourceName } from '~/views-components/data-explorer/renderers'; -import { ResourcesState, getResource } from '~/store/resources/resources'; +import { ResourcesState, getResourceWithEditableStatus } from '~/store/resources/resources'; import { loadDetailsPanel } from '~/store/details-panel/details-panel-action'; import { resourceKindToContextMenuKind, openContextMenu } from '~/store/context-menu/context-menu-actions'; import { ProjectResource } from '~/models/project'; @@ -28,7 +34,7 @@ import { PROJECT_PANEL_CURRENT_UUID } from '~/store/project-panel/project-panel- import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view'; import { ArvadosTheme } from "~/common/custom-theme"; import { createTree } from '~/models/tree'; -import { getInitialResourceTypeFilters } from '~/store/resource-type-filters/resource-type-filters'; +import { getInitialResourceTypeFilters, getInitialProcessStatusFilters } from '~/store/resource-type-filters/resource-type-filters'; type CssRules = 'root' | "button"; @@ -61,7 +67,7 @@ export const projectPanelColumns: DataColumns = [ name: ProjectPanelColumnNames.NAME, selected: true, configurable: true, - sortDirection: SortDirection.ASC, + sortDirection: SortDirection.NONE, filters: createTree(), render: uuid => }, @@ -69,7 +75,8 @@ export const projectPanelColumns: DataColumns = [ name: "Status", selected: true, configurable: true, - filters: createTree(), + mutuallyExclusiveFilters: true, + filters: getInitialProcessStatusFilters(), render: uuid => , }, { @@ -81,7 +88,7 @@ export const projectPanelColumns: DataColumns = [ }, { name: ProjectPanelColumnNames.OWNER, - selected: true, + selected: false, configurable: true, filters: createTree(), render: uuid => @@ -97,7 +104,7 @@ export const projectPanelColumns: DataColumns = [ name: ProjectPanelColumnNames.LAST_MODIFIED, selected: true, configurable: true, - sortDirection: SortDirection.NONE, + sortDirection: SortDirection.DESC, filters: createTree(), render: uuid => } @@ -105,7 +112,7 @@ export const projectPanelColumns: DataColumns = [ export const PROJECT_PANEL_ID = "projectPanel"; -const DEFAUL_VIEW_MESSAGES = [ +const DEFAULT_VIEW_MESSAGES = [ 'Your project is empty.', 'Please create a project or create a collection and upload a data.', ]; @@ -113,6 +120,8 @@ const DEFAUL_VIEW_MESSAGES = [ interface ProjectPanelDataProps { currentItemId: string; resources: ResourcesState; + isAdmin: boolean; + userUuid: string; } type ProjectPanelProps = ProjectPanelDataProps & DispatchProp @@ -121,7 +130,9 @@ type ProjectPanelProps = ProjectPanelDataProps & DispatchProp export const ProjectPanel = withStyles(styles)( connect((state: RootState) => ({ currentItemId: getProperty(PROJECT_PANEL_CURRENT_UUID)(state.properties), - resources: state.resources + resources: state.resources, + isAdmin: state.auth.user!.isAdmin, + userUuid: state.auth.user!.uuid, }))( class extends React.Component { render() { @@ -136,7 +147,7 @@ export const ProjectPanel = withStyles(styles)( dataTableDefaultView={ + messages={DEFAULT_VIEW_MESSAGES} /> } /> ; } @@ -146,8 +157,9 @@ export const ProjectPanel = withStyles(styles)( } handleContextMenu = (event: React.MouseEvent, resourceUuid: string) => { - const menuKind = resourceKindToContextMenuKind(resourceUuid); - const resource = getResource(resourceUuid)(this.props.resources); + const { isAdmin, userUuid, resources } = this.props; + const resource = getResourceWithEditableStatus(resourceUuid, userUuid)(resources); + const menuKind = resourceKindToContextMenuKind(resourceUuid, isAdmin, (resource || {} as EditableResource).isEditable); if (menuKind && resource) { this.props.dispatch(openContextMenu(event, { name: resource.name,