added PluginsOverview Page

This commit is contained in:
Florian Scholdei
2019-07-03 09:02:44 +02:00
parent 8f7ca34fa2
commit 4b3a897a32
6 changed files with 130 additions and 8 deletions

View File

@@ -10,6 +10,16 @@
"currentAppVersion": "Aktuelle Software-Versionsnummer"
}
},
"plugins": {
"title": "Plugins",
"installedSubtitle": "Installierte Plugins",
"availableSubtitle": "Verfügbare Plugins",
"menu": {
"pluginsNavLink": "Plugins",
"installedNavLink": "Installiert",
"availableNavLink": "Verfügbar"
}
},
"repositoryRole": {
"navLink": "Berechtigungsrollen",
"title": "Berechtigungsrollen",

View File

@@ -10,6 +10,16 @@
"currentAppVersion": "Current Application Version"
}
},
"plugins": {
"title": "Plugins",
"installedSubtitle": "Installed Plugins",
"availableSubtitle": "Available Plugins",
"menu": {
"pluginsNavLink": "Plugins",
"installedNavLink": "Installed",
"availableNavLink": "Available"
}
},
"repositoryRole": {
"navLink": "Permission Roles",
"title": "Permission Roles",

View File

@@ -10,6 +10,7 @@ import type { Links } from "@scm-manager/ui-types";
import { Page, Navigation, NavLink, Section, SubNavigation } from "@scm-manager/ui-components";
import { 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";
@@ -62,6 +63,35 @@ class Admin extends React.Component<Props> {
<Redirect exact from={url} to={`${url}/info`} />
<Route path={`${url}/info`} exact component={AdminDetails} />
<Route path={`${url}/settings/general`} exact component={GlobalConfig} />
<Redirect exact from={`${url}/plugins`} to={`${url}/plugins/installed/`} />
<Route
path={`${url}/plugins/installed`}
exact
render={() => (
<PluginsOverview baseUrl={`${url}/plugins/installed`} installed={true} />
)}
/>
<Route
path={`${url}/plugins/installed/:page`}
exact
render={() => (
<PluginsOverview baseUrl={`${url}/plugins/installed`} installed={true} />
)}
/>
<Route
path={`${url}/plugins/available`}
exact
render={() => (
<PluginsOverview baseUrl={`${url}/plugins/available`} installed={false} />
)}
/>
<Route
path={`${url}/plugins/available/:page`}
exact
render={() => (
<PluginsOverview baseUrl={`${url}/plugins/available`} installed={false} />
)}
/>
<Route
path={`${url}/role/:role`}
render={() => (
@@ -106,6 +136,20 @@ class Admin extends React.Component<Props> {
icon="fas fa-info-circle"
label={t("admin.menu.informationNavLink")}
/>
<SubNavigation
to={`${url}/plugins/`}
icon="fas fa-puzzle-piece"
label={t("plugins.menu.pluginsNavLink")}
>
<NavLink
to={`${url}/plugins/installed/`}
label={t("plugins.menu.installedNavLink")}
/>
<NavLink
to={`${url}/plugins/available/`}
label={t("plugins.menu.availableNavLink")}
/>
</SubNavigation>
<NavLink
to={`${url}/roles/`}
icon="fas fa-user-shield"

View File

@@ -1,10 +1,9 @@
// @flow
import React from "react";
import { connect } from "react-redux";
import { translate } from "react-i18next";
import {Loading, Subtitle} from "@scm-manager/ui-components";
import {getAppVersion} from "../../modules/indexResource";
import {connect} from "react-redux";
import Title from "@scm-manager/ui-components/src/layout/Title";
import { Loading, Title, Subtitle } from "@scm-manager/ui-components";
import { getAppVersion } from "../../modules/indexResource";
type Props = {
loading: boolean,
@@ -24,10 +23,12 @@ class AdminDetails extends React.Component<Props> {
return <Loading />;
}
return <>
<Title title={t("admin.information.currentAppVersion")}/>
<Subtitle subtitle={this.props.version}/>
</>;
return (
<>
<Title title={t("admin.information.currentAppVersion")} />
<Subtitle subtitle={this.props.version} />
</>
);
}
}

View File

@@ -0,0 +1,57 @@
// @flow
import React from "react";
import { translate } from "react-i18next";
import { Loading, Title, Subtitle, LinkPaginator, Notification } from "@scm-manager/ui-components";
import PluginsList from "../components/PluginsList";
type Props = {
loading: boolean,
error: Error,
baseUrl: string,
installed: boolean,
// context objects
t: string => string
};
class PluginsOverview extends React.Component<Props> {
render() {
const { loading, installed, t } = this.props;
if (loading) {
return <Loading />;
}
return (
<>
<Title title={t("plugins.title")} />
<Subtitle
subtitle={
installed
? t("plugins.installedSubtitle")
: t("plugins.availableSubtitle")
}
/>
{this.renderPluginsList()}
</>
);
}
renderPluginsList() {
const { collection, page, t } = this.props;
if (collection._embedded && collection._embedded.plugins.length > 0) {
return (
<>
<PluginsList plugins={collection._embedded.plugins} />
<LinkPaginator collection={collection} page={page} />
</>
);
}
return (
<Notification type="info">{t("plugins.noPlugins")}</Notification>
);
}
}
export default translate("admin")(PluginsOverview);