111 lines
3.3 KiB
JavaScript
111 lines
3.3 KiB
JavaScript
import { ApplicationContainer } from 'arm-core-layouts';
|
|
import { Routing } from 'arm-router';
|
|
import React, { PureComponent, useCallback, useEffect, useState } from 'react';
|
|
import { connect } from 'react-redux';
|
|
import { Prompt, Route, Switch, useHistory } from 'react-router-dom';
|
|
|
|
import AccountActions from './account/AccountActions.js';
|
|
import { getMasterPageMenuInfo } from './MasterPage.jsx';
|
|
|
|
|
|
export default class Standalone extends PureComponent {
|
|
state = { to: '' }
|
|
|
|
componentDidMount() {
|
|
this.initStandalone();
|
|
AccountActions.getSession().then(this.checkIsLogged);
|
|
}
|
|
|
|
initStandalone() {
|
|
const { history } = this.props; //route props
|
|
this.setState(() => ({ to: this.getBasePath() }));
|
|
history.push('/standalone');
|
|
}
|
|
|
|
getBasePath(){
|
|
const { pathname } = this.props.location; //route props
|
|
const crumbs = pathname.split('/');
|
|
crumbs.splice(0, 1); //rimuovo lo spazio creato dal primo slash
|
|
|
|
if (pathname.includes('pk')){
|
|
return `/${crumbs[0]}/${crumbs[1]}/${crumbs[2]}/${crumbs[3]}/${crumbs[4]}`;
|
|
}
|
|
|
|
return `/${crumbs[0]}/${crumbs[1]}`;
|
|
}
|
|
|
|
checkIsLogged = (utente) => {
|
|
const {
|
|
history, match, //route props
|
|
postLogin //dispatch functions
|
|
} = this.props;
|
|
const { path } = match;
|
|
const { to } = this.state;
|
|
if (!utente) history.push(`${path}/login`);
|
|
else {
|
|
postLogin(utente).then(() => history.push(to));
|
|
}
|
|
}
|
|
|
|
getPaths() {
|
|
const { utente } = this.props;
|
|
|
|
if (!utente) return null;
|
|
|
|
return <Routing routesInfo={getMasterPageMenuInfo()}/>
|
|
}
|
|
|
|
render() {
|
|
const { utente, opzioni } = this.props;
|
|
const { path } = this.props.match;
|
|
const { to, section } = this.state;
|
|
|
|
return (
|
|
<>
|
|
<ApplicationContainer>
|
|
<Switch>
|
|
<Route path={`${path}/login`} render={(props) => <Login {...props} to={to} />} />
|
|
{this.getPaths()}
|
|
{utente && <Route component={NotFound} />}
|
|
</Switch>
|
|
</ApplicationContainer>
|
|
<PromptStandalone />
|
|
</>
|
|
);
|
|
}
|
|
}
|
|
|
|
const mapStateToProps = (state) => ({
|
|
utente: state.account.utente,
|
|
opzioni: state.app.opzioni
|
|
});
|
|
|
|
const mapDispatchToProps = (dispatch) => ({
|
|
postLogin: (resolve) => dispatch(AccountActions.postLogin(resolve))
|
|
});
|
|
|
|
Standalone = connect(mapStateToProps, mapDispatchToProps)(Standalone);
|
|
|
|
function PromptStandalone(){
|
|
const history = useHistory();
|
|
|
|
const [ nextLocation, setNextLocation ] = useState('');
|
|
|
|
useEffect(() => {
|
|
if (nextLocation) history.push(nextLocation);
|
|
if (nextLocation !== '') setNextLocation('');
|
|
}, [nextLocation]);
|
|
|
|
const checkIsInStandalone = useCallback((location) => {
|
|
const pathname = location.pathname;
|
|
if (pathname.includes('standalone')) return true;
|
|
|
|
const newLocation = `/standalone${pathname}`;
|
|
console.log('[PromptStandalone]: converting location', location, 'to', newLocation);
|
|
setNextLocation(newLocation);
|
|
|
|
return false;
|
|
}, [history]);
|
|
|
|
return <Prompt when={true} message={checkIsInStandalone} />
|
|
} |