@@ -12,16 +12,14 @@ import {
12
12
} from "components/PageHeader/FullWidthPageHeader" ;
13
13
import { Link } from "react-router-dom" ;
14
14
import { Stats , StatsItem } from "components/Stats/Stats" ;
15
- import {
16
- displayWorkspaceBuildDuration ,
17
- getDisplayWorkspaceBuildInitiatedBy ,
18
- getDisplayWorkspaceBuildStatus ,
19
- } from "utils/workspace" ;
15
+ import { displayWorkspaceBuildDuration } from "utils/workspace" ;
20
16
import { Sidebar , SidebarCaption , SidebarItem } from "./Sidebar" ;
21
- import { BuildIcon } from "components/BuildIcon/BuildIcon" ;
22
- import Skeleton from "@mui/material/Skeleton" ;
23
17
import { Alert } from "components/Alert/Alert" ;
24
18
import { DashboardFullPage } from "components/Dashboard/DashboardLayout" ;
19
+ import {
20
+ WorkspaceBuildData ,
21
+ WorkspaceBuildDataSkeleton ,
22
+ } from "components/WorkspaceBuild/WorkspaceBuildData" ;
25
23
26
24
const sortLogsByCreatedAt = ( logs : ProvisionerJobLog [ ] ) => {
27
25
return [ ...logs ] . sort (
@@ -112,15 +110,20 @@ export const WorkspaceBuildPageView: FC<WorkspaceBuildPageViewProps> = ({
112
110
< SidebarCaption > Builds</ SidebarCaption >
113
111
{ ! builds &&
114
112
Array . from ( { length : 15 } , ( _ , i ) => (
115
- < BuildSidebarItemSkeleton key = { i } />
113
+ < SidebarItem key = { i } >
114
+ < WorkspaceBuildDataSkeleton />
115
+ </ SidebarItem >
116
116
) ) }
117
117
118
118
{ builds ?. map ( ( build ) => (
119
- < BuildSidebarItem
119
+ < Link
120
120
key = { build . id }
121
- build = { build }
122
- active = { build . build_number === activeBuildNumber }
123
- />
121
+ to = { `/@${ build . workspace_owner_name } /${ build . workspace_name } /builds/${ build . build_number } ` }
122
+ >
123
+ < SidebarItem active = { build . build_number === activeBuildNumber } >
124
+ < WorkspaceBuildData build = { build } />
125
+ </ SidebarItem >
126
+ </ Link >
124
127
) ) }
125
128
</ Sidebar >
126
129
@@ -167,78 +170,6 @@ export const WorkspaceBuildPageView: FC<WorkspaceBuildPageViewProps> = ({
167
170
) ;
168
171
} ;
169
172
170
- interface BuildSidebarItemProps {
171
- build : WorkspaceBuild ;
172
- active : boolean ;
173
- }
174
-
175
- const BuildSidebarItem : FC < BuildSidebarItemProps > = ( { build, active } ) => {
176
- const theme = useTheme ( ) ;
177
- const statusType = getDisplayWorkspaceBuildStatus ( theme , build ) . type ;
178
-
179
- return (
180
- < Link
181
- key = { build . id }
182
- to = { `/@${ build . workspace_owner_name } /${ build . workspace_name } /builds/${ build . build_number } ` }
183
- >
184
- < SidebarItem active = { active } >
185
- < div css = { { display : "flex" , alignItems : "start" , gap : 8 } } >
186
- < BuildIcon
187
- transition = { build . transition }
188
- css = { {
189
- width : 16 ,
190
- height : 16 ,
191
- color : theme . palette [ statusType ] . light ,
192
- } }
193
- />
194
- < div css = { { overflow : "hidden" } } >
195
- < div
196
- css = { {
197
- textTransform : "capitalize" ,
198
- color : theme . palette . text . primary ,
199
- textOverflow : "ellipsis" ,
200
- overflow : "hidden" ,
201
- whiteSpace : "nowrap" ,
202
- } }
203
- >
204
- { build . transition } by{ " " }
205
- < strong > { getDisplayWorkspaceBuildInitiatedBy ( build ) } </ strong >
206
- </ div >
207
- < div
208
- css = { {
209
- fontSize : 12 ,
210
- color : theme . palette . text . secondary ,
211
- marginTop : 2 ,
212
- } }
213
- >
214
- { displayWorkspaceBuildDuration ( build ) }
215
- </ div >
216
- </ div >
217
- </ div >
218
- </ SidebarItem >
219
- </ Link >
220
- ) ;
221
- } ;
222
-
223
- const BuildSidebarItemSkeleton : FC = ( ) => {
224
- return (
225
- < SidebarItem >
226
- < div css = { { display : "flex" , alignItems : "start" , gap : 8 } } >
227
- < Skeleton variant = "circular" width = { 16 } height = { 16 } />
228
- < div >
229
- < Skeleton variant = "text" width = { 94 } height = { 16 } />
230
- < Skeleton
231
- variant = "text"
232
- width = { 60 }
233
- height = { 14 }
234
- css = { { marginTop : 2 } }
235
- />
236
- </ div >
237
- </ div >
238
- </ SidebarItem >
239
- ) ;
240
- } ;
241
-
242
173
const styles = {
243
174
stats : ( theme ) => ( {
244
175
padding : 0 ,
0 commit comments