From: Michal Klobukowski Date: Fri, 7 Sep 2018 07:36:28 +0000 (+0200) Subject: Restore current-token-dialog X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/d171dc7d61d9ab3d952bb5038b2d47dbeaaa8ba2 Restore current-token-dialog Feature #14149 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/common/config.ts b/src/common/config.ts index 061f9c00af..1ab73294b0 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -56,8 +56,10 @@ export const fetchConfig = () => { .get(CONFIG_URL + "?nocache=" + (new Date()).getTime()) .then(response => response.data) .catch(() => Promise.resolve(getDefaultConfig())) - .then(config => Axios.get(getDiscoveryURL(config.API_HOST))) - .then(response => response.data); + .then(config => Axios + .get(getDiscoveryURL(config.API_HOST)) + .then(response => ({ config: response.data, apiHost: config.API_HOST }))); + }; export const mockConfig = (config: Partial): Config => ({ diff --git a/src/components/code-snippet/code-snippet.tsx b/src/components/code-snippet/code-snippet.tsx index b622210f00..eb0e709a9b 100644 --- a/src/components/code-snippet/code-snippet.tsx +++ b/src/components/code-snippet/code-snippet.tsx @@ -14,7 +14,7 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ width: '100%', height: 'auto', maxHeight: '550px', - overflow: 'scroll', + overflow: 'auto', padding: theme.spacing.unit } }); diff --git a/src/components/default-code-snippet/default-code-snippet.tsx b/src/components/default-code-snippet/default-code-snippet.tsx index 541f390616..b8c0a7be93 100644 --- a/src/components/default-code-snippet/default-code-snippet.tsx +++ b/src/components/default-code-snippet/default-code-snippet.tsx @@ -19,7 +19,7 @@ const theme = createMuiTheme({ } }, typography: { - fontFamily: 'VT323' + fontFamily: 'monospace' } }); diff --git a/src/index.tsx b/src/index.tsx index a921b47138..e982b454ec 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -35,6 +35,7 @@ import { ServiceRepository } from '~/services/services'; import { initWebSocket } from '~/websocket/websocket'; import { Config } from '~/common/config'; import { addRouteChangeHandlers } from './routes/route-change-handlers'; +import { setCurrentTokenDialogApiHost } from '~/store/current-token-dialog/current-token-dialog-actions'; const getBuildNumber = () => "BN-" + (process.env.REACT_APP_BUILD_NUMBER || "dev"); const getGitCommit = () => "GIT-" + (process.env.REACT_APP_GIT_COMMIT || "latest").substr(0, 7); @@ -56,13 +57,14 @@ addMenuActionSet(ContextMenuKind.PROCESS, processActionSet); addMenuActionSet(ContextMenuKind.TRASH, trashActionSet); fetchConfig() - .then((config) => { + .then(({ config, apiHost }) => { const history = createBrowserHistory(); const services = createServices(config); const store = configureStore(history, services); store.subscribe(initListener(history, store, services, config)); store.dispatch(initAuth()); + store.dispatch(setCurrentTokenDialogApiHost(apiHost)); const TokenComponent = (props: any) => ; const WorkbenchComponent = (props: any) => ; diff --git a/src/store/current-token-dialog/current-token-dialog-actions.tsx b/src/store/current-token-dialog/current-token-dialog-actions.tsx new file mode 100644 index 0000000000..030b18e218 --- /dev/null +++ b/src/store/current-token-dialog/current-token-dialog-actions.tsx @@ -0,0 +1,26 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +import { dialogActions } from "~/store/dialog/dialog-actions"; +import { getProperty } from '../properties/properties'; +import { propertiesActions } from '~/store/properties/properties-actions'; +import { RootState } from '~/store/store'; + +export const CURRENT_TOKEN_DIALOG_NAME = 'currentTokenDialog'; +const API_HOST_PROPERTY_NAME = 'apiHost'; + +export interface CurrentTokenDialogData { + currentToken: string; + apiHost: string; +} + +export const setCurrentTokenDialogApiHost = (apiHost: string) => + propertiesActions.SET_PROPERTY({ key: API_HOST_PROPERTY_NAME, value: apiHost }); + +export const getCurrentTokenDialogData = (state: RootState): CurrentTokenDialogData => ({ + apiHost: getProperty(API_HOST_PROPERTY_NAME)(state.properties) || '', + currentToken: state.auth.apiToken || '', +}); + +export const openCurrentTokenDialog = dialogActions.OPEN_DIALOG({ id: CURRENT_TOKEN_DIALOG_NAME, data: {} }); 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 fca9f05982..ba6c3258f4 100644 --- a/src/views-components/current-token-dialog/current-token-dialog.tsx +++ b/src/views-components/current-token-dialog/current-token-dialog.tsx @@ -5,6 +5,13 @@ import * as React from 'react'; import { Dialog, DialogActions, DialogTitle, DialogContent, WithStyles, withStyles, StyleRulesCallback, Button, Typography, Paper } from '@material-ui/core'; 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 { DefaultCodeSnippet } from '~/components/default-code-snippet/default-code-snippet'; type CssRules = 'link' | 'paper' | 'button'; @@ -26,65 +33,51 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ } }); -interface CurrentTokenDataProps { - currentToken?: string; - open: boolean; -} - -interface CurrentTokenActionProps { - handleClose: () => void; -} - -type CurrentTokenProps = CurrentTokenDataProps & CurrentTokenActionProps & WithStyles; - -export const CurrentTokenDialog = withStyles(styles)( - class extends React.Component { +type CurrentTokenProps = CurrentTokenDialogData & WithDialogProps<{}> & WithStyles; - render() { - const { classes, open, handleClose, currentToken } = 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. +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 + For more information see - Getting an API token. + 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. - - - Paste the following lines at a shell prompt to set up the necessary environment for Arvados SDKs to authenticate to your klingenc account. - - - - - HISTIGNORE=$HISTIGNORE:'export ARVADOS_API_TOKEN=*' - - - export ARVADOS_API_TOKEN={currentToken} - - - export ARVADOS_API_HOST=api.ardev.roche.com - - - unset ARVADOS_API_HOST_INSECURE - - - - Arvados + + + 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). + do this for you automatically. This setup is needed only when you use the API remotely (e.g., from your own workstation). - - - - - - ); - } + + + + + ; } +} ); + +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`; diff --git a/src/views-components/main-app-bar/account-menu.tsx b/src/views-components/main-app-bar/account-menu.tsx index 2597c19fc1..fdd8123f28 100644 --- a/src/views-components/main-app-bar/account-menu.tsx +++ b/src/views-components/main-app-bar/account-menu.tsx @@ -10,6 +10,7 @@ import { UserPanelIcon } from "~/components/icon/icon"; import { DispatchProp, connect } from 'react-redux'; import { logout } from "~/store/auth/auth-action"; import { RootState } from "~/store/store"; +import { openCurrentTokenDialog } from '../../store/current-token-dialog/current-token-dialog-actions'; interface AccountMenuProps { user?: User; @@ -29,7 +30,7 @@ export const AccountMenu = connect(mapStateToProps)( {getUserFullname(user)} - Current token + dispatch(openCurrentTokenDialog)}>Current token My account dispatch(logout())}>Logout diff --git a/src/views/workbench/workbench.tsx b/src/views/workbench/workbench.tsx index 94ef7db1c8..02b4abf5df 100644 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@ -77,8 +77,6 @@ interface WorkbenchGeneralProps { type WorkbenchProps = WorkbenchDataProps & WorkbenchGeneralProps & DispatchProp & WithStyles; interface WorkbenchState { - isCurrentTokenDialogOpen: boolean; - anchorEl: any; searchText: string; } @@ -91,8 +89,6 @@ export const Workbench = withStyles(styles)( )( class extends React.Component { state = { - isCurrentTokenDialogOpen: false, - anchorEl: null, searchText: "", }; @@ -159,10 +155,7 @@ export const Workbench = withStyles(styles)( - + ; } @@ -175,9 +168,6 @@ export const Workbench = withStyles(styles)( this.props.dispatch(detailsPanelActions.TOGGLE_DETAILS_PANEL()); } - toggleCurrentTokenModal = () => { - this.setState({ isCurrentTokenDialogOpen: !this.state.isCurrentTokenDialogOpen }); - } } ) );