Skip to content

Commit f017110

Browse files
committed
make the change_request workflow optional
1 parent 34046ac commit f017110

File tree

9 files changed

+115
-37
lines changed

9 files changed

+115
-37
lines changed

packages/tdb-dashboard/src/components/AboutDataProduct.js

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, {useState, useEffect, Fragment, useRef} from "react"
22
import {WOQLClientObj} from '../init-woql-client'
33
import {timeConverter, } from "../pages/utils"
4-
import {Button,Alert} from "react-bootstrap"
4+
import {Button,Alert,ButtonGroup,ToggleButton} from "react-bootstrap"
55
import {DATA_PRODUCT_HEALTHY} from "../pages/constants"
66
import {HealthModal} from "./HealthModal"
77
import {localSettings} from "../../localSettings"
@@ -20,9 +20,9 @@ export const AboutDataProduct = ({dataProductDetails, setShowDeleteModal, setSho
2020
const {dataProduct,organization} =useParams()
2121
const [showHealth, setShowHealth]=useState(false)
2222
const [branchCount, setBranchCount]= useState(0)
23-
const {woqlClient, accessControlDashboard} = WOQLClientObj()
23+
const {woqlClient, accessControlDashboard, updateChangeRequestStatus, useChangeRequest,clientUser} = WOQLClientObj()
2424
const {documentClasses,getDocumentClasses} = useTDBDocuments(woqlClient)
25-
25+
const [radioValue, setRadioValue] = useState(useChangeRequest===false ? "Inactive" : "Active");
2626

2727
const {cloneDatabase, loading:loadingClone, error:errorClone , setError:setCloneError} = ManageDatabase()
2828

@@ -90,9 +90,43 @@ export const AboutDataProduct = ({dataProductDetails, setShowDeleteModal, setSho
9090
const showUpdateHandler = () =>{
9191
setShowUpdate(dataProductDetails)
9292
}
93+
94+
const radios = [
95+
{ name: 'Change Request Mode Active', value: 'Active' , title:'manage your documents using the change request mode'},
96+
{ name: 'Change Request Mode Inactive', value: 'Inactive' , title:'manage your documents directly in the current branch'},
97+
];
98+
99+
100+
const updateChangeRequestStatusHandler = function(value){
101+
setRadioValue(value)
102+
updateChangeRequestStatus(value)
103+
}
93104

94105
return <React.Fragment>
95106
<HealthModal dataProduct={dataProduct} showHealth={showHealth} setShowHealth={setShowHealth}/>
107+
{clientUser.serverType !== "TerminusDB" &&
108+
<Card className="bg-transparent p-1 mb-5 tdb__align__container" border="muted">
109+
<Card.Body>
110+
<ButtonGroup>
111+
{radios.map((radio, idx) => (
112+
<ToggleButton
113+
key={idx}
114+
id={`radio-${idx}`}
115+
type="radio"
116+
title={radio.title}
117+
variant={idx === 0 ? 'outline-success' : 'outline-warning'}
118+
name="radio"
119+
value={radio.value}
120+
checked={radioValue === radio.value}
121+
onChange={(e) => updateChangeRequestStatusHandler(e.currentTarget.value)}
122+
>
123+
{radio.name}
124+
</ToggleButton>
125+
))}
126+
</ButtonGroup>
127+
</Card.Body>
128+
</Card>
129+
}
96130
<Card className="bg-transparent p-1 mb-5 tdb__align__container" border="muted">
97131
<Card.Body>
98132
<h4 className="text-light mb-3 fw-bold">About</h4>

packages/tdb-dashboard/src/components/IconBar.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {useParams} from 'react-router-dom'
88

99
export const IconBar = ({setShowFeedbackForm}) => {
1010

11-
const {currentChangeRequest} = WOQLClientObj()
11+
const {currentChangeRequest,useChangeRequest} = WOQLClientObj()
1212

1313
const { organization, dataProduct } = useParams();
1414

@@ -101,18 +101,18 @@ export const IconBar = ({setShowFeedbackForm}) => {
101101
{IconBarConfig.graphiql.icon}
102102
</Nav.Link>
103103
</Nav.Item>
104-
<Nav.Item>
104+
{useChangeRequest && <Nav.Item>
105105
<Nav.Link as={RouterNavLink}
106106
title={IconBarConfig.changes.title}
107-
className="nav-icon nav-product-expolorer"
107+
className="nav-icon nav-product-explorer"
108108
{...disabled}
109109
to={getUrl(IconBarConfig.changes.path)}
110110

111111
id={IconBarConfig.changes.key}>
112112
{IconBarConfig.changes.icon}
113113
</Nav.Link>
114-
</Nav.Item>
115-
{!currentChangeRequest &&
114+
</Nav.Item>}
115+
{useChangeRequest && !currentChangeRequest &&
116116
<Nav.Item>
117117
<Nav.Link as={RouterNavLink}
118118
title={IconBarConfig.openAI.title}
@@ -125,7 +125,7 @@ export const IconBar = ({setShowFeedbackForm}) => {
125125
</Nav.Link>
126126
</Nav.Item>
127127
}
128-
{!currentChangeRequest &&
128+
{useChangeRequest && !currentChangeRequest &&
129129
<Nav.Item>
130130
<Nav.Link as={RouterNavLink}
131131
title={IconBarConfig.search.title}
@@ -138,7 +138,7 @@ export const IconBar = ({setShowFeedbackForm}) => {
138138
</Nav.Link>
139139
</Nav.Item>
140140
}
141-
{!currentChangeRequest &&
141+
{useChangeRequest && !currentChangeRequest &&
142142
<Nav.Item>
143143
<Nav.Link as={RouterNavLink}
144144
title={IconBarConfig.actions.title}

packages/tdb-dashboard/src/hooks/utils.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,25 @@
11

2+
export function storeChangeRequestDBStatus(orgName,dbName,status,setStatus){
3+
const cr_name = `TERMINUSCMS_CR_STATUS.${orgName}_____${dbName}`
4+
localStorage.setItem(cr_name,status)
5+
setStatus(status==="Inactive" ? false : true)
6+
}
7+
8+
export function getStoreChangeRequestDBStatus(orgName,dbName,setStatus){
9+
const cr_name = `TERMINUSCMS_CR_STATUS.${orgName}_____${dbName}`
10+
const item = localStorage.getItem(cr_name)
11+
let status = true
12+
if(item) status = item==="Inactive" ? false : true
13+
setStatus(status)
14+
return status
15+
}
16+
17+
export function deleteStoreChangeRequestDBStatus(orgName,dbName){
18+
const cr_name = `TERMINUSCMS_CR_STATUS.${orgName}_____${dbName}`
19+
localStorage.removeItem(cr_name)
20+
}
21+
22+
223
export function graphStructureFromBindings(bindings) {
324
let gs = {}
425
for (var i = 0; i < bindings.length; i++) {

packages/tdb-dashboard/src/init-woql-client.js

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { formatErrorMessage } from './hooks/hookUtils'
99
import { createApolloClient } from './routing/ApolloClientConfig'
1010
import {getChangesUrl} from "./hooks/hookUtils"
1111
import {cleanGraphiqlCache} from "./pages/utils"
12+
import {getStoreChangeRequestDBStatus,storeChangeRequestDBStatus} from "./hooks/utils"
1213

1314
export const WOQLContext = React.createContext()
1415
export const WOQLClientObj = () => useContext(WOQLContext)
@@ -34,10 +35,13 @@ export const WOQLClientProvider = ({children, params}) => {
3435
const [chosenCommit,setChosenCommit]=useState({})
3536
const [currentCRObject, setCurrentCRObject]=useState(false)
3637
const [userHasMergeRole,setTeamUserRoleMerge] = useState(false)
38+
3739
const [currentChangeRequest,setCurrentChangeRequest] = useState(false)
3840
const [currentCRName,setCurrentCRName] = useState(false)
3941
const [currentCRStartBranch,setCurrentCRStartBranch] = useState(false)
4042

43+
const [useChangeRequest,setUseChangeRequest] = useState(true)
44+
4145
// constants to control sidebar collapse
4246
const [collapseSideBar, setCollapseSideBar] = useState(localStorage.getItem(`Terminusdb-SideBar-Collapsed`) === "true" ? true : false)
4347

@@ -150,33 +154,42 @@ export const WOQLClientProvider = ({children, params}) => {
150154
setHead('main',{commit:false,time:false})
151155

152156
if(dbName){
157+
// getStoreChangeRequestDBStatus(client.organization(),dbName,setUseChangeRequest)
153158
//clear graphiql interface local storage
154159
cleanGraphiqlCache()
160+
161+
const changeRequestStatus = await client.sendCustomRequest("GET", `${getChangesUrl(client)}/profile/status`)
162+
setUseChangeRequest(changeRequestStatus.isActive)
163+
if(changeRequestStatus.isActive){
155164
// check if there is a change request related
156-
const {TERMINUSCMS_CR , TERMINUSCMS_CR_ID} = changeRequestName(client)
165+
const {TERMINUSCMS_CR , TERMINUSCMS_CR_ID} = changeRequestName(client)
157166

158-
const lastBranch = localStorage.getItem(TERMINUSCMS_CR)
159-
const lastChangeRequest = localStorage.getItem(TERMINUSCMS_CR_ID)
167+
const lastBranch = localStorage.getItem(TERMINUSCMS_CR)
168+
const lastChangeRequest = localStorage.getItem(TERMINUSCMS_CR_ID)
160169

161-
if(lastBranch && lastChangeRequest){
162-
//check the changeRequest Status
163-
const changeObj = await client.sendCustomRequest("GET", `${getChangesUrl(client)}/${lastChangeRequest}`)
164-
if(changeObj.status=== "Open"){
165-
client.checkout(lastBranch)
166-
setBranch(lastBranch)
167-
setCurrentChangeRequest(lastChangeRequest)
168-
setCurrentCRStartBranch(changeObj.original_branch)
169-
setCurrentCRName(changeObj.name || changeObj.messages[0].text)
170+
if(lastBranch && lastChangeRequest){
171+
//check the changeRequest Status
172+
const changeObj = await client.sendCustomRequest("GET", `${getChangesUrl(client)}/${lastChangeRequest}`)
173+
if(changeObj.status=== "Open"){
174+
client.checkout(lastBranch)
175+
setBranch(lastBranch)
176+
setCurrentChangeRequest(lastChangeRequest)
177+
setCurrentCRStartBranch(changeObj.original_branch)
178+
setCurrentCRName(changeObj.name || changeObj.messages[0].text)
179+
}else{
180+
localStorage.removeItem(TERMINUSCMS_CR)
181+
localStorage.removeItem(TERMINUSCMS_CR_ID)
182+
setBranch("main")
183+
setCurrentChangeRequest(false)
184+
setCurrentCRName(false)
185+
setCurrentCRStartBranch(false)
186+
}
170187
}else{
171-
localStorage.removeItem(TERMINUSCMS_CR)
172-
localStorage.removeItem(TERMINUSCMS_CR_ID)
188+
//if we are not change request
173189
setBranch("main")
174190
setCurrentChangeRequest(false)
175-
setCurrentCRName(false)
176-
setCurrentCRStartBranch(false)
177191
}
178192
}else{
179-
//if we are not change request
180193
setBranch("main")
181194
setCurrentChangeRequest(false)
182195
}
@@ -297,11 +310,21 @@ export const WOQLClientProvider = ({children, params}) => {
297310
sidebarStateObj[name]=value
298311
}
299312

313+
const updateChangeRequestStatus= async function(status){
314+
const isActive = status === "Inactive" ? false : true
315+
await woqlClient.sendCustomRequest("PUT", `${getChangesUrl(woqlClient)}/profile/status`,{isActive:isActive})
316+
setUseChangeRequest(isActive)
317+
if(status==="Inactive"){
318+
exitChangeRequestBranch(currentCRStartBranch)
319+
}
320+
}
300321

301322
return (
302323
<WOQLContext.Provider
303324
value={{
325+
updateChangeRequestStatus,
304326
currentCRName,
327+
useChangeRequest,
305328
exitChangeRequestBranch,
306329
apolloClient,
307330
setChangeRequestBranch,

packages/tdb-dashboard/src/pages/DocumentEdit.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {DocumentSearchComponent} from "../components/DocumentSearchComponent"
1010
import '@terminusdb/terminusdb-documents-ui/dist/css/terminusdb__darkly.css'
1111

1212
export const DocumentEdit = () => {
13-
const {setChangeRequestBranch, branch,woqlClient,currentChangeRequest} = WOQLClientObj()
13+
const {setChangeRequestBranch, branch,woqlClient,currentChangeRequest,useChangeRequest} = WOQLClientObj()
1414
if(!woqlClient) return ''
1515
const [showModal, setShowModal] = useState(false)
1616
const {type, docid} = useParams()
@@ -53,7 +53,7 @@ export const DocumentEdit = () => {
5353
return <React.Fragment>
5454
{error && <ErrorMessageReport error={error} setError={setError}/>}
5555
{showModal && <CreateChangeRequestModal showModal={showModal} type={type} setShowModal={setShowModal} updateViewMode={setChangeRequestBranch}/>}
56-
{currentChangeRequest &&
56+
{!useChangeRequest || currentChangeRequest &&
5757
<EditDocumentComponent
5858
SearchComponent={DocumentSearchComponent}
5959
documentID={documentID}

packages/tdb-dashboard/src/pages/DocumentNew.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@ import {CreateChangeRequestModal} from "../components/CreateChangeRequestModal"
88
import {DocumentSearchComponent} from "../components/DocumentSearchComponent"
99
import '@terminusdb/terminusdb-documents-ui/dist/css/terminusdb__darkly.css'
1010

11-
1211
export const DocumentNew = () => {
1312
const {organization,dataProduct,type} = useParams()
14-
const {setChangeRequestBranch, branch,woqlClient,currentChangeRequest} = WOQLClientObj()
13+
const {setChangeRequestBranch, branch,woqlClient,currentChangeRequest,useChangeRequest} = WOQLClientObj()
1514
const [showModal, setShowModal] = useState(false)
1615

1716
const {
@@ -30,7 +29,7 @@ export const DocumentNew = () => {
3029
//try to change/add documents in main branch
3130
// I'm moving this logic in change request
3231
useEffect(() => {
33-
if(!currentChangeRequest){
32+
if(!currentChangeRequest && useChangeRequest){
3433
setShowModal(true)
3534
}
3635
getDocumentFrames()
@@ -51,7 +50,7 @@ export const DocumentNew = () => {
5150
return <React.Fragment>
5251
{showModal && <CreateChangeRequestModal showModal={showModal} type={type} setShowModal={setShowModal} updateViewMode={setChangeRequestBranch}/>}
5352
{error && <ErrorMessageReport error={error} setError={setError}/>}
54-
{currentChangeRequest && frames &&
53+
{(!useChangeRequest || currentChangeRequest) && frames &&
5554
<NewDocumentComponent
5655
SearchComponent={DocumentSearchComponent}
5756
frames={frames}

packages/tdb-dashboard/src/pages/DocumentView.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ import {WOQLClientObj} from '../init-woql-client'
99
import {CreateChangeRequestModal} from '../components/CreateChangeRequestModal'
1010
import {ErrorMessageReport} from "../components/ErrorMessageReport"
1111
import '@terminusdb/terminusdb-documents-ui/dist/css/terminusdb__darkly.css'
12-
1312

1413
export const DocumentView = () => {
15-
const { branch,setChangeRequestBranch,woqlClient,currentChangeRequest} = WOQLClientObj()
14+
const { branch,setChangeRequestBranch,woqlClient,currentChangeRequest,useChangeRequest} = WOQLClientObj()
1615
const {type, docid} = useParams()
1716
const [showCRModal, setShowCRModal] = useState(false)
1817
const [showDeleteModal, setShowDeleteModal]=useState(false)
1918
const navigate = useNavigate()
2019
const location = useLocation()
20+
2121
const {
2222
frames,
2323
selectedDocument,
@@ -60,7 +60,7 @@ export const DocumentView = () => {
6060
function deleteDocumentHandler(e) {
6161
// I can not change main directly
6262
// I can change other branches creates with create branch interface
63-
if(!currentChangeRequest){
63+
if(!currentChangeRequest && useChangeRequest){
6464
setShowCRModal(true)
6565
}else setShowDeleteModal(true)
6666
}

packages/tdb-dashboard/src/pages/DocumentsListPage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {Loading} from "../components/Loading"
99
export const DocumentsPageList = () => {
1010
const {type} = useParams()
1111

12-
const {woqlClient, currentChangeRequest,ref } = WOQLClientObj()
12+
const {woqlClient,ref } = WOQLClientObj()
1313
const {documentTablesConfig, getGraphqlTablesConfig,loading} = useTDBDocuments(woqlClient)
1414
if(!woqlClient) return ""
1515

packages/tdb-dashboard/src/pages/GraphqlHandlerbarsPage.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export function GraphqlHandlerbarsPage({}) {
7272
setHandlebarTemplate(classObj['@metadata']['embedding']['template'])
7373
}else if(documentTablesConfig && documentTablesConfig.objQueryOpenAI && documentTablesConfig.objQueryOpenAI[classId]){
7474
setGraphqlQuery(format(documentTablesConfig.objQueryOpenAI[classId].query))
75+
setHandlebarTemplate("")
7576
}
7677
setType(classId)
7778
resetPreviewResult()

0 commit comments

Comments
 (0)