16672: Adds font size control to the log viewer.
[arvados-workbench2.git] / src / components / code-snippet / code-snippet.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import React from 'react';
6 import { StyleRulesCallback, WithStyles, Typography, withStyles } from '@material-ui/core';
7 import { ArvadosTheme } from 'common/custom-theme';
8 import classNames from 'classnames';
9
10 type CssRules = 'root' | 'space';
11
12 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
13     root: {
14         boxSizing: 'border-box',
15         overflow: 'auto',
16         padding: theme.spacing.unit
17     },
18     space: {
19         marginLeft: '15px'
20     }
21 });
22
23 export interface CodeSnippetDataProps {
24     lines: string[];
25     className?: string;
26     apiResponse?: boolean;
27     containerClassName?: string;
28     fontSize?: number;
29 }
30
31 type CodeSnippetProps = CodeSnippetDataProps & WithStyles<CssRules>;
32
33 export const CodeSnippet = withStyles(styles)(
34     ({ classes, lines, className, containerClassName, apiResponse, fontSize }: CodeSnippetProps) =>
35         <Typography
36             component="div"
37             className={classNames(classes.root, containerClassName, className)}>
38                 { lines.map((line: string, index: number) => {
39                     return <Typography key={index} style={{ fontSize: fontSize }} className={apiResponse ? classes.space : className} component="pre">{line}</Typography>;
40                 }) }
41         </Typography>
42     );