merge master
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 4 Sep 2018 12:16:44 +0000 (14:16 +0200)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 4 Sep 2018 12:16:44 +0000 (14:16 +0200)
Feature #13860

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

1  2 
src/components/subprocess-filter/subprocess-filter.tsx
src/store/process-panel/process-panel-actions.ts
src/store/workbench/workbench-actions.ts
src/views/process-panel/process-panel-root.tsx
src/views/process-panel/subprocesses-card.tsx

index 23c1e65819e371424900a60c0e3c9809e5a6a80f,58c33ee5f238939f6ce795abdaad596d6a4cadd6..36be50d96aff7bb7fa6ff718c05baaf503bf53ba
@@@ -5,28 -5,27 +5,24 @@@
  import * as React from 'react';
  import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles';
  import { ArvadosTheme } from '~/common/custom-theme';
 -import { Grid, Typography, Switch } from '@material-ui/core';
 +import { Typography, Switch } from '@material-ui/core';
  
- type CssRules = 'container' | 'label' | 'value' | 'switch';
 -type CssRules = 'grid' | 'label' | 'value' | 'switch';
++type CssRules = 'container' | 'label' | 'value';
  
  const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
 -    grid: {
 -        display: 'flex'
 +    container: {
 +        display: 'flex',
++        alignItems: 'center',
++        height: '20px'
      },
      label: {
          width: '86px',
          color: theme.palette.grey["500"],
 -        textAlign: 'right'
 +        textAlign: 'right',
      },
      value: {
          width: '24px',
 -        paddingLeft: theme.spacing.unit
 -    },
 -    switch: {
 -        '& span:first-child': {
 -            height: '18px'
 -        }
 +        paddingLeft: theme.spacing.unit,
-     },
-     switch: {
-         height: '20px',
-         '& span:first-child': {
-             height: '18px'
-         }
      }
  });
  
@@@ -42,14 -41,14 +38,14 @@@ type SubprocessFilterProps = Subprocess
  
  export const SubprocessFilter = withStyles(styles)(
      ({ classes, label, value, key, checked, onToggle }: SubprocessFilterProps) =>
 -        <Grid item className={classes.grid} md={12} lg={6} >
 +        <div className={classes.container} >
              <Typography component="span" className={classes.label}>{label}:</Typography>
              <Typography component="span" className={classes.value}>{value}</Typography>
--            {onToggle && <Switch classes={{ root: classes.switch }}
++            {onToggle && <Switch
                  checked={checked}
                  onChange={onToggle}
                  value={key}
                  color="primary" />
              }
 -        </Grid>
 +        </div>
  );
index 902a5c9c4e7ab7cf99fe258e7237ad0691126ec7,0000000000000000000000000000000000000000..85a7314d2e7a1e2d84164a32cacd7fa651bf58ae
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,32 @@@
-     'Queued',
-     'Complete',
-     'Active',
-     'Failed'
 +// Copyright (C) The Arvados Authors. All rights reserved.
 +//
 +// SPDX-License-Identifier: AGPL-3.0
 +
 +import { unionize, ofType, UnionOf } from "~/common/unionize";
 +import { loadProcess } from '~/store/processes/processes-actions';
 +import { Dispatch } from 'redux';
++import { ProcessStatus } from '~/store/processes/process';
 +
 +export const procesPanelActions = unionize({
 +    INIT_PROCESS_PANEL_FILTERS: ofType<string[]>(),
 +    TOGGLE_PROCESS_PANEL_FILTER: ofType<string>(),
 +});
 +
 +export type ProcessPanelAction = UnionOf<typeof procesPanelActions>;
 +
 +export const toggleProcessPanelFilter = procesPanelActions.TOGGLE_PROCESS_PANEL_FILTER;
 +
 +export const loadProcessPanel = (uuid: string) =>
 +    (dispatch: Dispatch) => {
 +        dispatch<any>(loadProcess(uuid));
 +        dispatch(initProcessPanelFilters);
 +    };
 +
 +export const initProcessPanelFilters = procesPanelActions.INIT_PROCESS_PANEL_FILTERS([
++    ProcessStatus.QUEUED,
++    ProcessStatus.COMPLETED,
++    ProcessStatus.FAILED,
++    ProcessStatus.RUNNING,
++    ProcessStatus.LOCKED,
++    ProcessStatus.CANCELLED
 +]);
index 80f50fe153744382832c81aa34d63f8976ea2869,effac1d14f4c77048278aac70bbc7c7cd50c1612..7077f414e5e2c1703c63f81107cae7a34aab9c65
@@@ -15,7 -15,7 +15,7 @@@ import { favoritePanelActions } from '~
  import { projectPanelColumns } from '~/views/project-panel/project-panel';
  import { favoritePanelColumns } from '~/views/favorite-panel/favorite-panel';
  import { matchRootRoute } from '~/routes/routes';
- import { setCollectionBreadcrumbs, setProjectBreadcrumbs, setSidePanelBreadcrumbs } from '../breadcrumbs/breadcrumbs-actions';
+ import { setCollectionBreadcrumbs, setProjectBreadcrumbs, setSidePanelBreadcrumbs, setProcessBreadcrumbs } from '../breadcrumbs/breadcrumbs-actions';
  import { navigateToProject } from '../navigation/navigation-action';
  import { MoveToFormDialogData } from '~/store/move-to-dialog/move-to-dialog';
  import { ServiceRepository } from '~/services/services';
@@@ -29,10 -29,9 +29,10 @@@ import * as collectionCopyActions from 
  import * as collectionUpdateActions from '~/store/collections/collection-update-actions';
  import * as collectionMoveActions from '~/store/collections/collection-move-actions';
  import * as processesActions from '../processes/processes-actions';
- import { getProcess } from '../processes/process';
  import { trashPanelColumns } from "~/views/trash-panel/trash-panel";
  import { loadTrashPanel, trashPanelActions } from "~/store/trash-panel/trash-panel-action";
  import { initProcessLogsPanel } from '../process-logs-panel/process-logs-panel-actions';
++import { loadProcessPanel } from '~/store/process-panel/process-panel-actions';
  
  
  export const loadWorkbench = () =>
@@@ -186,17 -185,17 +186,19 @@@ export const moveCollection = (data: Mo
  
  export const loadProcess = (uuid: string) =>
      async (dispatch: Dispatch, getState: () => RootState) => {
-         await dispatch<any>(processesActions.loadProcess(uuid));
-         const process = getProcess(uuid)(getState().resources);
-         if (process) {
-             await dispatch<any>(activateSidePanelTreeItem(process.containerRequest.ownerUuid));
-             dispatch<any>(setCollectionBreadcrumbs(process.containerRequest.ownerUuid));
-             dispatch(loadDetailsPanel(uuid));
-         }
++        dispatch<any>(loadProcessPanel(uuid));
+         const process = await dispatch<any>(processesActions.loadProcess(uuid));
+         await dispatch<any>(activateSidePanelTreeItem(process.containerRequest.ownerUuid));
+         dispatch<any>(setProcessBreadcrumbs(uuid));
+         dispatch(loadDetailsPanel(uuid));
++        
      };
  
  export const loadProcessLog = (uuid: string) =>
      async (dispatch: Dispatch) => {
+         const process = await dispatch<any>(processesActions.loadProcess(uuid));
+         await dispatch<any>(activateSidePanelTreeItem(process.containerRequest.ownerUuid));
+         dispatch<any>(setProcessBreadcrumbs(uuid));
          dispatch<any>(initProcessLogsPanel(uuid));
      };
  
index f76efe0d993dd2b83cbdc5b87a952405b73b8c54,8e78f564f288de0220f84ed82753cc0f3cb5bc33..d12704bcf4b69c87ec59283dc824feba3e1dd308
@@@ -10,35 -10,58 +10,35 @@@ import { ProcessIcon } from '~/componen
  import { Process } from '~/store/processes/process';
  import { SubprocessesCard } from './subprocesses-card';
  import { ProcessSubprocesses } from '~/views/process-panel/process-subprocesses';
 -import { SubprocessesStatus } from '~/views/process-panel/process-subprocesses-card';
 -
 -type CssRules = 'headerActive' | 'headerCompleted' | 'headerQueued' | 'headerFailed' | 'headerCanceled';
 +import { SubprocessFilterDataProps } from '~/components/subprocess-filter/subprocess-filter';
  
  export interface ProcessPanelRootDataProps {
      process?: Process;
      subprocesses: Array<Process>;
 +    filters: Array<SubprocessFilterDataProps>;
 +    totalSubprocessesLength: number;
  }
  
  export interface ProcessPanelRootActionProps {
      onContextMenu: (event: React.MouseEvent<HTMLElement>) => void;
 +    onToggle: (status: string) => void;
  }
  
  export type ProcessPanelRootProps = ProcessPanelRootDataProps & ProcessPanelRootActionProps;
  
  export const ProcessPanelRoot = (props: ProcessPanelRootProps) =>
      props.process
 -        ? <Grid container spacing={16}>
 -            <Grid item xs={7}>
 +        ? <Grid container spacing={16} alignItems="stretch">
-             <Grid item sm={12} md={7} alignItems="stretch">
++            <Grid item sm={12} md={7}>
                  <ProcessInformationCard
                      process={props.process}
                      onContextMenu={props.onContextMenu} />
              </Grid>
 -            <Grid item xs={5}>
 +            <Grid item sm={12} md={5}>
                  <SubprocessesCard
 -                    subprocesses={4}
 -                    filters={[
 -                        {
 -                            key: 'queued',
 -                            value: 1,
 -                            label: 'Queued',
 -                            checked: true
 -                        }, {
 -                            key: 'active',
 -                            value: 2,
 -                            label: 'Active',
 -                            checked: true
 -                        },
 -                        {
 -                            key: 'completed',
 -                            value: 2,
 -                            label: 'Completed',
 -                            checked: true
 -                        },
 -                        {
 -                            key: 'failed',
 -                            value: 2,
 -                            label: 'Failed',
 -                            checked: true
 -                        }
 -                    ]}
 -                    onToggle={() => { return; }}
 +                    subprocessesAmount={props.totalSubprocessesLength}
 +                    filters={props.filters}
 +                    onToggle={props.onToggle}
                  />
              </Grid>
              <Grid item xs={12}>
@@@ -55,4 -78,3 +55,4 @@@
                  icon={ProcessIcon}
                  messages={['Process not found']} />
          </Grid>;
 +
index 6c5562db7cbff45d8f809b50a552c3d92e1e4b90,ac60c9f66ef56a4e3842bf1465ce5473e10f15f0..85de7033340f8bde984c41a4e0e751e24a20bf35
@@@ -4,60 -4,39 +4,60 @@@
  
  import * as React from 'react';
  import { ArvadosTheme } from '~/common/custom-theme';
 -import { StyleRulesCallback, withStyles, WithStyles, Card, CardHeader, CardContent, Grid, Switch } from '@material-ui/core';
 +import { StyleRulesCallback, withStyles, WithStyles, Card, CardHeader, CardContent, Grid, Typography } from '@material-ui/core';
  import { SubprocessFilter } from '~/components/subprocess-filter/subprocess-filter';
  import { SubprocessFilterDataProps } from '~/components/subprocess-filter/subprocess-filter';
  
 -type CssRules = 'root';
 +type CssRules = 'root' | 'subtitle' | 'title' | 'gridFilter';
  
  const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
      root: {
 -        fontSize: '0.875rem'
 +        fontSize: '0.875rem',
 +        height: '100%'
 +    },
 +    subtitle: {
 +        paddingBottom: '32px!important'
 +    },
 +    title: {
 +        color: theme.customs.colors.grey700
 +    },
 +    gridFilter: {
 +        height: '20px',
 +        marginBottom: theme.spacing.unit,
 +        paddingTop: '0px!important',
 +        paddingBottom: '0px!important',
      }
  });
  
  interface SubprocessesDataProps {
 -    subprocesses: number;
 +    subprocessesAmount: number;
      filters: SubprocessFilterDataProps[];
 -    onToggle: (filter: SubprocessFilterDataProps) => void;
 +    onToggle: (status: string) => void;
  }
  
  type SubprocessesProps = SubprocessesDataProps & WithStyles<CssRules>;
  
  export const SubprocessesCard = withStyles(styles)(
 -    ({ classes, filters, subprocesses, onToggle }: SubprocessesProps) => 
 +    ({ classes, filters, subprocessesAmount, onToggle }: SubprocessesProps) =>
          <Card className={classes.root}>
 -            <CardHeader title="Subprocess and filters" />
 +            <CardHeader
 +                className={classes.title}
 +                title={
 +                    <Typography noWrap variant="title" color='inherit'>
 +                        Subprocess and filters
 +                </Typography>} />
              <CardContent>
                  <Grid container direction="column" spacing={16}>
                      <Grid item xs={12} container spacing={16}>
 -                        <SubprocessFilter label='Subprocesses' value={subprocesses} />     
 -                    </Grid>
 -                    <Grid item xs={12} container spacing={16}>
 +                        <Grid item md={12} lg={6} className={classes.subtitle}>
 +                            <SubprocessFilter label='Subprocesses' value={subprocessesAmount} />
 +                        </Grid>
 +                        <Grid item md={12} lg={6}/>
                          {
 -                            filters.map(filter => 
 -                                <SubprocessFilter {...filter} key={filter.key} onToggle={() => onToggle(filter)} />                                                     
 +                            filters.map(filter =>
-                                 <Grid item md={12} lg={6} key={filter.key} spacing={0} className={classes.gridFilter}>
++                                <Grid item md={12} lg={6} key={filter.key} className={classes.gridFilter}>
 +                                    <SubprocessFilter {...filter} onToggle={() => onToggle(filter.label)} />
 +                                </Grid>
                              )
                          }
                      </Grid>