1
0
mirror of https://github.com/NginxProxyManager/nginx-proxy-manager.git synced 2025-11-02 16:53:15 +03:00
Files
nginx-proxy-manager/frontend/src/pages/Dashboard/index.tsx
2025-10-30 14:45:22 +10:00

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;