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 { SubprocessFilter } from '~/components/subprocess-filter/subprocess-filter';
+import { SubprocessFilterDataProps } from '~/components/subprocess-filter/subprocess-filter';
-type CssRules = 'root' | 'label' | 'value' | 'middleValue' | 'switch' | 'grid';
+type CssRules = 'root';
const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
root: {
fontSize: '0.875rem'
- },
- label: {
- color: theme.palette.grey["500"],
- marginBottom: theme.spacing.unit
- },
- value: {
- marginBottom: theme.spacing.unit
- },
- middleValue: {
- marginBottom: theme.spacing.unit - 2
- },
- switch: {
- '& span:first-child': {
- height: '18px'
- }
- },
- grid: {
- marginLeft: '22px'
}
});
-type SubprocessesProps = WithStyles<CssRules>;
+interface SubprocessesDataProps {
+ subprocesses: number;
+ filters: SubprocessFilterDataProps[];
+ onToggle: (filter: SubprocessFilterDataProps) => void;
+}
-export const SubprocessesCard = withStyles(styles)(
- class extends React.Component<SubprocessesProps> {
-
- state = {
- queued: true,
- active: true,
- completed: true,
- failed: true
- };
-
- handleChange = (name: string) => (event: any) => {
- this.setState({ [name]: event.target.checked });
- }
+type SubprocessesProps = SubprocessesDataProps & WithStyles<CssRules>;
- render() {
- const { classes } = this.props;
- return (
- <Card className={classes.root}>
- <CardHeader title="Subprocess and filters" />
- <CardContent>
- <Grid container direction="row" spacing={16} justify="flex-start" alignItems="stretch">
- <Grid item>
- <Grid container direction="column" alignItems="flex-end" spacing={8}>
- <Grid item className={classes.label}>Subprocesses:</Grid>
- <Grid item className={classes.label}>Queued:</Grid>
- <Grid item className={classes.label}>Active:</Grid>
- </Grid>
- </Grid>
- <Grid item>
- <Grid container direction="column" alignItems="flex-start" spacing={8}>
- <Grid item className={classes.value}>1</Grid>
- <Grid item className={classes.middleValue}>
- 2
- <Switch classes={{ root: classes.switch }}
- checked={this.state.queued}
- onChange={this.handleChange('queued')}
- value="queued"
- color="primary" />
- </Grid>
- <Grid item className={classes.value}>
- 3
- <Switch classes={{ root: classes.switch }}
- checked={this.state.active}
- onChange={this.handleChange('active')}
- value="active"
- color="primary" />
- </Grid>
- </Grid>
- </Grid>
- <Grid item className={classes.grid}>
- <Grid container direction="column" alignItems="flex-end" spacing={8}>
- <Grid item className={classes.label}> </Grid>
- <Grid item className={classes.label}>Completed:</Grid>
- <Grid item className={classes.label}>Failed:</Grid>
- </Grid>
- </Grid>
- <Grid item>
- <Grid container direction="column" alignItems="flex-end" spacing={8}>
- <Grid item className={classes.value}> </Grid>
- <Grid item className={classes.middleValue}>
- 2
- <Switch classes={{ root: classes.switch }}
- checked={this.state.completed}
- onChange={this.handleChange('completed')}
- value="completed"
- color="primary" />
- </Grid>
- <Grid item className={classes.value}>
- 1
- <Switch classes={{ root: classes.switch }}
- checked={this.state.failed}
- onChange={this.handleChange('failed')}
- value="failed"
- color="primary" />
- </Grid>
- </Grid>
- </Grid>
- </Grid>
- </CardContent>
- </Card>
- );
- }
- }
+export const SubprocessesCard = withStyles(styles)(
+ ({ classes, filters, subprocesses, onToggle }: SubprocessesProps) =>
+ <Card className={classes.root}>
+ <CardHeader title="Subprocess and filters" />
+ <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}>
+ {
+ filters.map(filter =>
+ <SubprocessFilter {...filter} key={filter.key} onToggle={() => onToggle(filter)} />
+ )
+ }
+ </Grid>
+ </Grid>
+ </CardContent>
+ </Card>
);
\ No newline at end of file