11import React , { useState , useEffect } from 'react'
22import { Button } from "react-bootstrap"
33import { Layout } from './Layout'
4+ import Card from "react-bootstrap/Card"
45import { useParams } from 'react-router-dom'
56import { GetDiffList } from "../hooks/DocumentHook"
67import { WOQLClientObj } from "../init-woql-client"
@@ -13,24 +14,81 @@ import Stack from 'react-bootstrap/Stack'
1314import { ChangeRequest } from "../hooks/ChangeRequest"
1415import { Loading } from "../components/Loading"
1516import Alert from 'react-bootstrap/Alert'
16- import { ChangeDiffComponent } from '../components/ChangeDiffComponent'
17- import {
18- DIFFS ,
19- MERGED ,
20- MESSAGES ,
21- TRACKING_BRANCH
22- } from "../components/constants"
17+ import { ChangeDiffComponent , BranchCRMessage } from '../components/ChangeDiffComponent'
18+ import * as CONST from "../components/constants"
19+ import { FiAlertTriangle } from "react-icons/fi"
2320import { Messages } from "../components/Messages"
2421import { ReviewComponent } from "../components/ReviewComponent"
22+ import Spinner from 'react-bootstrap/Spinner' ;
23+ import { extractID } from "../components/utils"
2524
25+ const CRAction = ( { } ) => {
26+ const {
27+ currentCRObject,
28+ setCurrentCRObject
29+ } = WOQLClientObj ( )
30+
31+ const {
32+ rebaseChangeRequestBranch,
33+ loading,
34+ error
35+ } = ChangeRequest ( )
36+
37+ const rebaseHandler = async ( ) => {
38+ const changeRequestDoc = await rebaseChangeRequestBranch ( extractID ( currentCRObject [ "@id" ] ) )
39+ if ( changeRequestDoc && setCurrentCRObject ) {
40+ setCurrentCRObject ( changeRequestDoc )
41+ }
42+ }
43+
44+ // loading while waiting for currentCRObject
45+ if ( ! currentCRObject ) return < Loading message = { `Loading Change Request ...` } />
46+
47+
48+ //{currentCRObject.needRebase && currentCRObject.status !== "Merged" && <div>
49+ if ( currentCRObject . needRebase === false || currentCRObject . status === CONST . MERGED )
50+ return < ChangeDiffComponent />
51+
52+ // if needRebase
53+ return < Card className = "update__change__request__card" >
54+ < Card . Header className = "w-100" >
55+ { `You are in Change Request ` } < BranchCRMessage branch = { currentCRObject . tracking_branch } css = { "primary" } />
56+ </ Card . Header >
57+ < Card . Body >
58+ < Stack direction = "vertical" gap = { 3 } >
59+ < div className = 'd-flex' >
60+ < FiAlertTriangle className = "text-warning h2 mr-3" />
61+ < h3 > This Change Request is out of date</ h3 >
62+ </ div >
63+ < div className = 'd-flex' >
64+ < h4 className = "mr-3" > Merge latest changes from </ h4 >
65+ < BranchCRMessage branch = { "main" } css = { "success" } />
66+ < h4 > into this Change Request</ h4 >
67+ </ div >
68+ </ Stack >
69+ </ Card . Body >
70+ < Button onClick = { rebaseHandler }
71+ className = "btn btn-lg bg-light text-dark mb-5" >
72+ { loading && < Spinner
73+ as = "span"
74+ animation = "border"
75+ size = "sm"
76+ role = "status"
77+ className = "mr-1 mt-1"
78+ aria-hidden = "true"
79+ /> }
80+ { CONST . UPDATE_BRANCH }
81+ </ Button >
82+ </ Card >
83+ }
2684
2785
2886export const ChangeDiff = ( ) => {
2987 const { id} = useParams ( )
3088 const {
3189 woqlClient :client ,
32- currentCRObject ,
33- setCurrentCRObject
90+ setCurrentCRObject ,
91+ currentCRObject
3492 } = WOQLClientObj ( )
3593
3694 const {
@@ -40,12 +98,7 @@ export const ChangeDiff = () => {
4098 error
4199 } = ChangeRequest ( )
42100
43- const rebaseHandler = async ( ) => {
44- const changeRequestDoc = await rebaseChangeRequestBranch ( id )
45- if ( changeRequestDoc ) {
46- setCurrentCRObject ( changeRequestDoc )
47- }
48- }
101+
49102
50103 useEffect ( ( ) => {
51104 async function getCRID ( ) {
@@ -58,13 +111,14 @@ export const ChangeDiff = () => {
58111 } , [ id , client ] )
59112
60113 if ( ! client ) return < div />
114+
115+
116+ console . log ( "currentCRObject" , currentCRObject )
61117
62118 return < Layout >
63119 < div className = 'd-flex ml-5 mt-4 mr-5' >
64120 < div className = 'w-100' >
65- { currentCRObject . needRebase && currentCRObject . status !== "Merged" && < div >
66- < Button onClick = { rebaseHandler } > Rebase</ Button > </ div > }
67- { ( currentCRObject . needRebase === false || currentCRObject . status === "Merged" ) && < ChangeDiffComponent /> }
121+ { currentCRObject && < CRAction /> }
68122 </ div >
69123 </ div >
70124 </ Layout >
0 commit comments