'use strict'; import './lib/public-path'; import React, {Component} from 'react'; import ReactDOM from 'react-dom'; import {I18nextProvider} from 'react-i18next'; import i18n, {withTranslation} from './lib/i18n'; import account from './account/root'; import login from './login/root'; import blacklist from './blacklist/root'; import lists from './lists/root'; import namespaces from './namespaces/root'; import reports from './reports/root'; import campaigns from './campaigns/root'; import templates from './templates/root'; import users from './users/root'; import sendConfigurations from './send-configurations/root'; import settings from './settings/root'; import { DropdownLink, getLanguageChooser, NavDropdown, NavLink, Section } from "./lib/page"; import mailtrainConfig from 'mailtrainConfig'; import Home from "./Home"; import { DropdownActionLink, Icon } from "./lib/bootstrap-components"; import {Link} from "react-router-dom"; import axios from './lib/axios'; import {getUrl} from "./lib/urls"; import {withComponentMixins} from "./lib/decorator-helpers"; const topLevelMenuKeys = ['lists', 'templates', 'campaigns']; if (mailtrainConfig.reportsEnabled) { topLevelMenuKeys.push('reports'); } @withComponentMixins([ withTranslation ]) class Root extends Component { constructor(props) { super(props); } render() { const t = this.props.t; const structure = {}; // The MainMenu component is defined here in order to avoid recreating menu structure on every change in the main menu // This is because Root component depends only on the language, thus it is redrawn (and the structure is recomputed) only when the language changes class MainMenu extends Component { constructor(props) { super(props); } async logout() { await axios.post(getUrl('rest/logout')); window.location = getUrl(); } render() { const path = this.props.location.pathname; const topLevelItems = structure[""].children; const topLevelMenu = []; for (const entryKey of topLevelMenuKeys) { const entry = topLevelItems[entryKey]; const link = entry.link || entry.externalLink; if (link && path.startsWith(link)) { topLevelMenu.push({entry.title} {t('current')}); } else { topLevelMenu.push({entry.title}); } } if (mailtrainConfig.isAuthenticated) { return ( <> ); } else { return ( <> ); } } } structure[''] ={ title: t('home'), link: '/', panelComponent: Home, primaryMenuComponent: MainMenu, children: { ...login.getMenus(t), ...lists.getMenus(t), ...reports.getMenus(t), ...templates.getMenus(t), ...namespaces.getMenus(t), ...users.getMenus(t), ...blacklist.getMenus(t), ...account.getMenus(t), ...settings.getMenus(t), ...sendConfigurations.getMenus(t), ...campaigns.getMenus(t) } }; return (
); } } export default function() { ReactDOM.render(,document.getElementById('root')); };