1
1
import React , { useEffect , useState } from "react" ;
2
2
import {
3
+ CButton ,
3
4
CCol ,
4
5
CDropdown ,
5
6
CDropdownItem ,
@@ -12,7 +13,6 @@ import { Service, ServiceState } from "../../types/ServiceTypes";
12
13
import CIcon from "@coreui/icons-react" ;
13
14
import { freeSet } from "@coreui/icons" ;
14
15
import io from "socket.io-client" ;
15
- import Axios from "axios" ;
16
16
import useWebsocketUrl from "../../hooks/websocketFetcher" ;
17
17
import { useHistory } from "react-router-dom" ;
18
18
@@ -34,6 +34,7 @@ function getStateStyle(service: Service) {
34
34
}
35
35
36
36
const Dashboard = ( ) => {
37
+ const [ filterRequired , setFilterRequired ] = useState < boolean > ( true ) ;
37
38
const [ services , setServices ] = useState < Service [ ] > ( [ ] ) ;
38
39
39
40
//useServiceFetcher(setServices);
@@ -46,7 +47,6 @@ const Dashboard = () => {
46
47
47
48
useEffect ( ( ) => {
48
49
ws . on ( "service-update" , ( services : Service [ ] ) => {
49
- services . forEach ( ( s ) => ( s . error = "" ) ) ;
50
50
setServices ( services ) ;
51
51
} ) ;
52
52
ws . on ( "service-crash" , ( crash : any ) => {
@@ -64,65 +64,82 @@ const Dashboard = () => {
64
64
} , [ websocketUrl , services ] ) ;
65
65
66
66
return (
67
- < CRow >
68
- { services
69
- . sort ( ( a , b ) => a . state - b . state )
70
- . map ( ( service ) => {
71
- return (
72
- < CCol sm = "6" lg = "3" >
73
- < CWidgetDropdown
74
- color = { getStateStyle ( service ) }
75
- header = { service . name }
76
- text = { "Version: " + service . version }
77
- key = { service . namespace }
78
- footerSlot = {
79
- < >
80
- < p className = "add-padding" > { service . description } </ p >
81
- < p className = "add-padding" > { service . error } </ p >
82
- </ >
83
- }
84
- >
85
- < CDropdown >
86
- < CDropdownToggle caret = { false } color = "transparent" >
87
- < CIcon name = "cil-settings" />
88
- </ CDropdownToggle >
89
- < CDropdownMenu className = "pt-0 dark" placement = "bottom-end" >
90
- < CDropdownItem
91
- disabled = {
92
- service . required &&
93
- service . state !== ServiceState . STOPPED
94
- }
95
- onClick = { ( ) =>
96
- ws . emit ( "service-toggle" , {
97
- namespace : service . namespace ,
98
- } )
99
- }
100
- >
101
- { service . state === ServiceState . STOPPED
102
- ? "Enable"
103
- : "Disable" }
104
- { service . required &&
105
- service . state !== ServiceState . STOPPED && (
106
- < CIcon name = "cil-ban" className = "pull-right" />
107
- ) }
108
- </ CDropdownItem >
109
- < CDropdownItem
110
- onClick = { ( ) =>
111
- ws . emit ( "service-restart" , {
112
- namespace : service . namespace ,
113
- } )
114
- }
115
- >
116
- Restart
117
- < CIcon content = { freeSet . cilSync } className = "pull-right" />
118
- </ CDropdownItem >
119
- </ CDropdownMenu >
120
- </ CDropdown >
121
- </ CWidgetDropdown >
122
- </ CCol >
123
- ) ;
124
- } ) }
125
- </ CRow >
67
+ < >
68
+ < CRow >
69
+ < CCol sm = "12" lg = "12" style = { { paddingBottom : "30px" } } >
70
+ < CButton
71
+ color = "primary"
72
+ className = "pull-right"
73
+ onClick = { ( ) => setFilterRequired ( ! filterRequired ) }
74
+ >
75
+ < CIcon
76
+ content = { filterRequired ? freeSet . cilFilterX : freeSet . cilFilter }
77
+ />
78
+ </ CButton >
79
+ </ CCol >
80
+ { services
81
+ . sort ( ( a , b ) => a . state - b . state )
82
+ . filter ( ( s ) => ( filterRequired && ! s . required ) || ! filterRequired )
83
+ . map ( ( service ) => {
84
+ return (
85
+ < CCol sm = "6" lg = "3" >
86
+ < CWidgetDropdown
87
+ color = { getStateStyle ( service ) }
88
+ header = { service . name }
89
+ text = { "Version: " + service . version }
90
+ key = { service . namespace }
91
+ footerSlot = {
92
+ < >
93
+ < p className = "add-padding" > { service . description } </ p >
94
+ < p className = "add-padding" > { service . error } </ p >
95
+ </ >
96
+ }
97
+ >
98
+ < CDropdown >
99
+ < CDropdownToggle caret = { false } color = "transparent" >
100
+ < CIcon name = "cil-settings" />
101
+ </ CDropdownToggle >
102
+ < CDropdownMenu className = "pt-0 dark" placement = "bottom-end" >
103
+ < CDropdownItem
104
+ disabled = {
105
+ service . required &&
106
+ service . state !== ServiceState . STOPPED
107
+ }
108
+ onClick = { ( ) =>
109
+ ws . emit ( "service-toggle" , {
110
+ namespace : service . namespace ,
111
+ } )
112
+ }
113
+ >
114
+ { service . state === ServiceState . STOPPED
115
+ ? "Enable"
116
+ : "Disable" }
117
+ { service . required &&
118
+ service . state !== ServiceState . STOPPED && (
119
+ < CIcon name = "cil-ban" className = "pull-right" />
120
+ ) }
121
+ </ CDropdownItem >
122
+ < CDropdownItem
123
+ onClick = { ( ) =>
124
+ ws . emit ( "service-restart" , {
125
+ namespace : service . namespace ,
126
+ } )
127
+ }
128
+ >
129
+ Restart
130
+ < CIcon
131
+ content = { freeSet . cilSync }
132
+ className = "pull-right"
133
+ />
134
+ </ CDropdownItem >
135
+ </ CDropdownMenu >
136
+ </ CDropdown >
137
+ </ CWidgetDropdown >
138
+ </ CCol >
139
+ ) ;
140
+ } ) }
141
+ </ CRow >
142
+ </ >
126
143
) ;
127
144
} ;
128
145
0 commit comments