1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React from 'react';
17 } from '@material-ui/core';
18 import { ArvadosTheme } from 'common/custom-theme';
24 } from 'components/icon/icon';
25 import { Process } from 'store/processes/process';
26 import { MPVPanelProps } from 'components/multi-panel-view/multi-panel-view';
27 import { FilterOption } from 'views/process-log-panel/process-log-panel';
28 import { ProcessLogForm } from 'views/process-log-panel/process-log-form';
29 import { ProcessLogCodeSnippet } from 'views/process-log-panel/process-log-code-snippet';
30 import { DefaultView } from 'components/default-view/default-view';
31 import { CodeSnippetDataProps } from 'components/code-snippet/code-snippet';
33 type CssRules = 'card' | 'content' | 'title' | 'iconHeader';
35 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
41 paddingBottom: theme.spacing.unit * 2,
46 paddingTop: theme.spacing.unit * 0.5
50 color: theme.customs.colors.green700
54 export interface ProcessLogsCardDataProps {
56 selectedFilter: FilterOption;
57 filters: FilterOption[];
60 export interface ProcessLogsCardActionProps {
61 onLogFilterChange: (filter: FilterOption) => void;
62 navigateToLog: (uuid: string) => void;
65 type ProcessLogsCardProps = ProcessLogsCardDataProps
66 & ProcessLogsCardActionProps
67 & CodeSnippetDataProps
68 & WithStyles<CssRules>
71 export const ProcessLogsCard = withStyles(styles)(
72 ({ classes, process, filters, selectedFilter, lines, onLogFilterChange, navigateToLog,
73 doHidePanel, doMaximizePanel, panelMaximized, panelName }: ProcessLogsCardProps) =>
75 <Card className={classes.card}>
77 avatar={<LogIcon className={classes.iconHeader} />}
78 action={<Grid container direction='row' alignItems='center'>
80 <ProcessLogForm selectedFilter={selectedFilter}
81 filters={filters} onChange={onLogFilterChange} />
84 <Tooltip title="Go to Log collection" disableFocusListener>
85 <IconButton onClick={() => navigateToLog(process.containerRequest.logUuid!)}>
90 { doMaximizePanel && !panelMaximized &&
91 <Tooltip title={`Maximize ${panelName || 'panel'}`} disableFocusListener>
92 <IconButton onClick={doMaximizePanel}><MaximizeIcon /></IconButton>
94 { doHidePanel && <Grid item>
95 <Tooltip title={`Close ${panelName || 'panel'}`} disableFocusListener>
96 <IconButton onClick={doHidePanel}><CloseIcon /></IconButton>
101 <Typography noWrap variant='h6' className={classes.title}>
105 <CardContent className={classes.content}>
112 <ProcessLogCodeSnippet lines={lines} />
117 messages={['No logs yet']} />