| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- 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;
|