import { inject, observer } from 'mobx-react'; import { Component } from 'react'; import { type WrappedComponentProps, defineMessages, injectIntl, } from 'react-intl'; import { NavLink } from 'react-router-dom'; import type { StoresProps } from '../../../@types/ferdium-components.types'; import { LIVE_FERDIUM_API, LIVE_FRANZ_API, LOCAL_SERVER, } from '../../../config'; import globalMessages from '../../../i18n/globalMessages'; const messages = defineMessages({ availableServices: { id: 'settings.navigation.availableServices', defaultMessage: 'Available services', }, yourServices: { id: 'settings.navigation.yourServices', defaultMessage: 'Your services', }, yourWorkspaces: { id: 'settings.navigation.yourWorkspaces', defaultMessage: 'Your workspaces', }, account: { id: 'settings.navigation.account', defaultMessage: 'Account', }, team: { id: 'settings.navigation.team', defaultMessage: 'Manage Team', }, releaseNotes: { id: 'settings.navigation.releaseNotes', defaultMessage: 'Release Notes', }, supportFerdium: { id: 'settings.navigation.supportFerdium', defaultMessage: 'About Ferdium', }, logout: { id: 'settings.navigation.logout', defaultMessage: 'Logout', }, }); interface IProps extends Partial, WrappedComponentProps { serviceCount: number; workspaceCount: number; } @inject('stores', 'actions') @observer class SettingsNavigation extends Component { handleLogout(): void { const isUsingWithoutAccount = this.props.stores!.settings.app.server === LOCAL_SERVER; // Remove current auth token localStorage.removeItem('authToken'); if (isUsingWithoutAccount) { // Reset server back to Ferdium API this.props.actions!.settings.update({ type: 'app', data: { server: LIVE_FERDIUM_API, }, }); } this.props.stores!.user.isLoggingOut = true; this.props.stores!.router.push('/auth/welcome'); // Reload Ferdium, otherwise many settings won't sync correctly with the server // after logging into another account window.location.reload(); } render() { const { serviceCount, workspaceCount, stores, intl } = this.props; const isUsingWithoutAccount = stores!.settings.app.server === LOCAL_SERVER; const isUsingFranzServer = stores!.settings.app.server === LIVE_FRANZ_API; return (
isActive ? 'settings-navigation__link is-active' : 'settings-navigation__link' } > {intl.formatMessage(messages.availableServices)} isActive ? 'settings-navigation__link is-active' : 'settings-navigation__link' } > {intl.formatMessage(messages.yourServices)}{' '} {serviceCount} isActive ? 'settings-navigation__link is-active' : 'settings-navigation__link' } > {intl.formatMessage(messages.yourWorkspaces)}{' '} {workspaceCount} {!isUsingWithoutAccount && ( isActive ? 'settings-navigation__link is-active' : 'settings-navigation__link' } > {intl.formatMessage(messages.account)} )} {isUsingFranzServer && ( isActive ? 'settings-navigation__link is-active' : 'settings-navigation__link' } > {intl.formatMessage(messages.team)} )} isActive ? 'settings-navigation__link is-active' : 'settings-navigation__link' } > {intl.formatMessage(globalMessages.settings)} {stores!.settings.app.automaticUpdates && (stores!.ui.showServicesUpdatedInfoBar || stores!.app.updateStatus === stores!.app.updateStatusTypes.AVAILABLE || stores!.app.updateStatus === stores!.app.updateStatusTypes.DOWNLOADED) && ( )} isActive ? 'settings-navigation__link is-active' : 'settings-navigation__link' } > {intl.formatMessage(messages.releaseNotes)} isActive ? 'settings-navigation__link is-active' : 'settings-navigation__link' } > {intl.formatMessage(messages.supportFerdium)}
); } } export default injectIntl(SettingsNavigation);