@@ -9,25 +9,28 @@ import {
9
9
StatusWarning ,
10
10
} from '@backstage/core-components' ;
11
11
12
- import { makeStyles } from '@material-ui/core' ;
12
+ import { createStyles , makeStyles , Theme } from '@material-ui/core' ;
13
13
import OffIcon from '@mui/icons-material/DoNotDisturbOnOutlined' ;
14
14
import UnknownIcon from '@mui/icons-material/HelpOutline' ;
15
15
import AngleDoubleRightIcon from '@mui/icons-material/KeyboardDoubleArrowRight' ;
16
16
import BanIcon from '@mui/icons-material/NotInterestedOutlined' ;
17
17
import PauseIcon from '@mui/icons-material/PauseCircleOutlineOutlined' ;
18
+ import cx from 'classnames' ;
18
19
19
20
import { StatusIconAndText } from './StatusIconAndText' ;
20
21
21
- const useStyles = makeStyles ( {
22
- iconStyles : {
23
- height : '0.8em' ,
24
- width : '0.8em' ,
25
- top : '0.125em' ,
26
- position : 'relative' ,
27
- flexShrink : 0 ,
28
- marginRight : '8px' ,
29
- } ,
30
- } ) ;
22
+ const useStyles = makeStyles < Theme > ( theme =>
23
+ createStyles ( {
24
+ iconStyles : {
25
+ height : '0.8em' ,
26
+ width : '0.8em' ,
27
+ top : '0.125em' ,
28
+ position : 'relative' ,
29
+ flexShrink : 0 ,
30
+ marginRight : theme . spacing ( 0.6 ) ,
31
+ } ,
32
+ } ) ,
33
+ ) ;
31
34
32
35
const DASH = '-' ;
33
36
@@ -59,37 +62,43 @@ const useStatusStyles = makeStyles(theme => ({
59
62
} ,
60
63
} ) ) ;
61
64
62
- const StatusIcon = ( { statusKey } : { statusKey : StatusClassKey } ) => {
65
+ const StatusIcon = ( {
66
+ statusKey,
67
+ classNames,
68
+ } : {
69
+ statusKey : StatusClassKey ;
70
+ classNames : string ;
71
+ } ) => {
63
72
const statusStyles = useStatusStyles ( ) ;
64
73
65
74
switch ( statusKey ) {
66
75
case 'ok' :
67
76
return (
68
- < g className = { statusStyles . success } >
77
+ < g className = { cx ( statusStyles . success , classNames ) } >
69
78
< StatusOK /> { ' ' }
70
79
</ g >
71
80
) ;
72
81
case 'pending' :
73
82
return (
74
- < g className = { statusStyles . pending } >
83
+ < g className = { cx ( statusStyles . pending , classNames ) } >
75
84
< StatusPending /> { ' ' }
76
85
</ g >
77
86
) ;
78
87
case 'running' :
79
88
return (
80
- < g className = { statusStyles . running } >
89
+ < g className = { cx ( statusStyles . running , classNames ) } >
81
90
< StatusRunning /> { ' ' }
82
91
</ g >
83
92
) ;
84
93
case 'warning' :
85
94
return (
86
- < g className = { statusStyles . warning } >
95
+ < g className = { cx ( statusStyles . warning , classNames ) } >
87
96
< StatusWarning /> { ' ' }
88
97
</ g >
89
98
) ;
90
99
case 'error' :
91
100
return (
92
- < g className = { statusStyles . error } >
101
+ < g className = { cx ( statusStyles . error , classNames ) } >
93
102
< StatusError /> { ' ' }
94
103
</ g >
95
104
) ;
@@ -103,6 +112,7 @@ const StatusIcon = ({ statusKey }: { statusKey: StatusClassKey }) => {
103
112
* @param {string } status - type of status to be displayed
104
113
* @param {boolean } [iconOnly] - (optional) if true, only displays icon
105
114
* @param {string } [className] - (optional) additional class name for the component
115
+ * @param {string } [displayStatusText] - (optional) use a different text to display the status
106
116
107
117
* @example
108
118
* ```tsx
@@ -114,17 +124,24 @@ export const Status = ({
114
124
iconOnly,
115
125
className,
116
126
displayStatusText,
127
+ dataTestId,
128
+ iconStyles,
129
+ iconClassNames,
117
130
} : {
118
131
status : string | null ;
119
132
displayStatusText ?: string ;
120
133
iconOnly ?: boolean ;
121
134
className ?: string ;
135
+ dataTestId ?: string ;
136
+ iconStyles ?: React . CSSProperties ;
137
+ iconClassNames ?: string ;
122
138
} ) : React . ReactElement => {
123
139
const classes = useStyles ( ) ;
124
140
const statusProps = {
125
141
title : displayStatusText || status || '' ,
126
142
iconOnly,
127
143
className,
144
+ dataTestId,
128
145
} ;
129
146
130
147
switch ( status ) {
@@ -135,12 +152,15 @@ export const Status = ({
135
152
return (
136
153
< StatusIconAndText
137
154
{ ...statusProps }
138
- icon = { < StatusIcon statusKey = "pending" /> }
155
+ icon = {
156
+ < StatusIcon statusKey = "pending" classNames = { iconClassNames || '' } />
157
+ }
139
158
/>
140
159
) ;
141
160
142
161
case 'In Progress' :
143
162
case 'Progress' :
163
+ case 'Progressing' :
144
164
case 'Installing' :
145
165
case 'InstallReady' :
146
166
case 'Replacing' :
@@ -151,7 +171,9 @@ export const Status = ({
151
171
return (
152
172
< StatusIconAndText
153
173
{ ...statusProps }
154
- icon = { < StatusIcon statusKey = "running" /> }
174
+ icon = {
175
+ < StatusIcon statusKey = "running" classNames = { iconClassNames || '' } />
176
+ }
155
177
/>
156
178
) ;
157
179
@@ -166,7 +188,7 @@ export const Status = ({
166
188
return (
167
189
< StatusIconAndText
168
190
{ ...statusProps }
169
- icon = { < BanIcon className = { classes . iconStyles } /> }
191
+ icon = { < BanIcon className = { classes . iconStyles } style = { iconStyles } /> }
170
192
/>
171
193
) ;
172
194
@@ -175,58 +197,71 @@ export const Status = ({
175
197
return (
176
198
< StatusIconAndText
177
199
{ ...statusProps }
178
- icon = { < StatusIcon statusKey = "warning" /> }
200
+ icon = {
201
+ < StatusIcon statusKey = "warning" classNames = { iconClassNames || '' } />
202
+ }
179
203
/>
180
204
) ;
181
205
182
206
case 'ImagePullBackOff' :
183
207
case 'Error' :
184
208
case 'Failed' :
209
+ case 'Failure' :
185
210
case 'CrashLoopBackOff' :
186
211
case 'ErrImagePull' :
187
212
return (
188
213
< StatusIconAndText
189
214
{ ...statusProps }
190
- icon = { < StatusIcon statusKey = "error" /> }
215
+ icon = {
216
+ < StatusIcon statusKey = "error" classNames = { iconClassNames || '' } />
217
+ }
191
218
/>
192
219
) ;
193
220
194
221
case 'Completed' :
195
222
case 'Succeeded' :
223
+ case 'Synced' :
196
224
return (
197
225
< StatusIconAndText
198
226
{ ...statusProps }
199
- icon = { < StatusIcon statusKey = "ok" /> }
227
+ icon = { < StatusIcon statusKey = "ok" classNames = { iconClassNames || '' } /> }
200
228
/>
201
229
) ;
202
230
203
231
case 'Skipped' :
204
232
return (
205
233
< StatusIconAndText
206
234
{ ...statusProps }
207
- icon = { < AngleDoubleRightIcon className = { classes . iconStyles } /> }
235
+ icon = {
236
+ < AngleDoubleRightIcon
237
+ className = { classes . iconStyles }
238
+ style = { iconStyles }
239
+ />
240
+ }
208
241
/>
209
242
) ;
210
243
case 'Paused' :
211
244
return (
212
245
< StatusIconAndText
213
246
{ ...statusProps }
214
- icon = { < PauseIcon className = { classes . iconStyles } /> }
247
+ icon = { < PauseIcon className = { classes . iconStyles } style = { iconStyles } /> }
215
248
/>
216
249
) ;
217
250
case 'Stopped' :
218
251
return (
219
252
< StatusIconAndText
220
253
{ ...statusProps }
221
- icon = { < OffIcon className = { classes . iconStyles } /> }
254
+ icon = { < OffIcon className = { classes . iconStyles } style = { iconStyles } /> }
222
255
/>
223
256
) ;
224
257
225
258
case 'Unknown' :
226
259
return (
227
260
< StatusIconAndText
228
261
{ ...statusProps }
229
- icon = { < UnknownIcon className = { classes . iconStyles } /> }
262
+ icon = {
263
+ < UnknownIcon className = { classes . iconStyles } style = { iconStyles } />
264
+ }
230
265
/>
231
266
) ;
232
267
0 commit comments