X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/d7b47b1810da4b5c25013a14c29da0053e1d8206..d416c9aa7b70da4f8998792a42616b991d882f26:/src/views-components/side-panel-button/side-panel-button.tsx diff --git a/src/views-components/side-panel-button/side-panel-button.tsx b/src/views-components/side-panel-button/side-panel-button.tsx index 3ca2f0d6..c813efb0 100644 --- a/src/views-components/side-panel-button/side-panel-button.tsx +++ b/src/views-components/side-panel-button/side-panel-button.tsx @@ -2,22 +2,25 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from 'react'; +import React from 'react'; import { connect, DispatchProp } from 'react-redux'; -import { RootState } from '~/store/store'; -import { ArvadosTheme } from '~/common/custom-theme'; +import { RootState } from 'store/store'; +import { ArvadosTheme } from 'common/custom-theme'; import { PopoverOrigin } from '@material-ui/core/Popover'; import { StyleRulesCallback, WithStyles, withStyles, Toolbar, Grid, Button, MenuItem, Menu } from '@material-ui/core'; -import { AddIcon, CollectionIcon, ProcessIcon, ProjectIcon } from '~/components/icon/icon'; -import { openProjectCreateDialog } from '~/store/projects/project-create-actions'; -import { openCollectionCreateDialog } from '~/store/collections/collection-create-actions'; -import { navigateToRunProcess } from '~/store/navigation/navigation-action'; -import { runProcessPanelActions } from '~/store/run-process-panel/run-process-panel-actions'; -import { getUserUuid } from '~/common/getuser'; -import { matchProjectRoute } from '~/routes/routes'; -import { GroupResource } from '~/models/group'; -import { ResourcesState, getResource } from '~/store/resources/resources'; -import { extractUuidKind, ResourceKind } from '~/models/resource'; +import { AddIcon, CollectionIcon, ProcessIcon, ProjectIcon } from 'components/icon/icon'; +import { openProjectCreateDialog } from 'store/projects/project-create-actions'; +import { openCollectionCreateDialog } from 'store/collections/collection-create-actions'; +import { navigateToRunProcess } from 'store/navigation/navigation-action'; +import { runProcessPanelActions } from 'store/run-process-panel/run-process-panel-actions'; +import { getUserUuid } from 'common/getuser'; +import { matchProjectRoute } from 'routes/routes'; +import { GroupClass, GroupResource } from 'models/group'; +import { ResourcesState, getResource } from 'store/resources/resources'; +import { extractUuidKind, ResourceKind } from 'models/resource'; +import { pluginConfig } from 'plugins'; +import { ElementListReducer } from 'common/plugintypes'; +import { Location } from 'history'; type CssRules = 'button' | 'menuItem' | 'icon'; @@ -37,7 +40,7 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ }); interface SidePanelDataProps { - location: any; + location: Location; currentItemId: string; resources: ResourcesState; currentUserUUID: string | undefined; @@ -87,10 +90,36 @@ export const SidePanelButton = withStyles(styles)( const currentProject = getResource(currentItemId)(resources); if (currentProject && currentProject.writableBy.indexOf(currentUserUUID || '') >= 0 && - !isProjectTrashed(currentProject, resources)) { + !isProjectTrashed(currentProject, resources) && + currentProject.groupClass !== GroupClass.FILTER) { enabled = true; } } + + for (const enableFn of pluginConfig.enableNewButtonMatchers) { + if (enableFn(location, currentItemId, currentUserUUID, resources)) { + enabled = true; + } + } + + let menuItems = <> + + New collection + + + Run a workflow + + + New project + + ; + + const reduceItemsFn: (a: React.ReactElement[], b: ElementListReducer) => React.ReactElement[] = + (a, b) => b(a, classes.menuItem); + + menuItems = React.createElement(React.Fragment, null, + pluginConfig.newButtonMenuList.reduce(reduceItemsFn, React.Children.toArray(menuItems.props.children))); + return @@ -109,15 +138,7 @@ export const SidePanelButton = withStyles(styles)( onClose={this.handleClose} onClick={this.handleClose} transformOrigin={transformOrigin}> - - New collection - - - Run a process - - - New project - + {menuItems} @@ -150,4 +171,4 @@ export const SidePanelButton = withStyles(styles)( } } ) -); \ No newline at end of file +);