You've already forked nginx-proxy-manager
mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-11-02 16:53:15 +03:00
146 lines
4.1 KiB
TypeScript
146 lines
4.1 KiB
TypeScript
import { IconArrowsCross, IconBolt, IconBoltOff, IconDisc } from "@tabler/icons-react";
|
|
import { useNavigate } from "react-router-dom";
|
|
import { HasPermission } from "src/components";
|
|
import { useHostReport } from "src/hooks";
|
|
import { T } from "src/locale";
|
|
|
|
const Dashboard = () => {
|
|
const { data: hostReport } = useHostReport();
|
|
const navigate = useNavigate();
|
|
|
|
return (
|
|
<div>
|
|
<h2>
|
|
<T id="dashboard" />
|
|
</h2>
|
|
<div className="row row-deck row-cards">
|
|
<div className="col-12 my-4">
|
|
<div className="row row-cards">
|
|
<HasPermission permission="proxyHosts" type="view" hideError>
|
|
<div className="col-sm-6 col-lg-3">
|
|
<a
|
|
href="/nginx/proxy"
|
|
className="card card-sm card-link card-link-pop"
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
navigate("/nginx/proxy");
|
|
}}
|
|
>
|
|
<div className="card-body">
|
|
<div className="row align-items-center">
|
|
<div className="col-auto">
|
|
<span className="bg-green text-white avatar">
|
|
<IconBolt />
|
|
</span>
|
|
</div>
|
|
<div className="col">
|
|
<div className="font-weight-medium">
|
|
<T id="proxy-hosts.count" data={{ count: hostReport?.proxy }} />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</HasPermission>
|
|
<HasPermission permission="redirectionHosts" type="view" hideError>
|
|
<div className="col-sm-6 col-lg-3">
|
|
<a
|
|
href="/nginx/redirection"
|
|
className="card card-sm card-link card-link-pop"
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
navigate("/nginx/redirection");
|
|
}}
|
|
>
|
|
<div className="card-body">
|
|
<div className="row align-items-center">
|
|
<div className="col-auto">
|
|
<span className="bg-yellow text-white avatar">
|
|
<IconArrowsCross />
|
|
</span>
|
|
</div>
|
|
<div className="col">
|
|
<T
|
|
id="redirection-hosts.count"
|
|
data={{ count: hostReport?.redirection }}
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</HasPermission>
|
|
<HasPermission permission="streams" type="view" hideError>
|
|
<div className="col-sm-6 col-lg-3">
|
|
<a
|
|
href="/nginx/stream"
|
|
className="card card-sm card-link card-link-pop"
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
navigate("/nginx/stream");
|
|
}}
|
|
>
|
|
<div className="card-body">
|
|
<div className="row align-items-center">
|
|
<div className="col-auto">
|
|
<span className="bg-blue text-white avatar">
|
|
<IconDisc />
|
|
</span>
|
|
</div>
|
|
<div className="col">
|
|
<T id="streams.count" data={{ count: hostReport?.stream }} />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</HasPermission>
|
|
<HasPermission permission="deadHosts" type="view" hideError>
|
|
<div className="col-sm-6 col-lg-3">
|
|
<a
|
|
href="/nginx/404"
|
|
className="card card-sm card-link card-link-pop"
|
|
onClick={(e) => {
|
|
e.preventDefault();
|
|
navigate("/nginx/404");
|
|
}}
|
|
>
|
|
<div className="card-body">
|
|
<div className="row align-items-center">
|
|
<div className="col-auto">
|
|
<span className="bg-red text-white avatar">
|
|
<IconBoltOff />
|
|
</span>
|
|
</div>
|
|
<div className="col">
|
|
<T id="dead-hosts.count" data={{ count: hostReport?.dead }} />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</HasPermission>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<pre>
|
|
<code>{`Todo:
|
|
|
|
- check mobile
|
|
- REDO SCREENSHOTS in docs folder
|
|
- check permissions in all places
|
|
|
|
More for api, then implement here:
|
|
- Add error message_18n for all backend errors
|
|
- properly wrap all logger.debug called in isDebug check
|
|
- add new api endpoint changes to swagger docs
|
|
|
|
`}</code>
|
|
</pre>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Dashboard;
|