Skip to content

Commit 179bf84

Browse files
authored
Merge pull request #273 from terminusdb/add-change-request-optional
make change request workflow optional
2 parents b03e5ce + 222a5be commit 179bf84

27 files changed

+187
-99
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/DataProductActivityStatus.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
Legend,
88
ResponsiveContainer,
99
AreaChart, Area } from 'recharts'
10-
import {TimeTravelControl} from "../hooks/TimeTravelControl"
10+
import {useTimeTravel} from "../hooks/useTimeTravel"
1111
import {printtsDate, printtsTime} from "./utils"
1212
import {Loading} from "./Loading"
1313
import {PROGRESS_BAR_COMPONENT} from "./constants"
@@ -16,7 +16,7 @@ import {Col} from "react-bootstrap"
1616
export const DataProductActivityStatus = ()=>{
1717
const {
1818
dataProvider
19-
} = TimeTravelControl(50)
19+
} = useTimeTravel(50)
2020

2121
return <React.Fragment>
2222
<Col md={12}>

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ export const DatePickerComponent = ({currentDay, setStartTime}) => {
1111
// convert to ISO timeStamp
1212
if(setStartTime)setStartTime(data)
1313
}
14+
15+
useEffect(()=>{
16+
setCurrentDate(currentDay)
17+
},[currentDay])
1418

1519
return <DatePicker onChange={handleOnChange}
1620
value={selected}

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/components/Messages.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ export const MessageComponent = ({setKey}) => {
5959
async function handleMessage(comment) {
6060
let id=extractID(currentCRObject["@id"])
6161
// this call return the changeRequestObj Updated
62-
let res=await addNewMessage(comment, id)
62+
let res=await addNewMessage(comment,id)
63+
6364
// we'll see if add need rebase check every time
6465
res.needRebase = currentCRObject.needRebase
6566
setCurrentCRObject(res)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ export const QueryPane = ({queryObj}) => {
112112
<Col md={size}>
113113
<div className="editor-pallet">
114114
<WOQLEditor
115+
language={queryObj.editorObj.language}
115116
editorObject={queryObj.editorObj}
116117
editable={true}
117118
theme="dark"/>

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

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import React, {useState, useEffect, useRef} from "react"
22
import {BiTimer, BiTime, BiMessageAltDetail} from "react-icons/bi"
3-
import {BsFillCircleFill, BsCalendar} from"react-icons/bs"
3+
import {BsFillCircleFill} from"react-icons/bs"
44
import { VerticalTimeline, VerticalTimelineElement } from 'react-vertical-timeline-component'
55
import 'react-vertical-timeline-component/style.min.css'
6-
import {TimeTravelControl} from "../hooks/TimeTravelControl"
6+
import {useTimeTravel} from "../hooks/useTimeTravel"
77
import {Button, Card, Row, Col} from "react-bootstrap"
8-
import {TERMINUS_SUCCESS} from "./constants"
9-
import {Alerts} from "./Alerts"
108
import {AiOutlineUser} from "react-icons/ai"
119
import {printtsDate, printtsTime} from "./utils"
1210
import {WOQLClientObj} from '../init-woql-client'
@@ -16,31 +14,30 @@ import {PROGRESS_BAR_COMPONENT} from "./constants"
1614
import {DatePickerComponent} from "./DatePicker"
1715
import {FaInfoCircle} from "react-icons/fa"
1816

19-
20-
export const TimeTravel = ({show}) => {
21-
17+
export const TimeTravel = ({refreshTime}) => {
2218
let cardColor = "#303030", transparantColor = "transparent", activeColor = "#00bc8c"
23-
const {branch, chosenCommit,setHead, currentChangeRequest} = WOQLClientObj()
24-
25-
const {currentItem,
19+
const {setHead,chosenCommit,branch} = WOQLClientObj()
20+
const {
2621
dataProvider,
27-
//setSelectedValue,
28-
setCurrentDay,
2922
loadNextPage,
3023
olderCommit,
31-
loadPreviousPage,
32-
setReloadQuery,
3324
currentDay,
3425
setStartTime,
3526
loading,
3627
setLoading,
37-
} = TimeTravelControl()
28+
} = useTimeTravel()
3829

3930
useEffect(() => { // when new commit logs are loaded on click of previous or next
4031
if(dataProvider.length > 0) {
4132
setLoading(false)
4233
}
4334
}, [dataProvider])
35+
36+
useEffect(()=>{
37+
if(refreshTime){
38+
setStartTime(refreshTime,true)
39+
}
40+
},[refreshTime])
4441

4542
//const [reportAlert, setReportAlert] = useState(false)
4643

@@ -53,20 +50,6 @@ export const TimeTravel = ({show}) => {
5350
}
5451
}
5552

56-
/* useEffect(() => {
57-
if(chosenCommit && setHead){
58-
setHead(branch, chosenCommit)
59-
let message = `The state of data product has been set to date ${chosenCommit.label}`
60-
setReportAlert(<Alerts message={message} type={TERMINUS_SUCCESS} onCancel={setReportAlert}/>)
61-
}
62-
}, [chosenCommit])*/
63-
64-
// useEffect(() => {
65-
// if(show){
66-
// setReloadQuery(Date.now())
67-
// }
68-
// }, [show])
69-
7053

7154
const TimelineElements = () => {
7255
if(!dataProvider) return <div/>

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
import React from "react"
1+
import React, {useState} from "react"
22
import {Card, Button} from "react-bootstrap"
33
import {WOQLClientObj} from '../init-woql-client'
44
import {AiOutlineClose, AiOutlineRollback} from "react-icons/ai"
55
import {TimeTravel} from "./TimeTravel"
66

77
export const TimeTravelContainer = ({show, setShowTimeTravel}) => {
88
const {branch,setHead}=WOQLClientObj()
9-
9+
const [needRefresh,setNeedrefresh] = useState(false)
1010
const goToLatestCommit = () => {
11-
setHead("main", { commit: false, time: false });
11+
setHead(branch, { commit: false, time: false });
12+
setNeedrefresh(Date.now())
1213
};
1314

1415
let sliderClass = 'time-travel-slider'
@@ -21,7 +22,7 @@ export const TimeTravelContainer = ({show, setShowTimeTravel}) => {
2122
<Card.Header className="d-flex">
2223
<h6 className="mr-4 mt-2 w-100 float-left">Time travel on branch - <strong className="text-success">{branch}</strong></h6>
2324
<div className="float-right w-100 text-right">
24-
<Button variant="light" className="mr-3" title={"Go to the latest commit of main branch"} onClick={(e) => goToLatestCommit()}>
25+
<Button variant="light" className="mr-3" title={`Go to the latest commit of ${branch} branch`} onClick={(e) => goToLatestCommit()}>
2526
<AiOutlineRollback />
2627
</Button>
2728
<Button variant="light" className="mr-3" title={"Close Time Travel View"} onClick={(e) => setShowTimeTravel(false)}>
@@ -30,7 +31,7 @@ export const TimeTravelContainer = ({show, setShowTimeTravel}) => {
3031
</div>
3132
</Card.Header>
3233
<Card.Body>
33-
{show && <TimeTravel show={show}/>}
34+
{show && <TimeTravel refreshTime={needRefresh}/>}
3435
</Card.Body>
3536
</Card>
3637
</div>

packages/tdb-dashboard/src/components/layout/TDBToggleButtonGroup.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export const TDBToggleButtonGroup = (props) => {
1414

1515
return <ToggleButtonGroup type="radio" name="options" value={props.selected} >
1616
{config.buttons.map((item) =>
17-
<ToggleButton key={`item__${item.id}`} value={item.id} key={item.id}
17+
<ToggleButton key={`item__${item.id}`} value={item.id}
1818
id={item.id} className="btn-light btn-sm mt-1" onClick={(e)=>handleOnClick(item.id)} >
1919
{item.icon && <i className={item.icon}/>}
2020
{item.label}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,11 @@ export const status = {
303303

304304
/** just get change request ID, remove "Changerequest/" from ID */
305305
export function extractID(id) {
306-
let str= id.split("/")
307-
return str[1]
306+
if(typeof id === "string"){
307+
let str= id.split("/")
308+
return str[1]
309+
}
310+
return ""
308311
}
309312

310313
/** sorts alphabetically */

0 commit comments

Comments
 (0)