From: Peter Amstutz Date: Thu, 8 Dec 2022 22:41:33 +0000 (-0500) Subject: 19783: Work in progress on filtering collections X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/db1c206c8403ed2b874625f1d1afc7af85dde25c 19783: Work in progress on filtering collections Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- diff --git a/src/store/store.ts b/src/store/store.ts index 94f110a095..1b9e05a904 100644 --- a/src/store/store.ts +++ b/src/store/store.ts @@ -26,7 +26,8 @@ import { AllProcessesPanelMiddlewareService } from "./all-processes-panel/all-pr import { collectionPanelReducer } from './collection-panel/collection-panel-reducer'; import { dialogReducer } from './dialog/dialog-reducer'; import { ServiceRepository } from "services/services"; -import { treePickerReducer } from './tree-picker/tree-picker-reducer'; +import { treePickerReducer, treePickerSearchReducer } from './tree-picker/tree-picker-reducer'; +import { treePickerSearchMiddleware } from './tree-picker/tree-picker-middleware'; import { resourcesReducer } from 'store/resources/resources-reducer'; import { propertiesReducer } from './properties/properties-reducer'; import { fileUploaderReducer } from './file-uploader/file-uploader-reducer'; @@ -76,7 +77,7 @@ import { MiddlewareListReducer } from 'common/plugintypes'; declare global { interface Window { - __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose; + __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose; } } @@ -174,6 +175,7 @@ export function configureStore(history: History, services: ServiceRepository, co publicFavoritesMiddleware, collectionsContentAddress, subprocessMiddleware, + treePickerSearchMiddleware ]; const reduceMiddlewaresFn: (a: Middleware[], @@ -203,6 +205,7 @@ const createRootReducer = (services: ServiceRepository) => combineReducers({ router: routerReducer, snackbar: snackbarReducer, treePicker: treePickerReducer, + treePickerSearch: treePickerSearchReducer, fileUploader: fileUploaderReducer, processPanel: processPanelReducer, progressIndicator: progressIndicatorReducer, diff --git a/src/store/tree-picker/tree-picker-actions.ts b/src/store/tree-picker/tree-picker-actions.ts index 1c0b2dea4e..b7710494f5 100644 --- a/src/store/tree-picker/tree-picker-actions.ts +++ b/src/store/tree-picker/tree-picker-actions.ts @@ -14,7 +14,7 @@ import { pipe, values } from 'lodash/fp'; import { ResourceKind } from 'models/resource'; import { GroupContentsResource } from 'services/groups-service/groups-service'; import { getTreePicker, TreePicker } from './tree-picker'; -import { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker'; +import { ProjectsTreePickerItem } from './tree-picker-middleware'; import { OrderBuilder } from 'services/api/order-builder'; import { ProjectResource } from 'models/project'; import { mapTree } from '../../models/tree'; @@ -28,6 +28,7 @@ export const treePickerActions = unionize({ LOAD_TREE_PICKER_NODE_SUCCESS: ofType<{ id: string, nodes: Array>, pickerId: string }>(), APPEND_TREE_PICKER_NODE_SUBTREE: ofType<{ id: string, subtree: Tree, pickerId: string }>(), TOGGLE_TREE_PICKER_NODE_COLLAPSE: ofType<{ id: string, pickerId: string }>(), + EXPAND_TREE_PICKER_NODE: ofType<{ id: string, pickerId: string }>(), ACTIVATE_TREE_PICKER_NODE: ofType<{ id: string, pickerId: string, relatedTreePickers?: string[] }>(), DEACTIVATE_TREE_PICKER_NODE: ofType<{ pickerId: string }>(), TOGGLE_TREE_PICKER_NODE_SELECTION: ofType<{ id: string, pickerId: string }>(), @@ -39,6 +40,22 @@ export const treePickerActions = unionize({ export type TreePickerAction = UnionOf; +export interface LoadProjectParams { + includeCollections?: boolean; + includeFiles?: boolean; + includeFilterGroups?: boolean; + loadShared?: boolean; + options?: { showOnlyOwned: boolean; showOnlyWritable: boolean; }; +} + +export const treePickerSearchActions = unionize({ + SET_TREE_PICKER_PROJECT_SEARCH: ofType<{ pickerId: string, projectSearchValue: string }>(), + SET_TREE_PICKER_COLLECTION_FILTER: ofType<{ pickerId: string, collectionFilterValue: string }>(), + SET_TREE_PICKER_LOAD_PARAMS: ofType<{ pickerId: string, params: LoadProjectParams }>(), +}); + +export type TreePickerSearchAction = UnionOf; + export const getProjectsTreePickerIds = (pickerId: string) => ({ home: `${pickerId}_home`, shared: `${pickerId}_shared`, @@ -93,10 +110,10 @@ export const receiveTreePickerData = (params: ReceiveTreePickerDataParams) nodes: data.map(item => initTreeNode(extractNodeData(item))), pickerId, })); - dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id, pickerId })); + dispatch(treePickerActions.EXPAND_TREE_PICKER_NODE({ id, pickerId })); }; -interface LoadProjectParams { +interface LoadProjectParamsWithId extends LoadProjectParams { id: string; pickerId: string; includeCollections?: boolean; @@ -105,20 +122,28 @@ interface LoadProjectParams { loadShared?: boolean; options?: { showOnlyOwned: boolean; showOnlyWritable: boolean; }; } -export const loadProject = (params: LoadProjectParams) => - async (dispatch: Dispatch, _: () => RootState, services: ServiceRepository) => { + +export const loadProject = (params: LoadProjectParamsWithId) => + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const { id, pickerId, includeCollections = false, includeFiles = false, includeFilterGroups = false, loadShared = false, options } = params; dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id, pickerId })); - const filters = pipe( + let filterB = pipe( (fb: FilterBuilder) => includeCollections ? fb.addIsA('uuid', [ResourceKind.PROJECT, ResourceKind.COLLECTION]) : fb.addIsA('uuid', [ResourceKind.PROJECT]), fb => fb.addNotIn("collections.properties.type", ["intermediate", "log"]), - fb => fb.getFilters(), )(new FilterBuilder()); + const state = getState(); + + if (state.treePickerSearch.collectionFilterValues[pickerId]) { + filterB = filterB.addILike('collections.name', state.treePickerSearch.collectionFilterValues[pickerId]); + } + + const filters = filterB.getFilters(); + const { items, itemsAvailable } = await services.groupsService.contents(loadShared ? '' : id, { filters, excludeHomeProject: loadShared || undefined, limit: 1000 }); if (itemsAvailable > 1000) { diff --git a/src/store/tree-picker/tree-picker-reducer.ts b/src/store/tree-picker/tree-picker-reducer.ts index 349240eaf4..d4b710c973 100644 --- a/src/store/tree-picker/tree-picker-reducer.ts +++ b/src/store/tree-picker/tree-picker-reducer.ts @@ -2,13 +2,15 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { createTree, TreeNode, setNode, Tree, TreeNodeStatus, setNodeStatus, expandNode, deactivateNode, selectNodes, deselectNodes } from 'models/tree'; +import { + createTree, TreeNode, setNode, Tree, TreeNodeStatus, setNodeStatus, + expandNode, deactivateNode, selectNodes, deselectNodes, + activateNode, getNode, toggleNodeCollapse, toggleNodeSelection, appendSubtree +} from 'models/tree'; import { TreePicker } from "./tree-picker"; -import { treePickerActions, TreePickerAction } from "./tree-picker-actions"; +import { treePickerActions, treePickerSearchActions, TreePickerAction, TreePickerSearchAction, LoadProjectParams } from "./tree-picker-actions"; import { compose } from "redux"; -import { activateNode, getNode, toggleNodeCollapse, toggleNodeSelection } from 'models/tree'; import { pipe } from 'lodash/fp'; -import { appendSubtree } from 'models/tree'; export const treePickerReducer = (state: TreePicker = {}, action: TreePickerAction) => treePickerActions.match(action, { @@ -18,12 +20,15 @@ export const treePickerReducer = (state: TreePicker = {}, action: TreePickerActi LOAD_TREE_PICKER_NODE_SUCCESS: ({ id, nodes, pickerId }) => updateOrCreatePicker(state, pickerId, compose(receiveNodes(nodes)(id), setNodeStatus(id)(TreeNodeStatus.LOADED))), - APPEND_TREE_PICKER_NODE_SUBTREE: ({ id, subtree, pickerId}) => + APPEND_TREE_PICKER_NODE_SUBTREE: ({ id, subtree, pickerId }) => updateOrCreatePicker(state, pickerId, compose(appendSubtree(id, subtree), setNodeStatus(id)(TreeNodeStatus.LOADED))), TOGGLE_TREE_PICKER_NODE_COLLAPSE: ({ id, pickerId }) => updateOrCreatePicker(state, pickerId, toggleNodeCollapse(id)), + EXPAND_TREE_PICKER_NODE: ({ id, pickerId }) => + updateOrCreatePicker(state, pickerId, expandNode(id)), + ACTIVATE_TREE_PICKER_NODE: ({ id, pickerId, relatedTreePickers = [] }) => pipe( () => relatedTreePickers.reduce( @@ -70,3 +75,26 @@ const receiveNodes = (nodes: Array>) => (parent: string) => (stat return setNode({ ...node, parent })(tree); }, newState); }; + +interface TreePickerSearch { + projectSearchValues: { [pickerId: string]: string }; + collectionFilterValues: { [pickerId: string]: string }; + loadProjectParams: { [pickerId: string]: LoadProjectParams }; +} + +export const treePickerSearchReducer = (state: TreePickerSearch = { projectSearchValues: {}, collectionFilterValues: {}, loadProjectParams: {} }, action: TreePickerSearchAction) => + treePickerSearchActions.match(action, { + SET_TREE_PICKER_PROJECT_SEARCH: ({ pickerId, projectSearchValue }) => ({ + ...state, projectSearchValues: { ...state.projectSearchValues, [pickerId]: projectSearchValue } + }), + + SET_TREE_PICKER_COLLECTION_FILTER: ({ pickerId, collectionFilterValue }) => ({ + ...state, collectionFilterValues: { ...state.collectionFilterValues, [pickerId]: collectionFilterValue } + }), + + SET_TREE_PICKER_LOAD_PARAMS: ({ pickerId, params }) => ({ + ...state, loadProjectParams: { ...state.loadProjectParams, [pickerId]: params } + }), + + default: () => state + }); diff --git a/src/views-components/form-fields/search-bar-form-fields.tsx b/src/views-components/form-fields/search-bar-form-fields.tsx index 777fa824df..0a6b8795de 100644 --- a/src/views-components/form-fields/search-bar-form-fields.tsx +++ b/src/views-components/form-fields/search-bar-form-fields.tsx @@ -12,7 +12,7 @@ import { HomeTreePicker } from 'views-components/projects-tree-picker/home-tree- import { SEARCH_BAR_ADVANCED_FORM_PICKER_ID } from 'store/search-bar/search-bar-actions'; import { SearchBarAdvancedPropertiesView } from 'views-components/search-bar/search-bar-advanced-properties-view'; import { TreeItem } from "components/tree/tree"; -import { ProjectsTreePickerItem } from "views-components/projects-tree-picker/generic-projects-tree-picker"; +import { ProjectsTreePickerItem } from "store/tree-picker/tree-picker-middleware"; import { PropertyKeyField, } from 'views-components/resource-properties-form/property-key-field'; import { PropertyValueField } from 'views-components/resource-properties-form/property-value-field'; import { connect } from "react-redux"; @@ -36,7 +36,7 @@ interface SearchBarClusterFieldProps { export const SearchBarClusterField = connect( (state: RootState) => ({ - clusters: [{key: '', value: 'Any'}].concat( + clusters: [{ key: '', value: 'Any' }].concat( state.auth.sessions .filter(s => s.loggedIn) .map(s => ({ @@ -46,7 +46,7 @@ export const SearchBarClusterField = connect( }))((props: SearchBarClusterFieldProps) => + items={props.clusters} /> ); export const SearchBarProjectField = () => diff --git a/src/views-components/projects-tree-picker/generic-projects-tree-picker.tsx b/src/views-components/projects-tree-picker/generic-projects-tree-picker.tsx index dd6e63bfc8..11b51caa88 100644 --- a/src/views-components/projects-tree-picker/generic-projects-tree-picker.tsx +++ b/src/views-components/projects-tree-picker/generic-projects-tree-picker.tsx @@ -12,18 +12,12 @@ import { treePickerActions } from "store/tree-picker/tree-picker-actions"; import { ListItemTextIcon } from "components/list-item-text-icon/list-item-text-icon"; import { ProjectIcon, FileInputIcon, IconType, CollectionIcon } from 'components/icon/icon'; import { loadProject, loadCollection } from 'store/tree-picker/tree-picker-actions'; -import { GroupContentsResource } from 'services/groups-service/groups-service'; -import { CollectionDirectory, CollectionFile, CollectionFileType } from 'models/collection-file'; +import { ProjectsTreePickerItem, ProjectsTreePickerRootItem } from 'store/tree-picker/tree-picker-middleware'; import { ResourceKind } from 'models/resource'; import { TreePickerProps, TreePicker } from "views-components/tree-picker/tree-picker"; -import { LinkResource } from "models/link"; +import { CollectionFileType } from 'models/collection-file'; -export interface ProjectsTreePickerRootItem { - id: string; - name: string; -} -export type ProjectsTreePickerItem = ProjectsTreePickerRootItem | GroupContentsResource | CollectionDirectory | CollectionFile | LinkResource; type PickedTreePickerProps = Pick, 'onContextMenu' | 'toggleItemActive' | 'toggleItemOpen' | 'toggleItemSelection'>; export interface ProjectsTreePickerDataProps { @@ -35,7 +29,7 @@ export interface ProjectsTreePickerDataProps { disableActivation?: string[]; options?: { showOnlyOwned: boolean, showOnlyWritable: boolean }; loadRootItem: (item: TreeItem, pickerId: string, - includeCollections?: boolean, includeFiles?: boolean, options?: { showOnlyOwned: boolean, showOnlyWritable: boolean }) => void; + includeCollections?: boolean, includeFiles?: boolean, options?: { showOnlyOwned: boolean, showOnlyWritable: boolean }) => void; } export type ProjectsTreePickerProps = ProjectsTreePickerDataProps & Partial; diff --git a/src/views-components/projects-tree-picker/projects-tree-picker.tsx b/src/views-components/projects-tree-picker/projects-tree-picker.tsx index c4a6e3ab29..bddde89203 100644 --- a/src/views-components/projects-tree-picker/projects-tree-picker.tsx +++ b/src/views-components/projects-tree-picker/projects-tree-picker.tsx @@ -3,14 +3,18 @@ // SPDX-License-Identifier: AGPL-3.0 import React from 'react'; +import { Dispatch } from 'redux'; +import { connect } from 'react-redux'; +import { RootState } from 'store/store'; import { values, pipe } from 'lodash/fp'; import { HomeTreePicker } from 'views-components/projects-tree-picker/home-tree-picker'; import { SharedTreePicker } from 'views-components/projects-tree-picker/shared-tree-picker'; import { FavoritesTreePicker } from 'views-components/projects-tree-picker/favorites-tree-picker'; -import { getProjectsTreePickerIds, SHARED_PROJECT_ID, FAVORITES_PROJECT_ID } from 'store/tree-picker/tree-picker-actions'; +import { getProjectsTreePickerIds, treePickerSearchActions, SHARED_PROJECT_ID, FAVORITES_PROJECT_ID } from 'store/tree-picker/tree-picker-actions'; import { TreeItem } from 'components/tree/tree'; -import { ProjectsTreePickerItem } from './generic-projects-tree-picker'; +import { ProjectsTreePickerItem } from 'store/tree-picker/tree-picker-middleware'; import { PublicFavoritesTreePicker } from './public-favorites-tree-picker'; +import { SearchInput } from 'components/search-input/search-input'; export interface ProjectsTreePickerProps { pickerId: string; @@ -22,15 +26,60 @@ export interface ProjectsTreePickerProps { toggleItemSelection?: (event: React.MouseEvent, item: TreeItem, pickerId: string) => void; } -export const ProjectsTreePicker = ({ pickerId, ...props }: ProjectsTreePickerProps) => { +interface ProjectsTreePickerSearchProps { + projectSearch: string; + collectionFilter: string; +} + +interface ProjectsTreePickerActionProps { + onProjectSearch: (value: string) => void; + onCollectionFilter: (value: string) => void; +} + +type ProjectsTreePickerCombinedProps = ProjectsTreePickerProps & ProjectsTreePickerSearchProps & ProjectsTreePickerActionProps; + +const mapStateToProps = (state: RootState, props: ProjectsTreePickerProps): ProjectsTreePickerSearchProps => ({ + projectSearch: "", + collectionFilter: "", + ...props +}); + +const mapDispatchToProps = (dispatch: Dispatch, props: ProjectsTreePickerProps): ProjectsTreePickerActionProps => { + const { home, shared, favorites, publicFavorites } = getProjectsTreePickerIds(props.pickerId); + const params = { + includeCollections: props.includeCollections, + includeFiles: props.includeFiles, + options: props.options + }; + dispatch(treePickerSearchActions.SET_TREE_PICKER_LOAD_PARAMS({ pickerId: home, params })); + dispatch(treePickerSearchActions.SET_TREE_PICKER_LOAD_PARAMS({ pickerId: shared, params })); + dispatch(treePickerSearchActions.SET_TREE_PICKER_LOAD_PARAMS({ pickerId: favorites, params })); + dispatch(treePickerSearchActions.SET_TREE_PICKER_LOAD_PARAMS({ pickerId: publicFavorites, params })); + + return { + onProjectSearch: (projectSearchValue: string) => dispatch(treePickerSearchActions.SET_TREE_PICKER_PROJECT_SEARCH({ pickerId: props.pickerId, projectSearchValue })), + onCollectionFilter: (collectionFilterValue: string) => { + dispatch(treePickerSearchActions.SET_TREE_PICKER_COLLECTION_FILTER({ pickerId: home, collectionFilterValue })); + dispatch(treePickerSearchActions.SET_TREE_PICKER_COLLECTION_FILTER({ pickerId: shared, collectionFilterValue })); + dispatch(treePickerSearchActions.SET_TREE_PICKER_COLLECTION_FILTER({ pickerId: favorites, collectionFilterValue })); + dispatch(treePickerSearchActions.SET_TREE_PICKER_COLLECTION_FILTER({ pickerId: publicFavorites, collectionFilterValue })); + } + } +}; + +export const ProjectsTreePicker = connect(mapStateToProps, mapDispatchToProps)(({ pickerId, onProjectSearch, onCollectionFilter, ...props }: ProjectsTreePickerCombinedProps) => { const { home, shared, favorites, publicFavorites } = getProjectsTreePickerIds(pickerId); const relatedTreePickers = getRelatedTreePickers(pickerId); const p = { ...props, relatedTreePickers, - disableActivation + disableActivation, }; return
+ + + +
@@ -44,7 +93,7 @@ export const ProjectsTreePicker = ({ pickerId, ...props }: ProjectsTreePickerPro
; -}; +}); const getRelatedTreePickers = pipe(getProjectsTreePickerIds, values); const disableActivation = [SHARED_PROJECT_ID, FAVORITES_PROJECT_ID]; diff --git a/src/views-components/projects-tree-picker/tree-picker-field.tsx b/src/views-components/projects-tree-picker/tree-picker-field.tsx index e5fecf9799..d6ebb8ec07 100644 --- a/src/views-components/projects-tree-picker/tree-picker-field.tsx +++ b/src/views-components/projects-tree-picker/tree-picker-field.tsx @@ -7,7 +7,7 @@ import { Typography } from "@material-ui/core"; import { TreeItem } from "components/tree/tree"; import { WrappedFieldProps } from 'redux-form'; import { ProjectsTreePicker } from 'views-components/projects-tree-picker/projects-tree-picker'; -import { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker'; +import { ProjectsTreePickerItem } from 'store/tree-picker/tree-picker-middleware'; import { PickerIdProp } from 'store/tree-picker/picker-id'; export const ProjectTreePickerField = (props: WrappedFieldProps & PickerIdProp) => @@ -37,4 +37,4 @@ export const CollectionTreePickerField = (props: WrappedFieldProps & PickerIdPro {props.meta.error} } - ; \ No newline at end of file + ; diff --git a/src/views/run-process-panel/inputs/directory-array-input.tsx b/src/views/run-process-panel/inputs/directory-array-input.tsx index 1b04718df8..72dba752d6 100644 --- a/src/views/run-process-panel/inputs/directory-array-input.tsx +++ b/src/views/run-process-panel/inputs/directory-array-input.tsx @@ -16,7 +16,7 @@ import { GenericInputProps, GenericInput } from './generic-input'; import { ProjectsTreePicker } from 'views-components/projects-tree-picker/projects-tree-picker'; import { connect, DispatchProp } from 'react-redux'; import { initProjectsTreePicker, getSelectedNodes, treePickerActions, getProjectsTreePickerIds, getAllNodes } from 'store/tree-picker/tree-picker-actions'; -import { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker'; +import { ProjectsTreePickerItem } from 'store/tree-picker/tree-picker-middleware'; import { createSelector, createStructuredSelector } from 'reselect'; import { ChipsInput } from 'components/chips-input/chips-input'; import { identity, values, noop } from 'lodash'; diff --git a/src/views/run-process-panel/inputs/directory-input.tsx b/src/views/run-process-panel/inputs/directory-input.tsx index ab1cf9d1af..2120de9960 100644 --- a/src/views/run-process-panel/inputs/directory-input.tsx +++ b/src/views/run-process-panel/inputs/directory-input.tsx @@ -17,7 +17,7 @@ import { GenericInputProps, GenericInput } from './generic-input'; import { ProjectsTreePicker } from 'views-components/projects-tree-picker/projects-tree-picker'; import { initProjectsTreePicker } from 'store/tree-picker/tree-picker-actions'; import { TreeItem } from 'components/tree/tree'; -import { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker'; +import { ProjectsTreePickerItem } from 'store/tree-picker/tree-picker-middleware'; import { CollectionResource } from 'models/collection'; import { ResourceKind } from 'models/resource'; import { ERROR_MESSAGE } from 'validators/require'; @@ -141,5 +141,3 @@ const DirectoryInputComponent = connect()( } }); - - diff --git a/src/views/run-process-panel/inputs/file-array-input.tsx b/src/views/run-process-panel/inputs/file-array-input.tsx index ddb558b9e5..712f6418df 100644 --- a/src/views/run-process-panel/inputs/file-array-input.tsx +++ b/src/views/run-process-panel/inputs/file-array-input.tsx @@ -16,7 +16,7 @@ import { GenericInputProps, GenericInput } from './generic-input'; import { ProjectsTreePicker } from 'views-components/projects-tree-picker/projects-tree-picker'; import { connect, DispatchProp } from 'react-redux'; import { initProjectsTreePicker, getSelectedNodes, treePickerActions, getProjectsTreePickerIds } from 'store/tree-picker/tree-picker-actions'; -import { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker'; +import { ProjectsTreePickerItem } from 'store/tree-picker/tree-picker-middleware'; import { CollectionFile, CollectionFileType } from 'models/collection-file'; import { createSelector, createStructuredSelector } from 'reselect'; import { ChipsInput } from 'components/chips-input/chips-input'; diff --git a/src/views/run-process-panel/inputs/file-input.tsx b/src/views/run-process-panel/inputs/file-input.tsx index a56d45f854..099a81289c 100644 --- a/src/views/run-process-panel/inputs/file-input.tsx +++ b/src/views/run-process-panel/inputs/file-input.tsx @@ -18,7 +18,7 @@ import { ProjectsTreePicker } from 'views-components/projects-tree-picker/projec import { connect, DispatchProp } from 'react-redux'; import { initProjectsTreePicker } from 'store/tree-picker/tree-picker-actions'; import { TreeItem } from 'components/tree/tree'; -import { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker'; +import { ProjectsTreePickerItem } from 'store/tree-picker/tree-picker-middleware'; import { CollectionFile, CollectionFileType } from 'models/collection-file'; export interface FileInputProps { @@ -141,5 +141,3 @@ const FileInputComponent = connect()( } }); - - diff --git a/src/views/run-process-panel/inputs/project-input.tsx b/src/views/run-process-panel/inputs/project-input.tsx index 0c962ed8a3..9cf16c31e7 100644 --- a/src/views/run-process-panel/inputs/project-input.tsx +++ b/src/views/run-process-panel/inputs/project-input.tsx @@ -13,7 +13,7 @@ import { GenericInput, GenericInputProps } from './generic-input'; import { ProjectsTreePicker } from 'views-components/projects-tree-picker/projects-tree-picker'; import { initProjectsTreePicker } from 'store/tree-picker/tree-picker-actions'; import { TreeItem } from 'components/tree/tree'; -import { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker'; +import { ProjectsTreePickerItem } from 'store/tree-picker/tree-picker-middleware'; import { ProjectResource } from 'models/project'; import { ResourceKind } from 'models/resource'; import { RootState } from 'store/store';