From: Pawel Kowalczyk Date: Mon, 20 Aug 2018 09:25:45 +0000 (+0200) Subject: merge-conflicts X-Git-Tag: 1.3.0~147^2~2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/1bd016d1f30c72353e5e3b086dd9778b74efb516 merge-conflicts Feature #13902 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- 1bd016d1f30c72353e5e3b086dd9778b74efb516 diff --cc src/index.tsx index faaf6b81,443e76f3..fcc02f1e --- a/src/index.tsx +++ b/src/index.tsx @@@ -27,8 -27,15 +27,16 @@@ import { collectionFilesActionSet } fro import { collectionFilesItemActionSet } from './views-components/context-menu/action-sets/collection-files-item-action-set'; import { collectionActionSet } from './views-components/context-menu/action-sets/collection-action-set'; import { collectionResourceActionSet } from './views-components/context-menu/action-sets/collection-resource-action-set'; +import { initPickerProjectTree } from './views-components/project-tree-picker/project-tree-picker'; + const getBuildNumber = () => "BN-" + (process.env.BUILD_NUMBER || "dev"); + const getGitCommit = () => "GIT-" + (process.env.GIT_COMMIT || "latest").substr(0, 7); + const getBuildInfo = () => getBuildNumber() + " / " + getGitCommit(); + + const buildInfo = getBuildInfo(); + + console.log(`Starting arvados [${buildInfo}]`); + addMenuActionSet(ContextMenuKind.ROOT_PROJECT, rootProjectActionSet); addMenuActionSet(ContextMenuKind.PROJECT, projectActionSet); addMenuActionSet(ContextMenuKind.RESOURCE, resourceActionSet); @@@ -46,10 -53,9 +54,10 @@@ fetchConfig( store.dispatch(initAuth()); store.dispatch(getProjectList(services.authService.getUuid())); - store.dispatch(initPickerProjectTree()); - ++ store.dispatch(initPickerProjectTree()); + const TokenComponent = (props: any) => ; - const WorkbenchComponent = (props: any) => ; + const WorkbenchComponent = (props: any) => ; const App = () => diff --cc src/store/data-explorer/data-explorer-reducer.test.tsx index 56ea3e84,0bc44ba8..d26d768a --- a/src/store/data-explorer/data-explorer-reducer.test.tsx +++ b/src/store/data-explorer/data-explorer-reducer.test.tsx @@@ -26,13 -26,14 +26,14 @@@ describe('data-explorer-reducer', () = it('should toggle sorting', () => { const columns: DataColumns = [{ name: "Column 1", + filters: [], render: jest.fn(), selected: true, - configurable: true, - sortDirection: SortDirection.ASC + sortDirection: SortDirection.ASC, - filters: [], + configurable: true }, { name: "Column 2", + filters: [], render: jest.fn(), selected: true, configurable: true, diff --cc src/store/tree-picker/tree-picker-reducer.test.ts index 946d9cfe,b092d5ac..e09d12d7 --- a/src/store/tree-picker/tree-picker-reducer.test.ts +++ b/src/store/tree-picker/tree-picker-reducer.test.ts @@@ -30,22 -28,22 +30,22 @@@ describe('TreePickerReducer', () => }); it('LOAD_TREE_PICKER_NODE_SUCCESS - initial state', () => { - const tree = createTree(); - const subNode = createTreePickerNode({ id: '1.1', value: '1.1' }); - const newTree = treePickerReducer(tree, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [subNode] })); - expect(getNodeChildrenIds('')(newTree)).toEqual(['1.1']); + const subNode = createTreePickerNode({ nodeId: '1.1', value: '1.1' }); + const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ nodeId: '', nodes: [subNode], pickerId: "projects" })); - expect(getNodeChildren('')(newState.projects)).toEqual(['1.1']); ++ expect(getNodeChildrenIds('')(newState.projects)).toEqual(['1.1']); }); it('LOAD_TREE_PICKER_NODE_SUCCESS', () => { - const tree = createTree(); - const node = createTreePickerNode({ id: '1', value: '1' }); - const subNode = createTreePickerNode({ id: '1.1', value: '1.1' }); - const [newTree] = [tree] - .map(tree => treePickerReducer(tree, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node] }))) - .map(tree => treePickerReducer(tree, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '1', nodes: [subNode] }))); - expect(getNodeChildrenIds('1')(newTree)).toEqual(['1.1']); - expect(getNodeValue('1')(newTree)).toEqual({ - ...createTreePickerNode({ id: '1', value: '1' }), + const node = createTreePickerNode({ nodeId: '1', value: '1' }); + const subNode = createTreePickerNode({ nodeId: '1.1', value: '1.1' }); + const [newState] = [{ + projects: createTree() + }] + .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ nodeId: '', nodes: [node], pickerId: "projects" }))) + .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ nodeId: '1', nodes: [subNode], pickerId: "projects" }))); - expect(getNodeChildren('1')(newState.projects)).toEqual(['1.1']); ++ expect(getNodeChildrenIds('1')(newState.projects)).toEqual(['1.1']); + expect(getNodeValue('1')(newState.projects)).toEqual({ + ...createTreePickerNode({ nodeId: '1', value: '1' }), status: TreeItemStatus.LOADED }); }); diff --cc src/views-components/tree-picker/tree-picker.ts index a47599fe,ba9ccb91..b90f2e42 --- a/src/views-components/tree-picker/tree-picker.ts +++ b/src/views-components/tree-picker/tree-picker.ts @@@ -3,38 -3,37 +3,38 @@@ // SPDX-License-Identifier: AGPL-3.0 import { connect } from "react-redux"; -import { Tree, TreeProps, TreeItem } from "~/components/tree/tree"; +import { Tree, TreeProps, TreeItem, TreeItemStatus } from "~/components/tree/tree"; import { RootState } from "~/store/store"; -import { TreePicker as TTreePicker, TreePickerNode, createTreePickerNode } from "~/store/tree-picker/tree-picker"; -import { getNodeValue, getNodeChildrenIds } from "~/models/tree"; +import { createTreePickerNode, TreePickerNode } from "~/store/tree-picker/tree-picker"; - import { getNodeValue, getNodeChildren, Tree as Ttree, createTree } from "~/models/tree"; ++import { getNodeValue, getNodeChildrenIds, Tree as Ttree, createTree } from "~/models/tree"; +import { Dispatch } from "redux"; -const memoizedMapStateToProps = () => { - let prevState: TTreePicker; - let prevTree: Array>; +export interface TreePickerProps { + pickerId: string; + toggleItemOpen: (nodeId: string, status: TreeItemStatus, pickerId: string) => void; + toggleItemActive: (nodeId: string, status: TreeItemStatus, pickerId: string) => void; +} - return (state: RootState): Pick, 'items'> => { - if (prevState !== state.treePicker) { - prevState = state.treePicker; - prevTree = getNodeChildrenIds('')(state.treePicker) - .map(treePickerToTreeItems(state.treePicker)); - } - return { - items: prevTree - }; +const mapStateToProps = (state: RootState, props: TreePickerProps): Pick, 'items'> => { + const tree = state.treePicker[props.pickerId] || createTree(); + return { - items: getNodeChildren('')(tree) ++ items: getNodeChildrenIds('')(tree) + .map(treePickerToTreeItems(tree)) }; }; -const mapDispatchToProps = (): Pick, 'onContextMenu'> => ({ +const mapDispatchToProps = (dispatch: Dispatch, props: TreePickerProps): Pick, 'onContextMenu' | 'toggleItemOpen' | 'toggleItemActive'> => ({ onContextMenu: () => { return; }, + toggleItemActive: (id, status) => props.toggleItemActive(id, status, props.pickerId), + toggleItemOpen: (id, status) => props.toggleItemOpen(id, status, props.pickerId) }); -export const TreePicker = connect(memoizedMapStateToProps(), mapDispatchToProps)(Tree); +export const TreePicker = connect(mapStateToProps, mapDispatchToProps)(Tree); -const treePickerToTreeItems = (tree: TTreePicker) => +const treePickerToTreeItems = (tree: Ttree) => (id: string): TreeItem => { - const node: TreePickerNode = getNodeValue(id)(tree) || createTreePickerNode({ id: '', value: 'InvalidNode' }); - const items = getNodeChildrenIds(node.id)(tree) + const node: TreePickerNode = getNodeValue(id)(tree) || createTreePickerNode({ nodeId: '', value: 'InvalidNode' }); - const items = getNodeChildren(node.nodeId)(tree) ++ const items = getNodeChildrenIds(node.nodeId)(tree) .map(treePickerToTreeItems(tree)); return { active: node.selected, diff --cc src/views/workbench/workbench.tsx index cffae743,f23a9784..3e0ed55f --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@@ -48,9 -47,9 +47,10 @@@ import { RenameFileDialog } from '~/vie import { FileRemoveDialog } from '~/views-components/file-remove-dialog/file-remove-dialog'; import { MultipleFilesRemoveDialog } from '~/views-components/file-remove-dialog/multiple-files-remove-dialog'; import { DialogCollectionCreateWithSelectedFile } from '~/views-components/create-collection-dialog-with-selected/create-collection-dialog-with-selected'; +import { MoveToProjectDialog } from '../../views-components/move-to-dialog/move-to-dialog'; import { COLLECTION_CREATE_DIALOG } from '~/views-components/dialog-create/dialog-collection-create'; import { PROJECT_CREATE_DIALOG } from '~/views-components/dialog-create/dialog-project-create'; + import { UploadCollectionFilesDialog } from '~/views-components/upload-collection-files-dialog/upload-collection-files-dialog'; const DRAWER_WITDH = 240; const APP_BAR_HEIGHT = 100;