mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-05 04:34:37 +08:00
132 lines
3.8 KiB
JavaScript
132 lines
3.8 KiB
JavaScript
// @flow
|
|
import React, { Component } from "react";
|
|
import { Route, Switch, Redirect } from "react-router-dom";
|
|
import { LinkContainer } from "react-router-bootstrap";
|
|
import { Nav, NavItem } from "react-bootstrap";
|
|
import { FormattedMessage } from "react-intl";
|
|
|
|
import {
|
|
ROOT_PATH,
|
|
SETTINGS_PATH,
|
|
SETTINGS_TEAMS_ROUTE,
|
|
SETTINGS_TEAM_ROUTE,
|
|
SETTINGS_ACCOUNT_PROFILE,
|
|
SETTINGS_ACCOUNT_PREFERENCES,
|
|
SETTINGS_NEW_TEAM_ROUTE
|
|
} from "../../config/routes";
|
|
|
|
import PageTitle from "../../components/PageTitle";
|
|
import NotFound from "../../components/404/NotFound";
|
|
import SettingsProfile from "./scenes/profile";
|
|
import SettingsPreferences from "./scenes/preferences";
|
|
import SettingsTeams from "./scenes/teams";
|
|
import SettingsTeam from "./scenes/team";
|
|
import SettingsNewTeam from "./scenes/teams/new";
|
|
|
|
type State = {
|
|
active: string
|
|
}
|
|
|
|
let componentMounted = false;
|
|
|
|
export default class SettingsPage extends Component<*, State> {
|
|
constructor(props: *) {
|
|
super(props);
|
|
|
|
this.state = {
|
|
active: "1"
|
|
};
|
|
(this: any).handleSelect = this.handleSelect.bind(this);
|
|
(this: any).setTabState = this.setTabState.bind(this);
|
|
}
|
|
|
|
componentDidMount(): void {
|
|
componentMounted = true;
|
|
}
|
|
|
|
componentWillUnmount(): void {
|
|
componentMounted = false;
|
|
}
|
|
|
|
setTabState(tab: string): void {
|
|
if (tab !== this.state.active && componentMounted) {
|
|
(this: any).setState({ active: tab });
|
|
}
|
|
}
|
|
|
|
handleSelect(eventKey: string): void {
|
|
event.preventDefault();
|
|
(this: any).setState({ active: eventKey });
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<PageTitle localeID="page_title.root">
|
|
<div className="container">
|
|
<Nav bsStyle="tabs" activeKey="1" onSelect={this.handleSelect}>
|
|
<LinkContainer
|
|
active={this.state.active === "1"}
|
|
to={SETTINGS_ACCOUNT_PROFILE}
|
|
>
|
|
<NavItem eventKey="1">
|
|
<FormattedMessage id="settings_page.account" />
|
|
</NavItem>
|
|
</LinkContainer>
|
|
<LinkContainer
|
|
to={SETTINGS_TEAMS_ROUTE}
|
|
active={this.state.active === "2"}
|
|
>
|
|
<NavItem eventKey="2">
|
|
<FormattedMessage id="settings_page.teams" />
|
|
</NavItem>
|
|
</LinkContainer>
|
|
</Nav>
|
|
<Switch>
|
|
<Route exact path={ROOT_PATH} component={SettingsPreferences} />
|
|
<Route
|
|
exact
|
|
path={SETTINGS_PATH}
|
|
render={() => (
|
|
<Redirect
|
|
to={SETTINGS_ACCOUNT_PROFILE}
|
|
component={SettingsPreferences}
|
|
/>
|
|
)}
|
|
/>
|
|
<Route
|
|
path={SETTINGS_NEW_TEAM_ROUTE}
|
|
component={props => (
|
|
<SettingsNewTeam {...props} tabState={this.setTabState} />
|
|
)}
|
|
/>
|
|
<Route
|
|
path={SETTINGS_TEAM_ROUTE}
|
|
component={props => (
|
|
<SettingsTeam {...props} tabState={this.setTabState} />
|
|
)}
|
|
/>
|
|
<Route
|
|
path={SETTINGS_TEAMS_ROUTE}
|
|
component={props => (
|
|
<SettingsTeams {...props} tabState={this.setTabState} />
|
|
)}
|
|
/>
|
|
<Route
|
|
path={SETTINGS_ACCOUNT_PROFILE}
|
|
component={props => (
|
|
<SettingsProfile {...props} tabState={this.setTabState} />
|
|
)}
|
|
/>
|
|
<Route
|
|
path={SETTINGS_ACCOUNT_PREFERENCES}
|
|
component={props => (
|
|
<SettingsPreferences {...props} tabState={this.setTabState} />
|
|
)}
|
|
/>
|
|
<Route component={NotFound} />
|
|
</Switch>
|
|
</div>
|
|
</PageTitle>
|
|
);
|
|
}
|
|
}
|