11import { IconArrowsCross , IconBolt , IconBoltOff , IconDisc } from "@tabler/icons-react" ;
22import { useNavigate } from "react-router-dom" ;
3+ import { HasPermission } from "src/components" ;
34import { useHostReport } from "src/hooks" ;
45import { T } from "src/locale" ;
56
@@ -15,100 +16,111 @@ const Dashboard = () => {
1516 < div className = "row row-deck row-cards" >
1617 < div className = "col-12 my-4" >
1718 < div className = "row row-cards" >
18- < div className = "col-sm-6 col-lg-3" >
19- < a
20- href = "/nginx/proxy"
21- className = "card card-sm card-link card-link-pop"
22- onClick = { ( e ) => {
23- e . preventDefault ( ) ;
24- navigate ( "/nginx/proxy" ) ;
25- } }
26- >
27- < div className = "card-body" >
28- < div className = "row align-items-center" >
29- < div className = "col-auto" >
30- < span className = "bg-green text-white avatar" >
31- < IconBolt />
32- </ span >
33- </ div >
34- < div className = "col" >
35- < div className = "font-weight-medium" >
36- < T id = "proxy-hosts.count" data = { { count : hostReport ?. proxy } } />
19+ < HasPermission permission = "proxyHosts" type = "view" hideError >
20+ < div className = "col-sm-6 col-lg-3" >
21+ < a
22+ href = "/nginx/proxy"
23+ className = "card card-sm card-link card-link-pop"
24+ onClick = { ( e ) => {
25+ e . preventDefault ( ) ;
26+ navigate ( "/nginx/proxy" ) ;
27+ } }
28+ >
29+ < div className = "card-body" >
30+ < div className = "row align-items-center" >
31+ < div className = "col-auto" >
32+ < span className = "bg-green text-white avatar" >
33+ < IconBolt />
34+ </ span >
35+ </ div >
36+ < div className = "col" >
37+ < div className = "font-weight-medium" >
38+ < T id = "proxy-hosts.count" data = { { count : hostReport ?. proxy } } />
39+ </ div >
3740 </ div >
3841 </ div >
3942 </ div >
40- </ div >
41- </ a >
42- </ div >
43- < div className = "col-sm-6 col-lg-3" >
44- < a
45- href = "/nginx/redirection"
46- className = "card card-sm card-link card-link-pop"
47- onClick = { ( e ) => {
48- e . preventDefault ( ) ;
49- navigate ( "/nginx/redirection" ) ;
50- } }
51- >
52- < div className = "card-body" >
53- < div className = "row align-items-center" >
54- < div className = "col-auto" >
55- < span className = "bg-yellow text-white avatar" >
56- < IconArrowsCross />
57- </ span >
58- </ div >
59- < div className = "col" >
60- < T id = "redirection-hosts.count" data = { { count : hostReport ?. redirection } } />
43+ </ a >
44+ </ div >
45+ </ HasPermission >
46+ < HasPermission permission = "redirectionHosts" type = "view" hideError >
47+ < div className = "col-sm-6 col-lg-3" >
48+ < a
49+ href = "/nginx/redirection"
50+ className = "card card-sm card-link card-link-pop"
51+ onClick = { ( e ) => {
52+ e . preventDefault ( ) ;
53+ navigate ( "/nginx/redirection" ) ;
54+ } }
55+ >
56+ < div className = "card-body" >
57+ < div className = "row align-items-center" >
58+ < div className = "col-auto" >
59+ < span className = "bg-yellow text-white avatar" >
60+ < IconArrowsCross />
61+ </ span >
62+ </ div >
63+ < div className = "col" >
64+ < T
65+ id = "redirection-hosts.count"
66+ data = { { count : hostReport ?. redirection } }
67+ />
68+ </ div >
6169 </ div >
6270 </ div >
63- </ div >
64- </ a >
65- </ div >
66- < div className = "col-sm-6 col-lg-3" >
67- < a
68- href = "/nginx/stream"
69- className = "card card-sm card-link card-link-pop"
70- onClick = { ( e ) => {
71- e . preventDefault ( ) ;
72- navigate ( "/nginx/stream" ) ;
73- } }
74- >
75- < div className = "card-body" >
76- < div className = "row align-items-center" >
77- < div className = "col-auto" >
78- < span className = "bg-blue text-white avatar" >
79- < IconDisc />
80- </ span >
81- </ div >
82- < div className = "col" >
83- < T id = "streams.count" data = { { count : hostReport ?. stream } } />
71+ </ a >
72+ </ div >
73+ </ HasPermission >
74+ < HasPermission permission = "streams" type = "view" hideError >
75+ < div className = "col-sm-6 col-lg-3" >
76+ < a
77+ href = "/nginx/stream"
78+ className = "card card-sm card-link card-link-pop"
79+ onClick = { ( e ) => {
80+ e . preventDefault ( ) ;
81+ navigate ( "/nginx/stream" ) ;
82+ } }
83+ >
84+ < div className = "card-body" >
85+ < div className = "row align-items-center" >
86+ < div className = "col-auto" >
87+ < span className = "bg-blue text-white avatar" >
88+ < IconDisc />
89+ </ span >
90+ </ div >
91+ < div className = "col" >
92+ < T id = "streams.count" data = { { count : hostReport ?. stream } } />
93+ </ div >
8494 </ div >
8595 </ div >
86- </ div >
87- </ a >
88- </ div >
89- < div className = "col-sm-6 col-lg-3" >
90- < a
91- href = "/nginx/404"
92- className = "card card-sm card-link card-link-pop"
93- onClick = { ( e ) => {
94- e . preventDefault ( ) ;
95- navigate ( "/nginx/404" ) ;
96- } }
97- >
98- < div className = "card-body" >
99- < div className = "row align-items-center" >
100- < div className = "col-auto" >
101- < span className = "bg-red text-white avatar" >
102- < IconBoltOff />
103- </ span >
104- </ div >
105- < div className = "col" >
106- < T id = "dead-hosts.count" data = { { count : hostReport ?. dead } } />
96+ </ a >
97+ </ div >
98+ </ HasPermission >
99+ < HasPermission permission = "deadHosts" type = "view" hideError >
100+ < div className = "col-sm-6 col-lg-3" >
101+ < a
102+ href = "/nginx/404"
103+ className = "card card-sm card-link card-link-pop"
104+ onClick = { ( e ) => {
105+ e . preventDefault ( ) ;
106+ navigate ( "/nginx/404" ) ;
107+ } }
108+ >
109+ < div className = "card-body" >
110+ < div className = "row align-items-center" >
111+ < div className = "col-auto" >
112+ < span className = "bg-red text-white avatar" >
113+ < IconBoltOff />
114+ </ span >
115+ </ div >
116+ < div className = "col" >
117+ < T id = "dead-hosts.count" data = { { count : hostReport ?. dead } } />
118+ </ div >
107119 </ div >
108120 </ div >
109- </ div >
110- </ a >
111- </ div >
121+ </ a >
122+ </ div >
123+ </ HasPermission >
112124 </ div >
113125 </ div >
114126 </ div >
0 commit comments