@@ -23,6 +23,7 @@ import {
2323 useBuildDispatch ,
2424 deleteBuild ,
2525 selectBuild ,
26+ modifyBuild ,
2627 stopBuild ,
2728 getBuildList ,
2829 useProjectState ,
@@ -31,9 +32,10 @@ import { BuildStatusChip } from "../BuildStatusChip";
3132import { SkeletonList } from "../SkeletonList" ;
3233import { formatDateTime } from "../../_helpers/format.helper" ;
3334import { useSnackbar } from "notistack" ;
35+ import { TextValidator } from "react-material-ui-form-validator" ;
36+ import { Pagination } from "@material-ui/lab" ;
3437import { Build } from "../../types" ;
3538import { BaseModal } from "../BaseModal" ;
36- import { Pagination } from "@material-ui/lab" ;
3739
3840const useStyles = makeStyles ( ( theme : Theme ) =>
3941 createStyles ( {
@@ -60,8 +62,10 @@ const BuildList: FunctionComponent = () => {
6062 const { enqueueSnackbar } = useSnackbar ( ) ;
6163 const { selectedProjectId } = useProjectState ( ) ;
6264 const [ deleteDialogOpen , setDeleteDialogOpen ] = React . useState ( false ) ;
65+ const [ editDialogOpen , setEditDialogOpen ] = React . useState ( false ) ;
6366 const [ anchorEl , setAnchorEl ] = React . useState < null | HTMLElement > ( null ) ;
6467 const [ menuBuild , setMenuBuild ] = React . useState < Build | null > ( ) ;
68+ const [ newCiBuildId , setNewCiBuildId ] = React . useState ( "" ) ;
6569
6670 const handleMenuClick = (
6771 event : React . MouseEvent < HTMLElement > ,
@@ -80,6 +84,10 @@ const BuildList: FunctionComponent = () => {
8084 setDeleteDialogOpen ( ! deleteDialogOpen ) ;
8185 } ;
8286
87+ const toggleEditDialogOpen = ( ) => {
88+ setEditDialogOpen ( ! editDialogOpen ) ;
89+ } ;
90+
8391 React . useEffect ( ( ) => {
8492 if ( ! selectedBuild && buildList . length > 0 ) {
8593 selectBuild ( buildDispatch , buildList [ 0 ] . id ) ;
@@ -204,9 +212,56 @@ const BuildList: FunctionComponent = () => {
204212 Stop
205213 </ MenuItem >
206214 ) }
215+ < MenuItem onClick = { toggleEditDialogOpen } > Edit CI Build</ MenuItem >
207216 < MenuItem onClick = { toggleDeleteDialogOpen } > Delete</ MenuItem >
208217 </ Menu >
209218 ) }
219+ { menuBuild && (
220+ < BaseModal
221+ open = { editDialogOpen }
222+ title = { "Edit CI Build ID" }
223+ submitButtonText = { "Edit" }
224+ onCancel = { toggleEditDialogOpen }
225+ content = {
226+ < React . Fragment >
227+ < Typography > { `Edit the ci build id for build: #${
228+ menuBuild . number || menuBuild . id
229+ } `} </ Typography >
230+ < TextValidator
231+ name = "newCiBuildId"
232+ validators = { [ "minStringLength:2" ] }
233+ errorMessages = { [ "Enter at least two characters." ] }
234+ margin = "dense"
235+ id = "name"
236+ label = "New CI Build Id"
237+ type = "text"
238+ fullWidth
239+ required
240+ value = { newCiBuildId }
241+ inputProps = { {
242+ onChange : ( event : any ) =>
243+ setNewCiBuildId ( ( event . target as HTMLInputElement ) . value ) ,
244+ "data-testid" : "newCiBuildId" ,
245+ } }
246+ />
247+ </ React . Fragment >
248+ }
249+ onSubmit = { ( ) => {
250+ modifyBuild ( buildDispatch , menuBuild . id , {
251+ ciBuildId : newCiBuildId ,
252+ } )
253+ . then ( ( b ) => {
254+ toggleEditDialogOpen ( ) ;
255+ } )
256+ . catch ( ( err ) =>
257+ enqueueSnackbar ( err , {
258+ variant : "error" ,
259+ } )
260+ ) ;
261+ handleMenuClose ( ) ;
262+ } }
263+ />
264+ ) }
210265 { menuBuild && (
211266 < BaseModal
212267 open = { deleteDialogOpen }
0 commit comments