Merge branch 'main' into 21842-improve-sharing
[arvados.git] / services / workbench2 / src / views-components / ssh-keys-dialog / public-key-dialog.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 { compose } from 'redux';
7 import { CustomStyleRulesCallback } from 'common/custom-theme';
8 import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@mui/material';
9 import { WithStyles } from '@mui/styles';
10 import withStyles from '@mui/styles/withStyles';
11 import { WithDialogProps, withDialog } from "store/dialog/with-dialog";
12 import { SSH_KEY_PUBLIC_KEY_DIALOG } from 'store/auth/auth-action-ssh';
13 import { ArvadosTheme } from 'common/custom-theme';
14 import { DefaultCodeSnippet } from 'components/default-code-snippet/default-code-snippet';
15
16 type CssRules = 'codeSnippet';
17
18 const styles: CustomStyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
19     codeSnippet: {
20         borderRadius: theme.spacing(0.5),
21         border: '1px solid',
22         borderColor: theme.palette.grey["400"],
23         '& pre': {
24             wordWrap: 'break-word',
25             whiteSpace: 'pre-wrap'
26         }
27     },
28 });
29
30 interface PublicKeyDialogDataProps {
31     name: string;
32     publicKey: string;
33 }
34
35 export const PublicKeyDialog = compose(
36     withDialog(SSH_KEY_PUBLIC_KEY_DIALOG),
37     withStyles(styles))(
38         ({ open, closeDialog, data, classes }: WithDialogProps<PublicKeyDialogDataProps> & WithStyles<CssRules>) =>
39             <Dialog open={open}
40                 onClose={closeDialog}
41                 fullWidth
42                 maxWidth='sm'>
43                 <DialogTitle>{data.name} - SSH Key</DialogTitle>
44                 <DialogContent>
45                     {data && data.publicKey && <DefaultCodeSnippet
46                         className={classes.codeSnippet}
47                         lines={data.publicKey.split(' ')} />}
48                 </DialogContent>
49                 <DialogActions>
50                     <Button
51                         variant='text'
52                         color='primary'
53                         onClick={closeDialog}>
54                         Close
55                     </Button>
56                 </DialogActions>
57             </Dialog>
58     );