X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/d171dc7d61d9ab3d952bb5038b2d47dbeaaa8ba2..f0fb75714e54f5191a7026eedbec757ee22a682c:/src/views-components/current-token-dialog/current-token-dialog.tsx?ds=sidebyside diff --git a/src/views-components/current-token-dialog/current-token-dialog.tsx b/src/views-components/current-token-dialog/current-token-dialog.tsx index ba6c3258..9cb08f8b 100644 --- a/src/views-components/current-token-dialog/current-token-dialog.tsx +++ b/src/views-components/current-token-dialog/current-token-dialog.tsx @@ -3,17 +3,17 @@ // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; -import { Dialog, DialogActions, DialogTitle, DialogContent, WithStyles, withStyles, StyleRulesCallback, Button, Typography, Paper } from '@material-ui/core'; +import { Dialog, DialogActions, DialogTitle, DialogContent, WithStyles, withStyles, StyleRulesCallback, Button, Typography } from '@material-ui/core'; +import * as CopyToClipboard from 'react-copy-to-clipboard'; import { ArvadosTheme } from '~/common/custom-theme'; import { withDialog } from '~/store/dialog/with-dialog'; import { WithDialogProps } from '~/store/dialog/with-dialog'; -import { compose } from 'redux'; -import { connect } from 'react-redux'; -import { CurrentTokenDialogData, getCurrentTokenDialogData } from '~/store/current-token-dialog/current-token-dialog-actions'; -import { RootState } from '~/store/store'; +import { connect, DispatchProp } from 'react-redux'; +import { CurrentTokenDialogData, getCurrentTokenDialogData, CURRENT_TOKEN_DIALOG_NAME } from '~/store/current-token-dialog/current-token-dialog-actions'; import { DefaultCodeSnippet } from '~/components/default-code-snippet/default-code-snippet'; +import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions'; -type CssRules = 'link' | 'paper' | 'button'; +type CssRules = 'link' | 'paper' | 'button' | 'copyButton'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ link: { @@ -30,18 +30,34 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ button: { fontSize: '0.8125rem', fontWeight: 600 + }, + copyButton: { + boxShadow: 'none', + marginTop: theme.spacing.unit * 2, + marginBottom: theme.spacing.unit * 2, } }); -type CurrentTokenProps = CurrentTokenDialogData & WithDialogProps<{}> & WithStyles; +type CurrentTokenProps = CurrentTokenDialogData & WithDialogProps<{}> & WithStyles & DispatchProp; + +export class CurrentTokenDialogComponent extends React.Component { + onCopy = (message: string) => { + this.props.dispatch(snackbarActions.OPEN_SNACKBAR({ + message, + hideDuration: 2000, + kind: SnackbarKind.SUCCESS + })); + } + + getSnippet = ({ apiHost, currentToken }: CurrentTokenDialogData) => + `HISTIGNORE=$HISTIGNORE:'export ARVADOS_API_TOKEN=*' +export ARVADOS_API_TOKEN=${currentToken} +export ARVADOS_API_HOST=${apiHost} +unset ARVADOS_API_HOST_INSECURE` -export const CurrentTokenDialog = compose( - withStyles(styles), - connect(getCurrentTokenDialogData), - withDialog('currentTokenDialog') -)(class extends React.Component { render() { const { classes, open, closeDialog, ...data } = this.props; + return Current Token - + The Arvados API token is a secret key that enables the Arvados SDKs to access Arvados with the proper permissions. - - For more information see - - Getting an API token. - - - - - Paste the following lines at a shell prompt to set up the necessary environment for Arvados SDKs to authenticate to your klingenc account. + + For more information see + + Getting an API token. + - - + + + Paste the following lines at a shell prompt to set up the necessary environment for Arvados SDKs to authenticate to your account. + + + this.onCopy('Token copied to clipboard')}> + + + Arvados virtual machines do this for you automatically. This setup is needed only when you use the API remotely (e.g., from your own workstation). - + @@ -74,10 +100,9 @@ export const CurrentTokenDialog = compose( ; } } -); -const getSnippet = ({ apiHost, currentToken }: CurrentTokenDialogData) => -`HISTIGNORE=$HISTIGNORE:'export ARVADOS_API_TOKEN=*' -export ARVADOS_API_TOKEN=${currentToken} -export ARVADOS_API_HOST=${apiHost} -unset ARVADOS_API_HOST_INSECURE`; +export const CurrentTokenDialog = + withStyles(styles)( + connect(getCurrentTokenDialogData)( + withDialog(CURRENT_TOKEN_DIALOG_NAME)(CurrentTokenDialogComponent))); +