Resolve merge conflicts
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Tue, 10 Jul 2018 13:20:15 +0000 (15:20 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Tue, 10 Jul 2018 13:20:15 +0000 (15:20 +0200)
Feature #13694

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

1  2 
src/components/data-explorer/data-explorer.tsx
src/components/data-table/data-table.tsx
src/views-components/data-explorer/data-explorer.tsx
src/views/project-panel/project-panel.tsx
src/views/workbench/workbench.tsx

index e90b1c2733d94d1a8ff51ae34841d7d3cfef1c58,9b099acb2c34c5c6743ef212137519d6822be4a0..9085b1f1f0bce76fdc24f32ec8115b610803ae01
@@@ -21,8 -24,9 +21,9 @@@ interface DataExplorerProps<T> 
      page: number;
      onSearch: (value: string) => void;
      onRowClick: (item: T) => void;
+     onRowDoubleClick: (item: T) => void;
      onColumnToggle: (column: DataColumn<T>) => void;
 -    onContextAction: (action: ContextMenuAction, item: T) => void;
 +    onContextMenu: (event: React.MouseEvent<HTMLElement>, item: T) => void;
      onSortToggle: (column: DataColumn<T>) => void;
      onFiltersChange: (filters: DataTableFilterItem[], column: DataColumn<T>) => void;
      onChangePage: (page: number) => void;
@@@ -49,7 -68,8 +50,8 @@@ class DataExplorer<T extends DataItem> 
                  columns={[...this.props.columns, this.contextMenuColumn]}
                  items={this.props.items}
                  onRowClick={(_, item: T) => this.props.onRowClick(item)}
 -                onRowContextMenu={this.openContextMenu}
 +                onContextMenu={this.props.onContextMenu}
+                 onRowDoubleClick={(_, item: T) => this.props.onRowDoubleClick(item)}
                  onFiltersChange={this.props.onFiltersChange}
                  onSortToggle={this.props.onSortToggle} />
              <Toolbar>
index 854b322052a8612807093f07c2eb17f835be4e6c,c657e1167171b665c05f129ac81c096a3c1a12b1..8f4ffc6fab73b49055333ce28b0302752062a627
@@@ -15,7 -15,8 +15,8 @@@ export interface DataTableProps<T> 
      items: T[];
      columns: DataColumns<T>;
      onRowClick: (event: React.MouseEvent<HTMLTableRowElement>, item: T) => void;
 -    onRowContextMenu: (event: React.MouseEvent<HTMLTableRowElement>, item: T) => void;
 +    onContextMenu: (event: React.MouseEvent<HTMLElement>, item: T) => void;
+     onRowDoubleClick: (event: React.MouseEvent<HTMLTableRowElement>, item: T) => void;
      onSortToggle: (column: DataColumn<T>) => void;
      onFiltersChange: (filters: DataTableFilterItem[], column: DataColumn<T>) => void;
  }
@@@ -69,12 -69,13 +70,13 @@@ class DataTable<T extends DataItem> ext
      }
  
      renderBodyRow = (item: T, index: number) => {
-         const { onRowClick, onContextMenu } = this.props;
 -        const { onRowClick, onRowDoubleClick, onRowContextMenu } = this.props;
++        const { onRowClick, onRowDoubleClick, onContextMenu } = this.props;
          return <TableRow
              hover
              key={item.key}
              onClick={event => onRowClick && onRowClick(event, item)}
-             onContextMenu={this.handleRowContextMenu(item)}>
 -            onDoubleClick={event => onRowDoubleClick && onRowDoubleClick(event, item) }
 -            onContextMenu={event => onRowContextMenu && onRowContextMenu(event, item)}>
++            onContextMenu={this.handleRowContextMenu(item)}
++            onDoubleClick={event => onRowDoubleClick && onRowDoubleClick(event, item) }>
              {this.mapVisibleColumns((column, index) => (
                  <TableCell key={column.key || index}>
                      {column.render(item)}
index 2864cefe17fd5e1e8f6de095605bb87b20dab6ee,5ff8c66b20fd960441772c7243f9e5eefac66b3f..e2e145bbe34e713fb2f49f53efa8ae1beacb51c9
@@@ -14,14 -14,16 +14,15 @@@ import { ContextMenuAction, ContextMenu
  
  interface Props {
      id: string;
 -    contextActions: ContextMenuActionGroup[];
      onRowClick: (item: any) => void;
 -    onContextAction: (action: ContextMenuAction, item: any) => void;
 +    onContextMenu: (event: React.MouseEvent<HTMLElement>, item: any) => void;
+     onRowDoubleClick: (item: any) => void;
  }
  
 -const mapStateToProps = (state: RootState, { id, contextActions }: Props) =>
 +const mapStateToProps = (state: RootState, { id }: Props) =>
      getDataExplorer(state.dataExplorer, id);
  
- const mapDispatchToProps = (dispatch: Dispatch, { id, onRowClick, onContextMenu }: Props) => ({
 -const mapDispatchToProps = (dispatch: Dispatch, { id, contextActions, onRowClick, onRowDoubleClick, onContextAction }: Props) => ({
++const mapDispatchToProps = (dispatch: Dispatch, { id, onRowClick, onRowDoubleClick, onContextMenu }: Props) => ({
      onSearch: (searchValue: string) => {
          dispatch(actions.SET_SEARCH_VALUE({ id, searchValue }));
      },
          dispatch(actions.SET_ROWS_PER_PAGE({ id, rowsPerPage }));
      },
  
 -    contextActions,
 -
      onRowClick,
  
-     onContextMenu
+     onRowDoubleClick,
 -
 -    onContextAction
++    
++    onContextMenu,
  });
  
  export default connect(mapStateToProps, mapDispatchToProps)(DataExplorer);
index 04681c3cfafb3dca7b208b3df0c6a3a4ffa88d12,0708b1637083321c831433229bd322264d2fad61..0b1be099d0a7aba336d8d142d6b8b05e0e1695cc
@@@ -25,9 -26,8 +25,10 @@@ export interface ProjectPanelFilter ext
  type ProjectPanelProps = {
      currentItemId: string,
      onItemClick: (item: ProjectPanelItem) => void,
-     onItemRouteChange: (itemId: string) => void,
 +    onContextMenu: (event: React.MouseEvent<HTMLElement>, item: ProjectPanelItem) => void;
 +    onDialogOpen: (ownerUuid: string) => void;
+     onItemDoubleClick: (item: ProjectPanelItem) => void,
+     onItemRouteChange: (itemId: string) => void
  }
      & DispatchProp
      & WithStyles<CssRules>
@@@ -49,8 -48,10 +50,9 @@@ class ProjectPanel extends React.Compon
              </div>
              <DataExplorer
                  id={PROJECT_PANEL_ID}
 -                contextActions={contextMenuActions}
                  onRowClick={this.props.onItemClick}
-                 onContextMenu={this.props.onContextMenu} />;
+                 onRowDoubleClick={this.props.onItemDoubleClick}
 -                onContextAction={this.executeAction} />;
++                onContextMenu={this.props.onContextMenu} />
          </div>;
      }
  
index 303d055aacab47319de4c4ce5e9aeb3e3429a667,959025bfbe8a43f37d52c7d9defd2627f274ee59..6ad4d247456c9d995b3a44562e5defd765756e14
@@@ -27,11 -27,8 +27,13 @@@ import projectActions from "../../store
  import ProjectPanel from "../project-panel/project-panel";
  import DetailsPanel from '../../views-components/details-panel/details-panel';
  import { ArvadosTheme } from '../../common/custom-theme';
 +import ContextMenu, { ContextMenuAction } from '../../components/context-menu/context-menu';
 +import { mockAnchorFromMouseEvent } from '../../components/popover/helpers';
 +import CreateProjectDialog from "../../views-components/create-project-dialog/create-project-dialog";
 +import { authService } from '../../services/services';
 +
+ import detailsPanelActions, { loadDetails } from "../../store/details-panel/details-panel-action";
+ import { ResourceKind } from '../../models/kinds';
  
  const drawerWidth = 240;
  const appBarHeight = 100;
@@@ -106,16 -99,11 +108,16 @@@ interface WorkbenchState 
          helpMenu: NavMenuItem[],
          anonymousMenu: NavMenuItem[]
      };
-     isDetailsPanelOpened: boolean;
  }
  
  class Workbench extends React.Component<WorkbenchProps, WorkbenchState> {
      state = {
 +        contextMenu: {
 +            anchorEl: undefined,
 +            itemUuid: undefined
 +        },
 +        isCreationDialogOpen: false,
          anchorEl: null,
          searchText: "",
          breadcrumbs: [],
          },
          onMenuItemClick: (menuItem: NavMenuItem) => menuItem.action(),
          onDetailsPanelToggle: () => {
-             this.setState(prev => ({ isDetailsPanelOpened: !prev.isDetailsPanelOpened }));
+             this.props.dispatch(detailsPanelActions.TOGGLE_DETAILS_PANEL());
 +        },
 +        onContextMenu: (event: React.MouseEvent<HTMLElement>, breadcrumb: NavBreadcrumb) => {
 +            this.openContextMenu(event, breadcrumb.itemId);
          }
      };
  
                              <ProjectTree
                                  projects={this.props.projects}
                                  toggleOpen={itemId => this.props.dispatch<any>(setProjectItem(itemId, ItemMode.OPEN))}
-                                 toggleActive={itemId => this.props.dispatch<any>(setProjectItem(itemId, ItemMode.ACTIVE))}
-                                 onContextMenu={(event, item) => this.openContextMenu(event, item.data.uuid)} />
++                                onContextMenu={(event, item) => this.openContextMenu(event, item.data.uuid)}
+                                 toggleActive={itemId => {
+                                     this.props.dispatch<any>(setProjectItem(itemId, ItemMode.ACTIVE));
+                                     this.props.dispatch<any>(loadDetails(itemId, ResourceKind.Project));
 -                                }}
 -                            />
++                                }}/>
                          </SidePanel>
                      </Drawer>}
                  <main className={classes.contentWrapper}>
                              <Route path="/projects/:id" render={this.renderProjectPanel} />
                          </Switch>
                      </div>
-                     <DetailsPanel
-                         isOpened={this.state.isDetailsPanelOpened}
-                         onCloseDrawer={this.mainAppBarActions.onDetailsPanelToggle} />
+                     <DetailsPanel />
                  </main>
 +                <ContextMenu
 +                    anchorEl={this.state.contextMenu.anchorEl}
 +                    actions={contextMenuActions}
 +                    onActionClick={this.openCreateDialog}
 +                    onClose={this.closeContextMenu} />
 +                <CreateProjectDialog />
              </div>
          );
      }
  
      renderProjectPanel = (props: RouteComponentProps<{ id: string }>) => <ProjectPanel
          onItemRouteChange={itemId => this.props.dispatch<any>(setProjectItem(itemId, ItemMode.ACTIVE))}
-         onItemClick={item => this.props.dispatch<any>(setProjectItem(item.uuid, ItemMode.ACTIVE))}
 +        onContextMenu={(event, item) => this.openContextMenu(event, item.uuid)}
 +        onDialogOpen={this.handleCreationDialogOpen}
+         onItemClick={item => {
+             this.props.dispatch<any>(loadDetails(item.uuid, item.kind as ResourceKind));
+         }}
+         onItemDoubleClick={item => {
+             this.props.dispatch<any>(setProjectItem(item.uuid, ItemMode.ACTIVE));
+             this.props.dispatch<any>(loadDetails(item.uuid, ResourceKind.Project));
+         }}
          {...props} />
 +}
  
 +const contextMenuActions = [[{
 +    icon: "fas fa-plus fa-fw",
 +    name: "New project",
 +    openCreateDialog: true
 +}, {
 +    icon: "fas fa-users fa-fw",
 +    name: "Share"
 +}, {
 +    icon: "fas fa-sign-out-alt fa-fw",
 +    name: "Move to"
 +}, {
 +    icon: "fas fa-star fa-fw",
 +    name: "Add to favourite"
 +}, {
 +    icon: "fas fa-edit fa-fw",
 +    name: "Rename"
 +}, {
 +    icon: "fas fa-copy fa-fw",
 +    name: "Make a copy"
 +}, {
 +    icon: "fas fa-download fa-fw",
 +    name: "Download"
 +}], [{
 +    icon: "fas fa-trash-alt fa-fw",
 +    name: "Remove"
  }
 +]];
  
  export default connect<WorkbenchDataProps>(
      (state: RootState) => ({