merge-conflicts
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Mon, 20 Aug 2018 09:25:45 +0000 (11:25 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Mon, 20 Aug 2018 09:25:45 +0000 (11:25 +0200)
Feature #13902

Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>

1  2 
src/index.tsx
src/store/data-explorer/data-explorer-reducer.test.tsx
src/store/tree-picker/tree-picker-reducer.test.ts
src/views-components/tree-picker/tree-picker.ts
src/views/workbench/workbench.tsx

diff --cc src/index.tsx
index faaf6b81ec8cbac7df5bbb89d49b09e3ed9990aa,443e76f3e62a42597d804aefd779b32b3f65ffa9..fcc02f1e73088f18b2af30d74da1c7c1647ab400
@@@ -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) => <ApiToken authService={services.authService} {...props}/>;
-         const WorkbenchComponent = (props: any) => <Workbench authService={services.authService} {...props}/>;
+         const WorkbenchComponent = (props: any) => <Workbench authService={services.authService} buildInfo={buildInfo} {...props}/>;
  
          const App = () =>
              <MuiThemeProvider theme={CustomTheme}>
index 56ea3e84b21defc8c8f71e319940be2d8ab9d8a6,0bc44ba85bf06195bb34ef88500ec807c4b99e54..d26d768a0ecd089447d587a08190ef4ebe24a45f
@@@ -26,13 -26,14 +26,14 @@@ describe('data-explorer-reducer', () =
      it('should toggle sorting', () => {
          const columns: DataColumns<any> = [{
              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,
index 946d9cfe3c7c5eee0aab0a9ecd3eadcec2a9cf55,b092d5ac2a89c80ed29b0d525bacee3790e24821..e09d12d777a485199325da74c146d76f6da375e6
@@@ -30,22 -28,22 +30,22 @@@ describe('TreePickerReducer', () => 
      });
  
      it('LOAD_TREE_PICKER_NODE_SUCCESS - initial state', () => {
 -        const tree = createTree<TreePickerNode>();
 -        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<TreePickerNode>();
 -        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<TreePickerNode>()
 +        }]
 +            .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
          });
      });
index a47599feca60ddca7bbd20f77b929261ffd0f2d0,ba9ccb916efd38d955badedae7e6a7418871d354..b90f2e420656dd1365b37869c65779830726a589
@@@ -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<TreeItem<any>>;
 +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<TreeProps<any>, '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<TreeProps<any>, 'items'> => {
 +    const tree = state.treePicker[props.pickerId] || createTree();
 +    return {
-         items: getNodeChildren('')(tree)
++        items: getNodeChildrenIds('')(tree)
 +            .map(treePickerToTreeItems(tree))
      };
  };
  
 -const mapDispatchToProps = (): Pick<TreeProps<any>, 'onContextMenu'> => ({
 +const mapDispatchToProps = (dispatch: Dispatch, props: TreePickerProps): Pick<TreeProps<any>, '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<TreePickerNode>) =>
      (id: string): TreeItem<any> => {
 -        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,
index cffae74388e7728cc7c66996973dd45bfce05f22,f23a9784ad4846ea647cb3350d0b149f0c3f2756..3e0ed55ff3d9f605fa20846af70e6de8a570d336
@@@ -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;