cr changes
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Fri, 17 Aug 2018 14:16:29 +0000 (16:16 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Fri, 17 Aug 2018 14:16:29 +0000 (16:16 +0200)
Feature #13902

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

12 files changed:
src/components/move-to-dialog/move-to-dialog.tsx
src/components/tree/tree.tsx
src/index.tsx
src/store/tree-picker/tree-picker-actions.ts
src/store/tree-picker/tree-picker-reducer.test.ts
src/store/tree-picker/tree-picker-reducer.ts
src/views-components/context-menu/action-sets/collection-action-set.ts
src/views-components/context-menu/action-sets/collection-resource-action-set.ts
src/views-components/context-menu/action-sets/project-action-set.ts
src/views-components/move-to-dialog/move-to-dialog.tsx
src/views-components/project-tree-picker/project-tree-picker.tsx
src/views-components/tree-picker/tree-picker.ts

index 51f5fbf6df45196abf5851b3613e8f76fc511714..2bfc2c3d6676f87761b2a5874048acb7591c95a5 100644 (file)
@@ -10,7 +10,7 @@ import { WithDialogProps } from "~/store/dialog/with-dialog";
 import { ProjectTreePicker } from "~/views-components/project-tree-picker/project-tree-picker";
 import { MOVE_TO_VALIDATION } from "~/validators/validators";
 
-export const MoveTo = (props: WithDialogProps<string> & InjectedFormProps<{ name: string }>) =>
+export const MoveToDialog = (props: WithDialogProps<string> & InjectedFormProps<{ name: string }>) =>
     <form>
         <Dialog open={props.open}
             disableBackdropClick={true}
index 06d7cbbfc3110c2cf998dab1e72c8bacb944ace1..263249588b45f5a5cbcd47caa2b231c2500ca315 100644 (file)
@@ -110,9 +110,7 @@ export const Tree = withStyles(styles)(
                             <i onClick={() => this.props.toggleItemOpen(it.id, it.status)}
                                 className={toggableIconContainer}>
                                 <ListItemIcon className={this.getToggableIconClassNames(it.open, it.active)}>
-                                    {it.status === TreeItemStatus.PENDING 
-                                    || (it.status === TreeItemStatus.LOADED && !it.items)
-                                    || (it.status === TreeItemStatus.LOADED && it.items && it.items.length === 0) ? <span /> : <SidePanelRightArrowIcon />}
+                                    {this.getProperArrowAnimation(it.status, it.items!)}
                                 </ListItemIcon>
                             </i>
                             {this.props.showSelection &&
@@ -142,6 +140,10 @@ export const Tree = withStyles(styles)(
             </List>;
         }
 
+        getProperArrowAnimation = (status: string, items: Array<TreeItem<T>>) => {
+            return status === TreeItemStatus.PENDING || (status === TreeItemStatus.LOADED && !items) ? <span /> : <SidePanelRightArrowIcon />;
+        }
+
         getToggableIconClassNames = (isOpen?: boolean, isActive?: boolean) => {
             const { iconOpen, iconClose, active, toggableIcon } = this.props.classes;
             return classnames(toggableIcon, {
index 461904c43bdad9eb02a71fe95eaebbff1e931de9..faaf6b81ec8cbac7df5bbb89d49b09e3ed9990aa 100644 (file)
@@ -27,7 +27,7 @@ import { collectionFilesActionSet } from './views-components/context-menu/action
 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 './store/tree-picker/tree-picker-actions';
+import { initPickerProjectTree } from './views-components/project-tree-picker/project-tree-picker';
 
 addMenuActionSet(ContextMenuKind.ROOT_PROJECT, rootProjectActionSet);
 addMenuActionSet(ContextMenuKind.PROJECT, projectActionSet);
index 5b29c4c2b5168616a6a80f70f6709c8ab328dc3b..f3c358168be26b0c40947e243abc2209ca070ea7 100644 (file)
@@ -5,48 +5,15 @@
 import { default as unionize, ofType, UnionOf } from "unionize";
 
 import { TreePickerNode } from "./tree-picker";
-import { receiveTreePickerData, TreePickerKind } from "../../views-components/project-tree-picker/project-tree-picker";
-import { mockProjectResource } from "../../models/test-utils";
-import { Dispatch } from "redux";
-import { RootState } from "../store";
-import { ServiceRepository } from "../../services/services";
 
 export const treePickerActions = unionize({
-    LOAD_TREE_PICKER_NODE: ofType<{ id: string, pickerId: string }>(),
-    LOAD_TREE_PICKER_NODE_SUCCESS: ofType<{ id: string, nodes: Array<TreePickerNode>, pickerId: string }>(),
-    TOGGLE_TREE_PICKER_NODE_COLLAPSE: ofType<{ id: string, pickerId: string }>(),
-    TOGGLE_TREE_PICKER_NODE_SELECT: ofType<{ id: string, pickerId: string }>()
+    LOAD_TREE_PICKER_NODE: ofType<{ id: string, pickerKind: string }>(),
+    LOAD_TREE_PICKER_NODE_SUCCESS: ofType<{ id: string, nodes: Array<TreePickerNode>, pickerKind: string }>(),
+    TOGGLE_TREE_PICKER_NODE_COLLAPSE: ofType<{ id: string, pickerKind: string }>(),
+    TOGGLE_TREE_PICKER_NODE_SELECT: ofType<{ id: string, pickerKind: string }>()
 }, {
         tag: 'type',
         value: 'payload'
     });
 
-export const initPickerProjectTree = () => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-    const uuid = services.authService.getUuid();
-
-    dispatch<any>(getPickerTreeProjects(uuid));
-    dispatch<any>(getSharedWithMeProjectsPickerTree(uuid));
-    dispatch<any>(getFavoritesProjectsPickerTree(uuid));
-};
-
-const getPickerTreeProjects = (uuid: string = '') => {
-    return getProjectsPickerTree(uuid, TreePickerKind.PROJECTS);
-};
-
-const getSharedWithMeProjectsPickerTree = (uuid: string = '') => {
-    return getProjectsPickerTree(uuid, TreePickerKind.SHARED_WITH_ME);
-};
-
-const getFavoritesProjectsPickerTree = (uuid: string = '') => {
-    return getProjectsPickerTree(uuid, TreePickerKind.FAVORITES);
-};
-
-const getProjectsPickerTree = (uuid: string, kind: string) => {
-    return receiveTreePickerData(
-        '',
-        [mockProjectResource({ uuid, name: kind })],
-        kind
-    );
-};
-
 export type TreePickerAction = UnionOf<typeof treePickerActions>;
index 2432b8429ec375137cccdcc12c78f1093c86761a..62367d570fb92f2d4d8799693b6ac124ea752fe8 100644 (file)
@@ -11,7 +11,7 @@ import { TreeItemStatus } from "~/components/tree/tree";
 describe('TreePickerReducer', () => {
     it('LOAD_TREE_PICKER_NODE - initial state', () => {
         const tree = createTree<TreePickerNode>();
-        const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE({ id: '1', pickerId: "projects" }));
+        const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE({ id: '1', pickerKind: "projects" }));
         expect(newState).toEqual({ 'projects': tree });
     });
 
@@ -20,8 +20,8 @@ describe('TreePickerReducer', () => {
         const [newState] = [{
             projects: createTree<TreePickerNode>()
         }]
-            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
-            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE({ id: '1', pickerId: "projects" })));
+            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerKind: "projects" })))
+            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE({ id: '1', pickerKind: "projects" })));
 
         expect(getNodeValue('1')(newState.projects)).toEqual({
             ...createTreePickerNode({ id: '1', value: '1' }),
@@ -31,7 +31,7 @@ describe('TreePickerReducer', () => {
 
     it('LOAD_TREE_PICKER_NODE_SUCCESS - initial state', () => {
         const subNode = createTreePickerNode({ id: '1.1', value: '1.1' });
-        const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [subNode], pickerId: "projects" }));
+        const newState = treePickerReducer({}, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [subNode], pickerKind: "projects" }));
         expect(getNodeChildren('')(newState.projects)).toEqual(['1.1']);
     });
 
@@ -41,8 +41,8 @@ describe('TreePickerReducer', () => {
         const [newState] = [{
             projects: createTree<TreePickerNode>()
         }]
-            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
-            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '1', nodes: [subNode], pickerId: "projects" })));
+            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerKind: "projects" })))
+            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '1', nodes: [subNode], pickerKind: "projects" })));
         expect(getNodeChildren('1')(newState.projects)).toEqual(['1.1']);
         expect(getNodeValue('1')(newState.projects)).toEqual({
             ...createTreePickerNode({ id: '1', value: '1' }),
@@ -55,8 +55,8 @@ describe('TreePickerReducer', () => {
         const [newState] = [{
             projects: createTree<TreePickerNode>()
         }]
-            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
-            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })));
+            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerKind: "projects" })))
+            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerKind: "projects" })));
         expect(getNodeValue('1')(newState.projects)).toEqual({
             ...createTreePickerNode({ id: '1', value: '1' }),
             collapsed: false
@@ -68,9 +68,9 @@ describe('TreePickerReducer', () => {
         const [newState] = [{
             projects: createTree<TreePickerNode>()
         }]
-            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
-            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })))
-            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerId: "projects" })));
+            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerKind: "projects" })))
+            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerKind: "projects" })))
+            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id: '1', pickerKind: "projects" })));
         expect(getNodeValue('1')(newState.projects)).toEqual({
             ...createTreePickerNode({ id: '1', value: '1' }),
             collapsed: true
@@ -82,8 +82,8 @@ describe('TreePickerReducer', () => {
         const [newState] = [{
             projects: createTree<TreePickerNode>()
         }]
-            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
-            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerId: "projects" })));
+            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerKind: "projects" })))
+            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerKind: "projects" })));
         expect(getNodeValue('1')(newState.projects)).toEqual({
             ...createTreePickerNode({ id: '1', value: '1' }),
             selected: true
@@ -95,9 +95,9 @@ describe('TreePickerReducer', () => {
         const [newState] = [{
             projects: createTree<TreePickerNode>()
         }]
-            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerId: "projects" })))
-            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerId: "projects" })))
-            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerId: "projects" })));
+            .map(state => treePickerReducer(state, treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({ id: '', nodes: [node], pickerKind: "projects" })))
+            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerKind: "projects" })))
+            .map(state => treePickerReducer(state, treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '1', pickerKind: "projects" })));
         expect(getNodeValue('1')(newState.projects)).toEqual({
             ...createTreePickerNode({ id: '1', value: '1' }),
             selected: false
index cf67aa7600a011a7f365d1c35d4f17fdca963dd1..a2d7ef13526658282b6e4128e50d496eeb5f97c7 100644 (file)
@@ -9,27 +9,27 @@ import { TreeItemStatus } from "~/components/tree/tree";
 
 export const treePickerReducer = (state: TreePicker = {}, action: TreePickerAction) =>
     treePickerActions.match(action, {
-        LOAD_TREE_PICKER_NODE: ({ id, pickerId }) => {
-            const picker = state[pickerId] || createTree();
+        LOAD_TREE_PICKER_NODE: ({ id, pickerKind }) => {
+            const picker = state[pickerKind] || createTree();
             const updatedPicker = setNodeValueWith(setPending)(id)(picker);
-            return { ...state, [pickerId]: updatedPicker };
+            return { ...state, [pickerKind]: updatedPicker };
         },
-        LOAD_TREE_PICKER_NODE_SUCCESS: ({ id, nodes, pickerId }) => {
-            const picker = state[pickerId] || createTree();
+        LOAD_TREE_PICKER_NODE_SUCCESS: ({ id, nodes, pickerKind }) => {
+            const picker = state[pickerKind] || createTree();
             const [updatedPicker] = [picker]
                 .map(receiveNodes(nodes)(id))
                 .map(setNodeValueWith(setLoaded)(id));
-            return { ...state, [pickerId]: updatedPicker };
+            return { ...state, [pickerKind]: updatedPicker };
         },
-        TOGGLE_TREE_PICKER_NODE_COLLAPSE: ({ id, pickerId }) => {
-            const picker = state[pickerId] || createTree();
+        TOGGLE_TREE_PICKER_NODE_COLLAPSE: ({ id, pickerKind }) => {
+            const picker = state[pickerKind] || createTree();
             const updatedPicker = setNodeValueWith(toggleCollapse)(id)(picker);
-            return { ...state, [pickerId]: updatedPicker };
+            return { ...state, [pickerKind]: updatedPicker };
         },
-        TOGGLE_TREE_PICKER_NODE_SELECT: ({ id, pickerId }) => {
-            const picker = state[pickerId] || createTree();
+        TOGGLE_TREE_PICKER_NODE_SELECT: ({ id, pickerKind }) => {
+            const picker = state[pickerKind] || createTree();
             const updatedPicker = mapTreeValues(toggleSelect(id))(picker);
-            return { ...state, [pickerId]: updatedPicker };
+            return { ...state, [pickerKind]: updatedPicker };
         },
         default: () => state
     });
index e6dd686af67022757de31660c5b93c8761387f67..9c07fb0551eab71995d7f488f74d1a6292af9128 100644 (file)
@@ -28,9 +28,7 @@ export const collectionActionSet: ContextMenuActionSet = [[
     {
         icon: MoveToIcon,
         name: "Move to",
-        execute: (dispatch) => {
-            dispatch<any>(openMoveToDialog());
-        }
+        execute: dispatch => dispatch<any>(openMoveToDialog())
     },
     {
         component: ToggleFavoriteAction,
index fd2f8d752579cd12ca33c09bc9462290e89f3d25..337ca2ff95fd261864476a8da72239442e4f718b 100644 (file)
@@ -28,9 +28,7 @@ export const collectionResourceActionSet: ContextMenuActionSet = [[
     {
         icon: MoveToIcon,
         name: "Move to",
-        execute: (dispatch) => {
-            dispatch<any>(openMoveToDialog());
-        }
+        execute: dispatch => dispatch<any>(openMoveToDialog())
     },
     {
         component: ToggleFavoriteAction,
index ca9a4f674a3b817dd1cdafae9953035db5b11d4a..efba457821db1621e1dbe51426a49cc68c155bcc 100644 (file)
@@ -41,8 +41,6 @@ export const projectActionSet: ContextMenuActionSet = [[
     {
         icon: MoveToIcon,
         name: "Move to",
-        execute: (dispatch) => {
-            dispatch<any>(openMoveToDialog());
-        }
+        execute: dispatch => dispatch<any>(openMoveToDialog())
     },
 ]];
index 21aa5159cb8ef10c88fc21234304a958f21baf1b..9c3a6bff9b2c7093e4c2c0ff7394f89803dd3c5f 100644 (file)
@@ -5,7 +5,7 @@
 import { Dispatch } from "redux";
 import { withDialog } from "../../store/dialog/with-dialog";
 import { dialogActions } from "../../store/dialog/dialog-actions";
-import { MoveTo } from "../../components/move-to-dialog/move-to-dialog";
+import { MoveToDialog } from "../../components/move-to-dialog/move-to-dialog";
 import { reduxForm, startSubmit, stopSubmit } from "redux-form";
 
 export const MOVE_TO_DIALOG = 'moveToDialog';
@@ -15,7 +15,7 @@ export const openMoveToDialog = () =>
         dispatch(dialogActions.OPEN_DIALOG({ id: MOVE_TO_DIALOG, data: {}}));
     };
 
-export const [MoveToProjectDialog] = [MoveTo]
+export const [MoveToProjectDialog] = [MoveToDialog]
     .map(withDialog(MOVE_TO_DIALOG))
     .map(reduxForm({
         form: MOVE_TO_DIALOG,
index e18af9e413b6674ed14d1ddbaeab8e8122af64a6..ddf684381a52667d99e4a9b612566070fc1ad6dc 100644 (file)
@@ -16,39 +16,40 @@ import { createTreePickerNode } from "~/store/tree-picker/tree-picker";
 import { RootState } from "~/store/store";
 import { ServiceRepository } from "~/services/services";
 import { FilterBuilder } from "~/common/api/filter-builder";
+import { mockProjectResource } from "~/models/test-utils";
 
 type ProjectTreePickerProps = Pick<TreePickerProps, 'toggleItemActive' | 'toggleItemOpen'>;
 
 const mapDispatchToProps = (dispatch: Dispatch, props: { onChange: (projectUuid: string) => void }): ProjectTreePickerProps => ({
-    toggleItemActive: (id, status, pickerId) => {
-        getNotSelectedTreePickerKind(pickerId)
-            .forEach(pickerId => dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '', pickerId })));
-        dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id, pickerId }));
+    toggleItemActive: (id, status, pickerKind) => {
+        getNotSelectedTreePickerKind(pickerKind)
+            .forEach(pickerKind => dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id: '', pickerKind })));
+        dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_SELECT({ id, pickerKind }));
 
         props.onChange(id);
     },
-    toggleItemOpen: (id, status, pickerId) => {
-        dispatch<any>(toggleItemOpen(id, status, pickerId));
+    toggleItemOpen: (id, status, pickerKind) => {
+        dispatch<any>(toggleItemOpen(id, status, pickerKind));
     }
 });
 
-const toggleItemOpen = (id: string, status: TreeItemStatus, pickerId: string) =>
+const toggleItemOpen = (id: string, status: TreeItemStatus, pickerKind: string) =>
     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
         if (status === TreeItemStatus.INITIAL) {
-            if (pickerId === TreePickerKind.PROJECTS) {
+            if (pickerKind === TreePickerKind.PROJECTS) {
                 dispatch<any>(loadProjectTreePickerProjects(id));
-            } else if (pickerId === TreePickerKind.FAVORITES) {
+            } else if (pickerKind === TreePickerKind.FAVORITES) {
                 dispatch<any>(loadFavoriteTreePickerProjects(id === services.authService.getUuid() ? '' : id));
             } else {
                 // TODO: load sharedWithMe
             }
         } else {
-            dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id, pickerId }));
+            dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id, pickerKind }));
         }
     };
 
-const getNotSelectedTreePickerKind = (pickerId: string) => {
-    return [TreePickerKind.PROJECTS, TreePickerKind.FAVORITES, TreePickerKind.SHARED_WITH_ME].filter(id => id !== pickerId);
+const getNotSelectedTreePickerKind = (pickerKind: string) => {
+    return [TreePickerKind.PROJECTS, TreePickerKind.FAVORITES, TreePickerKind.SHARED_WITH_ME].filter(id => id !== pickerKind);
 };
 
 export enum TreePickerKind {
@@ -63,9 +64,9 @@ export const ProjectTreePicker = connect(undefined, mapDispatchToProps)((props:
             Select a project
         </Typography>
         <div style={{ flexGrow: 1, overflow: 'auto' }}>
-            <TreePicker {...props} render={renderTreeItem} pickerId={TreePickerKind.PROJECTS} />
-            <TreePicker {...props} render={renderTreeItem} pickerId={TreePickerKind.SHARED_WITH_ME} />
-            <TreePicker {...props} render={renderTreeItem} pickerId={TreePickerKind.FAVORITES} />
+            <TreePicker {...props} render={renderTreeItem} pickerKind={TreePickerKind.PROJECTS} />
+            <TreePicker {...props} render={renderTreeItem} pickerKind={TreePickerKind.SHARED_WITH_ME} />
+            <TreePicker {...props} render={renderTreeItem} pickerKind={TreePickerKind.FAVORITES} />
         </div>
     </div>);
 
@@ -73,7 +74,7 @@ export const ProjectTreePicker = connect(undefined, mapDispatchToProps)((props:
 // TODO: move action creator to store directory
 export const loadProjectTreePickerProjects = (id: string) =>
     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-        dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id, pickerId: TreePickerKind.PROJECTS }));
+        dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id, pickerKind: TreePickerKind.PROJECTS }));
 
         const ownerUuid = id.length === 0 ? services.authService.getUuid() || '' : id;
 
@@ -91,12 +92,12 @@ export const loadFavoriteTreePickerProjects = (id: string) =>
         const parentId = services.authService.getUuid() || '';
 
         if (id === '') {
-            dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id: parentId, pickerId: TreePickerKind.FAVORITES }));
+            dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id: parentId, pickerKind: TreePickerKind.FAVORITES }));
             const { items } = await services.favoriteService.list(parentId);
 
             dispatch<any>(receiveTreePickerData(parentId, items as ProjectResource[], TreePickerKind.FAVORITES));
         } else {
-            dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id, pickerId: TreePickerKind.FAVORITES }));
+            dispatch(treePickerActions.LOAD_TREE_PICKER_NODE({ id, pickerKind: TreePickerKind.FAVORITES }));
             const filters = new FilterBuilder()
                 .addEqual('ownerUuid', id)
                 .getFilters();
@@ -130,14 +131,42 @@ const renderTreeItem = (item: TreeItem<ProjectResource>) =>
 
 
 // TODO: move action creator to store directory
-export const receiveTreePickerData = (id: string, projects: ProjectResource[], pickerId: string) =>
+export const receiveTreePickerData = (id: string, projects: ProjectResource[], pickerKind: string) =>
     (dispatch: Dispatch) => {
         dispatch(treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({
             id,
             nodes: projects.map(project => createTreePickerNode({ id: project.uuid, value: project })),
-            pickerId,
+            pickerKind,
         }));
 
-        dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id, pickerId }));
+        dispatch(treePickerActions.TOGGLE_TREE_PICKER_NODE_COLLAPSE({ id, pickerKind }));
     };
 
+export const initPickerProjectTree = () => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+    const uuid = services.authService.getUuid();
+
+    dispatch<any>(getPickerTreeProjects(uuid));
+    dispatch<any>(getSharedWithMeProjectsPickerTree(uuid));
+    dispatch<any>(getFavoritesProjectsPickerTree(uuid));
+};
+
+const getPickerTreeProjects = (uuid: string = '') => {
+    return getProjectsPickerTree(uuid, TreePickerKind.PROJECTS);
+};
+
+const getSharedWithMeProjectsPickerTree = (uuid: string = '') => {
+    return getProjectsPickerTree(uuid, TreePickerKind.SHARED_WITH_ME);
+};
+
+const getFavoritesProjectsPickerTree = (uuid: string = '') => {
+    return getProjectsPickerTree(uuid, TreePickerKind.FAVORITES);
+};
+
+const getProjectsPickerTree = (uuid: string, kind: string) => {
+    return receiveTreePickerData(
+        '',
+        [mockProjectResource({ uuid, name: kind })],
+        kind
+    );
+};
+
index fb05b81897574994d7aaeea638761c0c8ad0861d..73e0a99a8e20ab455e8f9ed2a472706f042d16be 100644 (file)
@@ -10,13 +10,13 @@ import { getNodeValue, getNodeChildren, Tree as Ttree, createTree } from "~/mode
 import { Dispatch } from "redux";
 
 export interface TreePickerProps {
-    pickerId: string;
-    toggleItemOpen: (id: string, status: TreeItemStatus, pickerId: string) => void;
-    toggleItemActive: (id: string, status: TreeItemStatus, pickerId: string) => void;
+    pickerKind: string;
+    toggleItemOpen: (id: string, status: TreeItemStatus, pickerKind: string) => void;
+    toggleItemActive: (id: string, status: TreeItemStatus, pickerKind: string) => void;
 }
 
 const mapStateToProps = (state: RootState, props: TreePickerProps): Pick<TreeProps<any>, 'items'> => {
-    const tree = state.treePicker[props.pickerId] || createTree();
+    const tree = state.treePicker[props.pickerKind] || createTree();
     return {
         items: getNodeChildren('')(tree)
             .map(treePickerToTreeItems(tree))
@@ -25,8 +25,8 @@ const mapStateToProps = (state: RootState, props: TreePickerProps): Pick<TreePro
 
 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)
+    toggleItemActive: (id, status) => props.toggleItemActive(id, status, props.pickerKind),
+    toggleItemOpen: (id, status) => props.toggleItemOpen(id, status, props.pickerKind)
 });
 
 export const TreePicker = connect(mapStateToProps, mapDispatchToProps)(Tree);