updating ui

This commit is contained in:
martin 2020-10-26 09:54:30 +01:00
parent 6327dd633e
commit 748562fce1
8 changed files with 136 additions and 61 deletions

33
package-lock.json generated
View File

@ -34,6 +34,7 @@
"react-bootstrap": "^1.3.0",
"react-dom": "^16.13.1",
"react-icons": "^3.11.0",
"react-monaco-editor": "^0.40.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^6.6.3",
"simple-undo": "^1.0.2",
@ -7191,6 +7192,11 @@
"minimist": "^1.2.5"
}
},
"node_modules/monaco-editor": {
"version": "0.21.2",
"resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.21.2.tgz",
"integrity": "sha512-jS51RLuzMaoJpYbu7F6TPuWpnWTLD4kjRW0+AZzcryvbxrTwhNy1KC9yboyKpgMTahpUbDUsuQULoo0GV1EPqg=="
},
"node_modules/move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@ -9309,6 +9315,19 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
"node_modules/react-monaco-editor": {
"version": "0.40.0",
"resolved": "https://registry.npmjs.org/react-monaco-editor/-/react-monaco-editor-0.40.0.tgz",
"integrity": "sha512-IG322vOwKc/yjhn91xbqHONyAVxjv5L0YOUBU+hDwfswlglm/sGsqGhK9n1lD5d3l3kegMO/ZeZaMHC2LGgNRw==",
"dependencies": {
"monaco-editor": "*",
"prop-types": "^15.7.2"
},
"peerDependencies": {
"@types/react": "^16.x",
"react": "^16.x"
}
},
"node_modules/react-motion": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz",
@ -19489,6 +19508,11 @@
"minimist": "^1.2.5"
}
},
"monaco-editor": {
"version": "0.21.2",
"resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.21.2.tgz",
"integrity": "sha512-jS51RLuzMaoJpYbu7F6TPuWpnWTLD4kjRW0+AZzcryvbxrTwhNy1KC9yboyKpgMTahpUbDUsuQULoo0GV1EPqg=="
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@ -21644,6 +21668,15 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
"react-monaco-editor": {
"version": "0.40.0",
"resolved": "https://registry.npmjs.org/react-monaco-editor/-/react-monaco-editor-0.40.0.tgz",
"integrity": "sha512-IG322vOwKc/yjhn91xbqHONyAVxjv5L0YOUBU+hDwfswlglm/sGsqGhK9n1lD5d3l3kegMO/ZeZaMHC2LGgNRw==",
"requires": {
"monaco-editor": "*",
"prop-types": "^15.7.2"
}
},
"react-motion": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz",

View File

@ -52,6 +52,7 @@
"react-bootstrap": "^1.3.0",
"react-dom": "^16.13.1",
"react-icons": "^3.11.0",
"react-monaco-editor": "^0.40.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^6.6.3",
"simple-undo": "^1.0.2",

View File

@ -1,31 +1,27 @@
// https://react-jsonschema-form.readthedocs.io/en/latest/
import Form from "@rjsf/bootstrap-4";
import DynamicForm from '../../resources/ui/forms/dynamicForm'
const schema = {
"type": "object",
"properties": {
"hello": {
"type": "string"
}
},
"required": [
"hello"
]
} as any;
const formData = {hello:"world"};
const log = (type) => console.log.bind(console, type);
import DynamicRenderer from '../../resources/ui/dynamic/dynamicRenderer'
const test = () => {
const onSubmit = async data => {
console.log(data);
const props = {
schema: {
"type": "object",
"properties": {
"hello": {
"type": "string"
}
},
"required": [
"hello"
]
},
onSubmit: async data => {
console.log(data);
},
onCancel: async err => {
console.log('canceled',err)
}
}
const onCancel = async err => {
console.log('canceled',err)
}
return (
<DynamicForm schema={schema} onSubmit={onSubmit} onCancel={onCancel}/>
)};
export default test;
return (<DynamicRenderer component={'DynamicForm'} props={props}/>);
};
export default test

View File

@ -1,28 +1,6 @@
import DynamicRenderer from '../../resources/ui/dynamic/dynamicRenderer'
import DynamicForm from '../../resources/ui/forms/dynamicForm'
import DynamicRenderer from '../../resources/ui/codeEditor'
const test = () => {
const props = {
schema: {
"type": "object",
"properties": {
"hello": {
"type": "string"
}
},
"required": [
"hello"
]
},
onSubmit: async data => {
console.log(data);
},
onCancel: async err => {
console.log('canceled',err)
}
}
return (<DynamicRenderer component={'DynamicForm'} props={props}/>);
return (<DynamicRenderer code={"// TEST CODE"}/>);
};
export default test

View File

@ -0,0 +1,48 @@
import React from 'react';
import MonacoEditor from 'react-monaco-editor';
export interface CodeEditorProps {
code: string
}
export interface CodeEditorState {
code: string
}
class CodeEditor extends React.Component<CodeEditorProps, CodeEditorState> {
constructor(props) {
super(props);
this.state = {
code: '// type your code...',
}
}
editorDidMount(editor, monaco) {
console.log('editorDidMount', editor);
editor.focus();
}
onChange(newValue, e) {
console.log('onChange', newValue, e);
}
render() {
const code = this.state.code;
const options = {
selectOnLineNumbers: true
};
const _this = this;
return (
<MonacoEditor
width="800"
height="600"
language="javascript"
theme="vs-dark"
value={code}
options={options}
onChange={(...args) => _this.onChange(...args)}
editorDidMount={(...args) => _this.editorDidMount(...args)}
/>
);
}
}
export default CodeEditor;

View File

@ -1,6 +1,5 @@
import React from 'react';
import Form from "@rjsf/bootstrap-4";
import { deepClone } from '../../../lib/helpers/objectMethods';
import { IJsonSchema } from '../../types/IJSONSchema'
import { Button } from 'react-bootstrap';
@ -39,7 +38,7 @@ class DynamicForm<T = any> extends React.Component<DynamicFormProps<T>, DynamicF
return (
<Form schema={this.props.schema as any} formData={this.props.data} liveValidate onSubmit={e => this._submitButtonPressed(e.formData)}>
<Button type="submit" variant="success">Submit</Button>{' '}
<Button variant="warning" onClick={_ =>this._cancelButtonPressed()}>Cancel</Button>{' '}
<Button variant="danger" onClick={_ =>this._cancelButtonPressed()}>Cancel</Button>{' '}
</Form>
);
}

View File

@ -14,6 +14,7 @@ import { generateGraphOptions } from './defaults/default.graph-options';
import { makeMeMultiSelect } from './addons/selectionbox.extension';
import DynamicRenderer from '../dynamic/dynamicRenderer';
import { rgetattr, rsetattr } from '../../../lib/helpers/objectMethods';
import { Button } from 'react-bootstrap';
export interface GraphicalEditorComponentProps<N,E> extends Partial<LayoutProps<any>>{
@ -308,11 +309,7 @@ class GraphicalEditorComponent<N,E> extends React.Component<GraphicalEditorCompo
// const label = id;
_this.tabs[id] = {
nodes: [{
id: 'test',
shape: 'ellipse',
label
}],
nodes: [],
edges: [],
clusters: [],
version: "20200713",
@ -344,7 +341,30 @@ class GraphicalEditorComponent<N,E> extends React.Component<GraphicalEditorCompo
async onTabDelete(tabId: string) {
// A Tab should be deleted
return true;
try {
const saveData = await _this.getDialogData<boolean>({
header: 'Close Tab',
content: {
component: (props) => {
return (<>
<p>
You are about to close the tab. Do you want to save changes?
</p>
<Button variant="success"onClick={_ =>props.onSubmit(true)}>Yes</Button>{' '}
<Button variant="danger" onClick={_ =>props.onSubmit(false)}>No</Button>{' '}
<Button variant="secondary" onClick={_ =>props.onCancel(new Error("Canceled"))}>Cancel</Button>{' '}
</>)
},
props: {}
}
});
// The variable save Data contains the info, whether the user wants to save or discard the changes
return true;
} catch(error) {
return false
}
},
async onNoTabSelected() {

View File

@ -205,7 +205,7 @@ class Layout<T> extends React.Component<LayoutProps<T>, LayoutState<T>> {
<Nav.Item key={tab.id}>
<Nav.Link onSelect={_ => {
selectTab(tab.id);
}} eventKey={tab.id}>{tab.label}
}} eventKey={tab.id}>{tab.label + ' '}
<FaTimesCircle onClick={
(e) => {
e.preventDefault();