@@ -5,20 +5,24 @@ import 'codemirror/lib/codemirror.css'
55import 'codemirror/theme/ayu-dark.css'
66require ( 'codemirror/mode/css/css' )
77require ( 'codemirror/mode/javascript/javascript' )
8+ import 'codemirror/theme/material-darker.css'
89//import 'codemirror/addon/display/autorefresh.js'
910import { PROGRESS_BAR_COMPONENT , TERMINUS_SUCCESS } from "./constants"
1011import { Loading } from "./Loading"
1112import { MODEL_BUILDER_EDITOR_OPTIONS } from "./constants"
12- import { AiOutlineCloseCircle , AiOutlineEdit , AiOutlineSave } from "react-icons/ai "
13+ import { BiUndo } from "react-icons/bi "
1314import { FaRegEdit } from 'react-icons/fa'
1415import { Alerts } from "./Alerts"
1516import { TERMINUS_DANGER , DOCUMENT_PREFIX } from "./constants"
1617import { GRAPH_TAB } from "../pages/constants"
1718import { GraphContextObj } from "@terminusdb-live/tdb-react-components"
1819import { CopyButton } from "./utils"
20+ import Card from "react-bootstrap/Card"
1921import { BsSave } from "react-icons/bs"
22+ import Stack from "react-bootstrap/Stack"
2023
21- export const JSONModelBuilder = ( { tab, saveGraph, accessControlEditMode} ) => {
24+ export const JSONModelBuilder = ( { tab, saveGraph, accessControlEditMode, setReportMessage} ) => {
25+
2226 const { getSchemaGraph, mainGraphObj} = GraphContextObj ( ) ;
2327 const { dataProduct} = WOQLClientObj ( )
2428 const [ loading , setLoading ] = useState ( false )
@@ -28,6 +32,9 @@ export const JSONModelBuilder = ({tab,saveGraph,accessControlEditMode}) => {
2832
2933 const [ jsonSchema , setJsonSchema ] = useState ( false )
3034
35+ const [ editMode , setEditMode ] = useState ( false )
36+ const [ value , setValue ] = useState ( false )
37+
3138 let branch = "main"
3239 let ref = ""
3340
@@ -49,8 +56,7 @@ export const JSONModelBuilder = ({tab,saveGraph,accessControlEditMode}) => {
4956 getJSONSchema ( )
5057 } , [ tab , dataProduct , mainGraphObj ] )
5158
52- const [ editMode , setEditMode ] = useState ( false )
53- const [ value , setValue ] = useState ( false )
59+
5460
5561
5662 MODEL_BUILDER_EDITOR_OPTIONS . readOnly = ! editMode
@@ -68,69 +74,77 @@ export const JSONModelBuilder = ({tab,saveGraph,accessControlEditMode}) => {
6874 //save change in the server
6975 await saveGraph ( value , commitMsg )
7076 setLoading ( false )
71- setEditMode ( false )
77+ // setEditMode(false)
7278
7379 } catch ( err ) {
7480 let jsonError = JSON . parse ( JSON . stringify ( err ) )
7581 setLoading ( false )
7682 if ( jsonError . data && jsonError . data [ "api:message" ] ) {
7783 setReport ( < Alerts message = { jsonError . data [ "api:message" ] } type = { TERMINUS_DANGER } /> )
7884 }
79- else setReport ( < Alerts message = { err . toString ( ) } type = { TERMINUS_DANGER } /> )
85+ else setReport ( < Alerts message = { err . toString ( ) } type = { TERMINUS_DANGER } /> )
8086 }
8187 }
8288 }
83- const editStyle = editMode ? { className :"border rounded border-warning position-sticky" } : { }
84- const editMessage = editMode ? "Save schema or you will loose your changes" : ""
8589
86- return < React . Fragment >
90+ function handleUndo ( ) {
91+ // sets report messagen from modelCallServerHook to false
92+ if ( setReportMessage ) setReportMessage ( false )
93+ setEditMode ( false ) ;
94+ getJSONSchema ( ) ;
95+ }
96+
97+ const editStyle = editMode ? { className :"border rounded border-warning position-sticky" } : { }
98+ const editMessage = editMode ? "Save schema or you will lose your changes" : ""
99+
100+ //console.log("editMode", editMode)
101+ return < >
102+ < label className = "text-warning mt-4" > { editMessage } </ label >
103+ < Card className = { `border border-secondary mt-4` } { ...editStyle } >
87104 { loading && loading }
88-
89- < div { ...editStyle } >
90- < div className = "d-flex align-items-center justify-content-between ml-4" >
91- < label className = "text-warning mt-4 pb-2" > { editMessage } </ label >
92- { accessControlEditMode && ! editMode &&
93- < button type = "button" className = "btn-edit-json-model btn btn-sm btn-light text-dark border-0 col-md-1 mt-3" onClick = { ( ) => { setEditMode ( true ) } } >
94- < FaRegEdit /> Edit Schema
105+ < Card . Header >
106+ < Stack direction = "horizontal" className = "w-100 justify-content-end" >
107+ { editMode && < div className = "w-100" >
108+ < div role = "group" className = "btn-group w-100" >
109+ < div className = "col-md-10 pr-0 pl-0" >
110+ < input id = "schema_save_description" placeholder = { "Enter a description to tag update" } type = "text" className = "form-control" onBlur = { handleCommitMessage } />
111+ </ div >
112+ < button type = "button" id = "schema_save_button" className = "btn btn-sm bg-light text-dark" onClick = { saveChange } >
113+ < BsSave className = "small" /> { "Save" }
95114 </ button >
96- }
97- { editMode &&
98- < button type = "button" className = "btn btn-lg border-0 col-md-1 float-right " onClick = { ( ) => { setEditMode ( false ) } } >
99- < AiOutlineCloseCircle className = "float-right mr-2 " />
115+ < button type = "button"
116+ title = "Undo changes"
117+ className = "btn btn-sm bg-danger text-white mr-2 " onClick = { ( ) => { handleUndo ( ) } } >
118+ < BiUndo className = "h5 " /> { "Undo" }
100119 </ button >
101- }
102- </ div >
103-
104- { editMode &&
105- < div role = "group" className = "btn-group w-100" >
106- < div className = "ml-4 flex-grow-1" >
107- < input id = "schema_save_description" placeholder = { "Enter a description to tag update" } type = "text" className = "form-control" onBlur = { handleCommitMessage } />
108120 </ div >
109- < button type = "button" id = "schema_save_button" className = "col-md-1 btn btn-md bg-light text-dark mr-4" onClick = { saveChange } >
110- < BsSave className = "small" /> < label className = "mt-1" > Save</ label >
111- </ button >
112121 </ div >
113- }
114-
115- < div className = "h-100 m-4" >
116- { report && < span className = "w-100 m-4" > { report } </ span > }
117-
122+ }
123+ { accessControlEditMode && ! editMode &&
124+ < button type = "button" className = "btn-edit-json-model btn btn-md btn-light text-dark float-right mr-2"
125+ onClick = { ( ) => { setEditMode ( true ) } } >
126+ < FaRegEdit className = "mb-1" /> Edit Schema
127+ </ button >
128+ }
118129 < CopyButton text = { jsonSchema }
119- label = { "Copy schema " }
130+ label = { "" }
120131 title = { `Copy JSON schema` }
121- css = { "btn btn-sm bg-light text-dark model-builder-copy-button" } />
122- < CodeMirror
123- onBlur = { ( editor , data ) => {
124- const editorValue = editor . doc . getValue ( )
125- onBlurHandler ( editorValue )
126- } }
127- value = { value }
128- options = { MODEL_BUILDER_EDITOR_OPTIONS }
129- className = "model-builder-code-mirror"
130- />
131- { /*<div><pre>{schema}</pre></div>*/ }
132- </ div >
132+ css = { "btn btn-md bg-light text-dark float-right" } />
133+ </ Stack >
134+ </ Card . Header >
135+ < div className = "h-100" >
136+ { report && < span className = "w-100 m-4" > { report } </ span > }
137+ < CodeMirror
138+ onBlur = { ( editor , data ) => {
139+ const editorValue = editor . doc . getValue ( )
140+ onBlurHandler ( editorValue )
141+ } }
142+ value = { value }
143+ options = { MODEL_BUILDER_EDITOR_OPTIONS }
144+ className = "model-builder-code-mirror"
145+ />
146+ { /*<div><pre>{schema}</pre></div>*/ }
133147 </ div >
134- </ React . Fragment >
135-
148+ </ Card >
149+ </ >
136150}
0 commit comments