import React from "react"; import { connect } from "react-redux"; import { compose } from "redux"; import { WithTranslation, withTranslation } from "react-i18next"; import { Redirect, Route, RouteComponentProps, Switch } from "react-router-dom"; import { ExtensionPoint } from "@scm-manager/ui-extensions"; import { Links } from "@scm-manager/ui-types"; import { Navigation, NavLink, Page, Section, SubNavigation, isMenuCollapsed, MenuContext, storeMenuCollapsed } from "@scm-manager/ui-components"; import { getAvailablePluginsLink, getInstalledPluginsLink, getLinks } from "../../modules/indexResource"; import AdminDetails from "./AdminDetails"; import PluginsOverview from "../plugins/containers/PluginsOverview"; import GlobalConfig from "./GlobalConfig"; import RepositoryRoles from "../roles/containers/RepositoryRoles"; import SingleRepositoryRole from "../roles/containers/SingleRepositoryRole"; import CreateRepositoryRole from "../roles/containers/CreateRepositoryRole"; type Props = RouteComponentProps & WithTranslation & { links: Links; availablePluginsLink: string; installedPluginsLink: string; }; type State = { menuCollapsed: boolean; }; class Admin extends React.Component { constructor(props: Props) { super(props); this.state = { menuCollapsed: isMenuCollapsed() }; } onCollapseAdminMenu = (collapsed: boolean) => { this.setState({ menuCollapsed: collapsed }, () => storeMenuCollapsed(collapsed)); }; stripEndingSlash = (url: string) => { if (url.endsWith("/")) { if (url.includes("role")) { return url.substring(0, url.length - 2); } return url.substring(0, url.length - 1); } return url; }; matchedUrl = () => { return this.stripEndingSlash(this.props.match.url); }; matchesRoles = (route: any) => { const url = this.matchedUrl(); const regex = new RegExp(`${url}/role/`); return route.location.pathname.match(regex); }; render() { const { links, availablePluginsLink, installedPluginsLink, t } = this.props; const { menuCollapsed } = this.state; const url = this.matchedUrl(); const extensionProps = { links, url }; return ( this.setState({ menuCollapsed: collapsed }) }} >
} /> } /> } /> } /> } /> } /> } /> } />
this.onCollapseAdminMenu(!menuCollapsed)} collapsed={menuCollapsed} > {(availablePluginsLink || installedPluginsLink) && ( {installedPluginsLink && ( )} {availablePluginsLink && ( )} )}
); } } const mapStateToProps = (state: any) => { const links = getLinks(state); const availablePluginsLink = getAvailablePluginsLink(state); const installedPluginsLink = getInstalledPluginsLink(state); return { links, availablePluginsLink, installedPluginsLink }; }; export default compose(connect(mapStateToProps), withTranslation("admin"))(Admin);