refactor
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Fri, 13 Jul 2018 09:35:08 +0000 (11:35 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Fri, 13 Jul 2018 09:35:08 +0000 (11:35 +0200)
Feature #13796

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

1  2 
src/components/breadcrumbs/breadcrumbs.tsx
src/views-components/create-project-dialog/create-project-dialog.tsx
src/views-components/dialog-create/dialog-project-create.tsx
src/views-components/main-app-bar/main-app-bar.test.tsx
src/views-components/project-list/project-list.tsx
src/views-components/project-tree/project-tree.test.tsx
src/views/workbench/workbench.tsx

index 4868e137f9f6b11065bdd2dbfaf3d3ff4ac642da,4868e137f9f6b11065bdd2dbfaf3d3ff4ac642da..cfcfd407d99b40aec6c53255864928d5fd0d2a45
@@@ -38,9 -38,9 +38,7 @@@ const Breadcrumbs: React.SFC<Breadcrumb
                                  </Typography>
                              </Button>
                          </Tooltip>
--                        {
--                            !isLastItem && <ChevronRightIcon color="inherit" className={classes.item} />
--                        }
++                        {!isLastItem && <ChevronRightIcon color="inherit" className={classes.item} />}
                      </React.Fragment>
                  );
              })
@@@ -51,7 -51,7 +49,6 @@@
  type CssRules = "item" | "currentItem" | "label";
  
  const styles: StyleRulesCallback<CssRules> = theme => {
--    const { unit } = theme.spacing;
      return {
          item: {
              opacity: 0.6
index 701ceee107d3e2fcf8d5e22a8f1861126d732ada,701ceee107d3e2fcf8d5e22a8f1861126d732ada..6b69b79301faf7fd7ac05ae958b46550f1340db0
@@@ -3,7 -3,7 +3,7 @@@
  // SPDX-License-Identifier: AGPL-3.0
  
  import { connect } from "react-redux";
--import { Dispatch } from "../../../node_modules/redux";
++import { Dispatch } from "redux";
  import { RootState } from "../../store/store";
  import DialogProjectCreate from "../dialog-create/dialog-project-create";
  import actions, { createProject, getProjectList } from "../../store/project/project-action";
index ef07ea2f4a7d8608bbd2aa523018dca88c8033d8,ef07ea2f4a7d8608bbd2aa523018dca88c8033d8..89deea6f86d8bfc94a7c36859c15a30b73c1faa8
@@@ -87,13 -87,13 +87,13 @@@ class DialogProjectCreate extends React
      });
    }
  
--  handleProjectName(e: any) {
++  handleProjectName(e: React.ChangeEvent<HTMLInputElement>) {
      this.setState({
        name: e.target.value,
      });
    }
  
--  handleDescriptionValue(e: any) {
++  handleDescriptionValue(e: React.ChangeEvent<HTMLInputElement>) {
      this.setState({
        description: e.target.value,
      });
index 7bdb63b3f61f36dc3510f583f3a316890100e1cc,7bdb63b3f61f36dc3510f583f3a316890100e1cc..46c281cb3c95da92a0e80907dc750ca4d0d43220
@@@ -28,6 -28,6 +28,7 @@@ describe("<MainAppBar />", () => 
          const mainAppBar = mount(
              <MainAppBar
                  user={user}
++                onContextMenu={jest.fn()}
                  onDetailsPanelToggle={jest.fn()}
                  {...{ searchText: "", breadcrumbs: [], menuItems: { accountMenu: [], helpMenu: [], anonymousMenu: [] }, onSearch: jest.fn(), onBreadcrumbClick: jest.fn(), onMenuItemClick: jest.fn() }}
              />
@@@ -43,6 -43,6 +44,7 @@@
              <MainAppBar
                  menuItems={menuItems}
                  onDetailsPanelToggle={jest.fn()}
++                onContextMenu={jest.fn()}
                  {...{ searchText: "", breadcrumbs: [], onSearch: jest.fn(), onBreadcrumbClick: jest.fn(), onMenuItemClick: jest.fn() }}
              />
          );
@@@ -58,6 -58,6 +60,7 @@@
              <MainAppBar
                  searchText="search text"
                  searchDebounce={2000}
++                onContextMenu={jest.fn()}
                  onSearch={onSearch}
                  onDetailsPanelToggle={jest.fn()}
                  {...{ user, breadcrumbs: [], menuItems: { accountMenu: [], helpMenu: [], anonymousMenu: [] }, onBreadcrumbClick: jest.fn(), onMenuItemClick: jest.fn() }}
@@@ -76,6 -76,6 +79,7 @@@
          const mainAppBar = mount(
              <MainAppBar
                  breadcrumbs={items}
++                onContextMenu={jest.fn()}
                  onBreadcrumbClick={onBreadcrumbClick}
                  onDetailsPanelToggle={jest.fn()}
                  {...{ user, searchText: "", menuItems: { accountMenu: [], helpMenu: [], anonymousMenu: [] }, onSearch: jest.fn(), onMenuItemClick: jest.fn() }}
@@@ -93,6 -93,6 +97,7 @@@
          const mainAppBar = mount(
              <MainAppBar
                  menuItems={menuItems}
++                onContextMenu={jest.fn()}
                  onMenuItemClick={onMenuItemClick}
                  onDetailsPanelToggle={jest.fn()}
                  {...{ user, searchText: "", breadcrumbs: [], onSearch: jest.fn(), onBreadcrumbClick: jest.fn() }}
diff --cc src/views-components/project-list/project-list.tsx
index 88cd0f7c2cfed57fb2a6669dbd57fd1e251396e9,88cd0f7c2cfed57fb2a6669dbd57fd1e251396e9..0000000000000000000000000000000000000000
deleted file mode 100644,100644
+++ /dev/null
@@@ -1,61 -1,61 +1,0 @@@
--// Copyright (C) The Arvados Authors. All rights reserved.
--//
--// SPDX-License-Identifier: AGPL-3.0
--
--import * as React from 'react';
--import { Theme } from "@material-ui/core";
--import { StyleRulesCallback, WithStyles, withStyles } from "@material-ui/core/styles";
--import Paper from "@material-ui/core/Paper/Paper";
--import Table from "@material-ui/core/Table/Table";
--import TableHead from "@material-ui/core/TableHead/TableHead";
--import TableRow from "@material-ui/core/TableRow/TableRow";
--import TableCell from "@material-ui/core/TableCell/TableCell";
--import TableBody from "@material-ui/core/TableBody/TableBody";
--
--type CssRules = 'root' | 'table';
--
--const styles: StyleRulesCallback<CssRules> = (theme: Theme) => ({
--    root: {
--        width: '100%',
--        marginTop: theme.spacing.unit * 3,
--        overflowX: 'auto',
--    },
--    table: {
--        minWidth: 700,
--    },
--});
--
--interface ProjectListProps {
--}
--
--class ProjectList extends React.Component<ProjectListProps & WithStyles<CssRules>, {}> {
--    render() {
--        const {classes} = this.props;
--        return <Paper className={classes.root}>
--            <Table className={classes.table}>
--                <TableHead>
--                    <TableRow>
--                        <TableCell>Name</TableCell>
--                        <TableCell>Status</TableCell>
--                        <TableCell>Type</TableCell>
--                        <TableCell>Shared by</TableCell>
--                        <TableCell>File size</TableCell>
--                        <TableCell>Last modified</TableCell>
--                    </TableRow>
--                </TableHead>
--                <TableBody>
--                    <TableRow>
--                        <TableCell>Project 1</TableCell>
--                        <TableCell>Complete</TableCell>
--                        <TableCell>Project</TableCell>
--                        <TableCell>John Doe</TableCell>
--                        <TableCell>1.5 GB</TableCell>
--                        <TableCell>9:22 PM</TableCell>
--                    </TableRow>
--                </TableBody>
--            </Table>
--        </Paper>;
--    }
--}
--
--export default withStyles(styles)(ProjectList);
index 7725da5403810df2fb123cf96b7d563b3b2355fd,7725da5403810df2fb123cf96b7d563b3b2355fd..1a5e9f9d18718237ff38c9a48dfdfb5af7906ffd
@@@ -35,7 -35,7 +35,7 @@@ describe("ProjectTree component", () =
              active: true,
              status: 1
          };
--        const wrapper = mount(<ProjectTree projects={[project]} toggleOpen={jest.fn()} toggleActive={jest.fn()} />);
++        const wrapper = mount(<ProjectTree projects={[project]} onContextMenu={jest.fn()} toggleOpen={jest.fn()} toggleActive={jest.fn()} />);
  
          expect(wrapper.find(ListItemIcon)).toHaveLength(1);
      });
@@@ -73,7 -73,7 +73,7 @@@
                  status: 1
              }
          ];
--        const wrapper = mount(<ProjectTree projects={project} toggleOpen={jest.fn()} toggleActive={jest.fn()} />);
++        const wrapper = mount(<ProjectTree projects={project} onContextMenu={jest.fn()} toggleOpen={jest.fn()} toggleActive={jest.fn()} />);
  
          expect(wrapper.find(ListItemIcon)).toHaveLength(2);
      });
                  ]
              }
          ];
--        const wrapper = mount(<ProjectTree projects={project} toggleOpen={jest.fn()} toggleActive={jest.fn()}/>);
++        const wrapper = mount(<ProjectTree projects={project} onContextMenu={jest.fn()} toggleOpen={jest.fn()} toggleActive={jest.fn()}/>);
  
          expect(wrapper.find(Collapse)).toHaveLength(1);
      });
              active: true,
              status: 1
          };
--        const wrapper = mount(<ProjectTree projects={[project]} toggleOpen={jest.fn()} toggleActive={jest.fn()} />);
++        const wrapper = mount(<ProjectTree projects={[project]} onContextMenu={jest.fn()} toggleOpen={jest.fn()} toggleActive={jest.fn()} />);
  
          expect(wrapper.find(CircularProgress)).toHaveLength(1);
      });
index e8f5aed78dfff23324cbd43f22fafd22dba22128,e7a8ae3088d44192d67fc7a0d401b27f92ecac2a..53392dd9192f137af8496437cccc91c67a62feb1
@@@ -34,7 -34,49 +34,8 @@@ import { authService } from '../../serv
  
  import detailsPanelActions, { loadDetails } from "../../store/details-panel/details-panel-action";
  import { ResourceKind } from '../../models/kinds';
+ import { SidePanelIdentifiers } from '../../store/side-panel/side-panel-reducer';
  
 -const drawerWidth = 240;
 -const appBarHeight = 100;
 -
 -type CssRules = 'root' | 'appBar' | 'drawerPaper' | 'content' | 'contentWrapper' | 'toolbar';
 -
 -const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
 -    root: {
 -        flexGrow: 1,
 -        zIndex: 1,
 -        overflow: 'hidden',
 -        position: 'relative',
 -        display: 'flex',
 -        width: '100vw',
 -        height: '100vh'
 -    },
 -    appBar: {
 -        zIndex: theme.zIndex.drawer + 1,
 -        position: "absolute",
 -        width: "100%"
 -    },
 -    drawerPaper: {
 -        position: 'relative',
 -        width: drawerWidth,
 -        display: 'flex',
 -        flexDirection: 'column',
 -    },
 -    contentWrapper: {
 -        backgroundColor: theme.palette.background.default,
 -        display: "flex",
 -        flexGrow: 1,
 -        minWidth: 0,
 -        paddingTop: appBarHeight
 -    },
 -    content: {
 -        padding: `${theme.spacing.unit}px ${theme.spacing.unit * 3}px`,
 -        overflowY: "auto",
 -        flexGrow: 1
 -    },
 -    toolbar: theme.mixins.toolbar
 -});
 -
  interface WorkbenchDataProps {
      projects: Array<TreeItem<Project>>;
      currentProjectId: string;
@@@ -177,60 -275,6 +179,61 @@@ class Workbench extends React.Component
              this.props.dispatch<any>(loadDetails(item.uuid, ResourceKind.Project));
          }}
          {...props} />
-         mainAppBarActions: MainAppBarActionProps = {
-             onBreadcrumbClick: ({ itemId }: NavBreadcrumb) => {
-                 this.props.dispatch<any>(setProjectItem(itemId, ItemMode.BOTH));
-                 this.props.dispatch<any>(loadDetails(itemId, ResourceKind.Project));
-             },
-             onSearch: searchText => {
-                 this.setState({ searchText });
-                 this.props.dispatch(push(`/search?q=${searchText}`));
-             },
-             onMenuItemClick: (menuItem: NavMenuItem) => menuItem.action(),
-             onDetailsPanelToggle: () => {
-                 this.props.dispatch(detailsPanelActions.TOGGLE_DETAILS_PANEL());
-             },
-             onContextMenu: (event: React.MouseEvent<HTMLElement>, breadcrumb: NavBreadcrumb) => {
-                 this.openContextMenu(event, breadcrumb.itemId);
-             }
-         };
-     
-         toggleSidePanelOpen = (itemId: string) => {
-             this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_OPEN(itemId));
-         }
-     
-         toggleSidePanelActive = (itemId: string) => {
-             this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(itemId));
-             this.props.dispatch(projectActions.RESET_PROJECT_TREE_ACTIVITY(itemId));
-         }
-     
-         handleCreationDialogOpen = (itemUuid: string) => {
-             this.closeContextMenu();
-             this.props.dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: itemUuid }));
-         }
-     
-     
-         openContextMenu = (event: React.MouseEvent<HTMLElement>, itemUuid: string) => {
-             event.preventDefault();
-             this.setState({
-                 contextMenu: {
-                     anchorEl: mockAnchorFromMouseEvent(event),
-                     itemUuid
-                 }
-             });
-         }
-     
-         closeContextMenu = () => {
-             this.setState({ contextMenu: {} });
 +
-     
-         openCreateDialog = (item: ContextMenuAction) => {
-             const { itemUuid } = this.state.contextMenu;
-             if (item.openCreateDialog && itemUuid) {
-                 this.handleCreationDialogOpen(itemUuid);
++    mainAppBarActions: MainAppBarActionProps = {
++        onBreadcrumbClick: ({ itemId }: NavBreadcrumb) => {
++            this.props.dispatch<any>(setProjectItem(itemId, ItemMode.BOTH));
++            this.props.dispatch<any>(loadDetails(itemId, ResourceKind.Project));
++        },
++        onSearch: searchText => {
++            this.setState({ searchText });
++            this.props.dispatch(push(`/search?q=${searchText}`));
++        },
++        onMenuItemClick: (menuItem: NavMenuItem) => menuItem.action(),
++        onDetailsPanelToggle: () => {
++            this.props.dispatch(detailsPanelActions.TOGGLE_DETAILS_PANEL());
++        },
++        onContextMenu: (event: React.MouseEvent<HTMLElement>, breadcrumb: NavBreadcrumb) => {
++            this.openContextMenu(event, breadcrumb.itemId);
 +        }
++    };
++
++    toggleSidePanelOpen = (itemId: string) => {
++        this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_OPEN(itemId));
++    }
++
++    toggleSidePanelActive = (itemId: string) => {
++        this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(itemId));
++        this.props.dispatch(projectActions.RESET_PROJECT_TREE_ACTIVITY(itemId));
++        this.props.dispatch(push("/"));
++    }
++
++    handleCreationDialogOpen = (itemUuid: string) => {
++        this.closeContextMenu();
++        this.props.dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: itemUuid }));
++    }
++
++
++    openContextMenu = (event: React.MouseEvent<HTMLElement>, itemUuid: string) => {
++        event.preventDefault();
++        this.setState({
++            contextMenu: {
++                anchorEl: mockAnchorFromMouseEvent(event),
++                itemUuid
 +            }
++        });
++    }
++
++    closeContextMenu = () => {
++        this.setState({ contextMenu: {} });
++    }
++
++    openCreateDialog = (item: ContextMenuAction) => {
++        const { itemUuid } = this.state.contextMenu;
++        if (item.openCreateDialog && itemUuid) {
++            this.handleCreationDialogOpen(itemUuid);
 +        }
++    }
  }
  
  const contextMenuActions = [[{