//
// SPDX-License-Identifier: AGPL-3.0
-import * as React from 'react';
+import React from 'react';
import { useState, useEffect, useRef } from 'react';
import { withStyles, WithStyles, StyleRulesCallback } from '@material-ui/core/styles';
import CircularProgress from '@material-ui/core/CircularProgress';
import { green } from '@material-ui/core/colors';
import { AxiosPromise } from 'axios';
import { DispatchProp } from 'react-redux';
-import { saveApiToken } from '~/store/auth/auth-action';
-import { navigateToRootProject } from '~/store/navigation/navigation-action';
+import { saveApiToken } from 'store/auth/auth-action';
+import { navigateToRootProject } from 'store/navigation/navigation-action';
+import { replace } from 'react-router-redux';
type CssRules = 'root' | 'loginBtn' | 'card' | 'wrapper' | 'progress';
type LoginFormProps = DispatchProp<any> & WithStyles<CssRules> & {
handleSubmit: (username: string, password: string) => AxiosPromise;
+ loginLabel?: string,
};
export const LoginForm = withStyles(styles)(
- ({ handleSubmit, dispatch, classes }: LoginFormProps) => {
+ ({ handleSubmit, loginLabel, dispatch, classes }: LoginFormProps) => {
const userInput = useRef<HTMLInputElement>(null);
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
handleSubmit(username, password)
.then((response) => {
setSubmitting(false);
- const apiToken = response.data.token;
- if (apiToken) {
+ if (response.data.uuid && response.data.api_token) {
+ const apiToken = `v2/${response.data.uuid}/${response.data.api_token}`;
+ const rd = new URL(window.location.href);
+ const rdUrl = rd.pathname + rd.search;
dispatch<any>(saveApiToken(apiToken)).finally(
- () => dispatch(navigateToRootProject));
+ () => rdUrl === '/' ? dispatch(navigateToRootProject) : dispatch(replace(rdUrl))
+ );
} else {
setError(true);
setHelperText(response.data.message || 'Please try again');
.catch((err) => {
setError(true);
setSubmitting(false);
- setHelperText(`${err.response && err.response.data && err.response.data.errors[0] || 'Error logging in: '+err}`);
+ setHelperText(`${(err.response && err.response.data && err.response.data.errors[0]) || 'Error logging in: '+err}`);
setFocus();
});
};
<Button variant="contained" size="large" color="primary"
className={classes.loginBtn} onClick={() => handleLogin()}
disabled={isSubmitting || isButtonDisabled}>
- Log in
+ {loginLabel || 'Log in'}
</Button>
</CardActions>
{ isSubmitting && <CircularProgress color='secondary' className={classes.progress} />}