diff --git a/jsonforms-core-2.0.2.tgz b/jsonforms-core-2.0.2.tgz deleted file mode 100644 index 6ddc12f..0000000 Binary files a/jsonforms-core-2.0.2.tgz and /dev/null differ diff --git a/jsonforms-editor-2.0.2.tgz b/jsonforms-editor-2.0.2.tgz deleted file mode 100644 index f824702..0000000 Binary files a/jsonforms-editor-2.0.2.tgz and /dev/null differ diff --git a/jsonforms-material-renderers-2.0.2.tgz b/jsonforms-material-renderers-2.0.2.tgz deleted file mode 100644 index 80f7506..0000000 Binary files a/jsonforms-material-renderers-2.0.2.tgz and /dev/null differ diff --git a/jsonforms-react-2.0.2.tgz b/jsonforms-react-2.0.2.tgz deleted file mode 100644 index 85983fa..0000000 Binary files a/jsonforms-react-2.0.2.tgz and /dev/null differ diff --git a/package-lock.json b/package-lock.json index 4237240..8b891f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,62 +54,17 @@ } }, "@jsonforms/core": { - "version": "file:jsonforms-core-2.0.2.tgz", - "integrity": "sha512-TKI4+Uv7EJqvaSELzpYbKSCtCC+D1zn27i9tL0WAxQ0gyPINNkP0KiSR0E4gpUj9BIVDiAohBayrlgAC+59dKw==", - "requires": { - "ajv": "6.4.0", - "json-refs": "3.0.4", - "lodash": "4.17.5", - "redux": "3.7.2", - "uuid": "3.2.1" - }, - "dependencies": { - "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "requires": { - "lodash": "4.17.5", - "lodash-es": "4.17.8", - "loose-envify": "1.3.1", - "symbol-observable": "1.2.0" - } - } - } - }, - "@jsonforms/editor": { - "version": "file:jsonforms-editor-2.0.2.tgz", - "integrity": "sha512-PeMG+qTmIVMTZ157DI0Q9Zqtq0yVwDkm4vwS04CNlIQKeCP9h1Si5Q7yBV7PtUSeqB13LCpfZ7Tz5i/xCGPd1Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@jsonforms/core/-/core-2.0.6.tgz", + "integrity": "sha512-mOoH8A73nWvhYYCfM8omXqH3WQWf1GRN+VAf4c6tABdibNpgwwulKl3fA2SGD4LFrVZCg3F72HseM1Tts/bEKg==", "requires": { - "@jsonforms/core": "file:jsonforms-core-2.0.2.tgz", - "@jsonforms/react": "file:jsonforms-react-2.0.2.tgz", - "@jsonforms/webcomponent": "2.0.2", - "@material-ui/core": "1.2.2", - "@material-ui/icons": "1.0.0", "ajv": "6.4.0", "json-refs": "3.0.4", "lodash": "4.17.5", - "react": "16.3.2", - "react-dnd": "2.6.0", - "react-dnd-html5-backend": "2.6.0", - "react-dom": "16.4.1", - "react-redux": "5.0.7", - "recompose": "0.27.1", "redux": "3.7.2", "uuid": "3.2.1" }, "dependencies": { - "react-dom": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", - "integrity": "sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A==", - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" - } - }, "redux": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", @@ -124,13 +79,15 @@ } }, "@jsonforms/material-renderers": { - "version": "file:jsonforms-material-renderers-2.0.2.tgz", - "integrity": "sha512-JmS5bi8T9d0tVpfQNTUyGtatrGHfgTvZcF4gLMP2BtysxjgCmobMTciJ0ecczHNuIaievpEPTj1+ZB0gqu6WQQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@jsonforms/material-renderers/-/material-renderers-2.0.6.tgz", + "integrity": "sha512-6NkUvYY95HrEAzDAGhy9OvrHysx5h1QmOX+vIcYMpXsGyh3NhXLxEGFtYh86PkspLZyrKj+Ij9owcIzTnKHkIw==", "requires": { - "@jsonforms/core": "file:jsonforms-core-2.0.2.tgz", - "@jsonforms/react": "file:jsonforms-react-2.0.2.tgz", + "@jsonforms/core": "2.0.6", + "@jsonforms/react": "2.0.6", "@material-ui/core": "1.2.2", "@material-ui/icons": "1.0.0", + "@material-ui/lab": "1.0.0-alpha.8", "material-ui-pickers": "1.0.0-rc.9", "moment": "2.22.2", "react": "16.3.2", @@ -150,32 +107,51 @@ } } }, - "@jsonforms/react": { - "version": "file:jsonforms-react-2.0.2.tgz", - "integrity": "sha512-XlUsPfT0cgAy1x3Nk0gxq18Oh64Xc2xIBvbAG+DFYPbbd7ft+to094v9J6LsJZJyKIQ98l1akMaRnN+y7hFLKQ==", - "requires": { - "@jsonforms/core": "file:jsonforms-core-2.0.2.tgz", - "lodash": "4.17.5", - "react": "16.3.2", - "react-redux": "5.0.7" - } - }, - "@jsonforms/webcomponent": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@jsonforms/webcomponent/-/webcomponent-2.0.2.tgz", - "integrity": "sha512-KD85fijOU3SN7mpIJOBRnu8/ML8vkw8F0s/vKgcgQQ6E2GJXNtaejGAcEZRfoXQJ37T/7Ru/afigKU3bfsLr6Q==", + "@jsonforms/material-tree-renderer": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@jsonforms/material-tree-renderer/-/material-tree-renderer-2.0.6.tgz", + "integrity": "sha512-qThlhY/sDdHCFoDl1Aes8QV1UunVHaPLMGKvau8Z0RNo53va4dbzP610dMWPiTUudo+rmr+qYOijt7tBoPNXrw==", "requires": { - "@jsonforms/core": "file:jsonforms-core-2.0.2.tgz", - "@jsonforms/react": "file:jsonforms-react-2.0.2.tgz", - "@webcomponents/webcomponentsjs": "1.2.2", - "es6-shim": "0.35.3", + "@jsonforms/core": "2.0.6", + "@jsonforms/react": "2.0.6", + "@material-ui/core": "1.2.2", + "@material-ui/icons": "1.0.0", + "ajv": "6.4.0", "json-refs": "3.0.4", + "lodash": "4.17.5", "react": "16.3.2", + "react-dnd": "2.6.0", + "react-dnd-html5-backend": "2.6.0", "react-dom": "16.4.1", "react-redux": "5.0.7", - "redux": "3.7.2" + "recompose": "0.27.1", + "redux": "3.7.2", + "uuid": "3.2.1" }, "dependencies": { + "@jsonforms/core": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@jsonforms/core/-/core-2.0.6.tgz", + "integrity": "sha512-mOoH8A73nWvhYYCfM8omXqH3WQWf1GRN+VAf4c6tABdibNpgwwulKl3fA2SGD4LFrVZCg3F72HseM1Tts/bEKg==", + "requires": { + "ajv": "6.4.0", + "json-refs": "3.0.4", + "lodash": "4.17.5", + "redux": "3.7.2", + "uuid": "3.2.1" + } + }, + "@jsonforms/react": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@jsonforms/react/-/react-2.0.6.tgz", + "integrity": "sha512-zzHXDSOrFvqu70W+u2hzu0KfaBdu1dUdk/Y9YixafISkQoPmRR8Eh9K8Qz/62ar0b76tgtYU/w99tVBpNnz8cQ==", + "requires": { + "@jsonforms/core": "2.0.6", + "lodash": "4.17.5", + "react": "16.3.2", + "react-redux": "5.0.7" + } + }, "react-dom": { "version": "16.4.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.1.tgz", @@ -200,6 +176,17 @@ } } }, + "@jsonforms/react": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@jsonforms/react/-/react-2.0.6.tgz", + "integrity": "sha512-zzHXDSOrFvqu70W+u2hzu0KfaBdu1dUdk/Y9YixafISkQoPmRR8Eh9K8Qz/62ar0b76tgtYU/w99tVBpNnz8cQ==", + "requires": { + "@jsonforms/core": "2.0.6", + "lodash": "4.17.5", + "react": "16.3.2", + "react-redux": "5.0.7" + } + }, "@material-ui/core": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-1.2.2.tgz", @@ -257,6 +244,11 @@ "recompose": "0.27.1" } }, + "@material-ui/lab": { + "version": "1.0.0-alpha.8", + "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-1.0.0-alpha.8.tgz", + "integrity": "sha512-zZzkw6Xphb3Dtuob43G/QL6ZIBnoEHZm2PvMFFSeeLXyV6393AtVjZPiDLvPjUBQ1SwlOIoW5U+Pn1ahO8URvg==" + }, "@types/jest": { "version": "22.2.2", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-22.2.2.tgz", @@ -309,11 +301,6 @@ "@types/react": "16.3.13" } }, - "@webcomponents/webcomponentsjs": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.2.2.tgz", - "integrity": "sha512-VQlEKZwJFBz4x7VwYdZYeCNYvF39hJHoaGKfcKnv6u01tkXK9c0UCl1Zx4yBrMF+H1+rFvX6PLzDLFgUvZagmQ==" - }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -3701,11 +3688,6 @@ "event-emitter": "0.3.5" } }, - "es6-shim": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.3.tgz", - "integrity": "sha1-m/tzY/7//4emzbbNk+QF7DxLbyY=" - }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", diff --git a/package.json b/package.json index 34802e6..e0d83ef 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "bugs": "https://github.com/eclipsesource/jsonforms-ui-schema-editor/issues", "homepage": "https://AhmetTanakol.github.io/jsonforms-ui-schema-editor/", "dependencies": { - "@jsonforms/core": "file:jsonforms-core-2.0.2.tgz", - "@jsonforms/editor": "file:jsonforms-editor-2.0.2.tgz", - "@jsonforms/material-renderers": "file:jsonforms-material-renderers-2.0.2.tgz", - "@jsonforms/react": "file:jsonforms-react-2.0.2.tgz", + "@jsonforms/core": "^2.0.6", + "@jsonforms/material-renderers": "^2.0.6", + "@jsonforms/material-tree-renderer": "^2.0.6", + "@jsonforms/react": "^2.0.6", "@material-ui/core": "^1.2.1", "@material-ui/icons": "^1.0.0", "@types/lodash": "^4.14.106", @@ -43,7 +43,8 @@ "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", "testPathIgnorePatterns": [ "/node_modules/" - ] + ], + "testURL": "http://localhost/" }, "devDependencies": { "@types/jest": "^22.2.2", diff --git a/src/App.tsx b/src/App.tsx index 6a61a22..b854445 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,16 +8,12 @@ import { createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles'; const theme = createMuiTheme({ palette: { - type: 'dark', - primary: { - main: '#FFFFFF' - }, secondary: { main: '#ee6e73', dark: '#26a69a' }, background: { - 'default': '#1e1e1e' + 'default': '#3748AC' } }, typography: { diff --git a/src/editor/JsonEditorIde.tsx b/src/editor/JsonEditorIde.tsx index cddd71b..65693b2 100644 --- a/src/editor/JsonEditorIde.tsx +++ b/src/editor/JsonEditorIde.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import { connect } from 'react-redux'; -import { TreeRenderer } from '@jsonforms/editor'; -import './jsoneditor.css'; +import { TreeWithDetailRenderer } from '@jsonforms/material-tree-renderer'; import './example.css'; const JsonFormsEditorIde = props => { @@ -9,7 +8,7 @@ const JsonFormsEditorIde = props => { return (
- = theme => ({ @@ -37,8 +35,7 @@ const styles: marginLeft: theme.spacing.unit }, button: { - margin: theme.spacing.unit, - color: theme.palette.text.primary + margin: theme.spacing.unit } }); @@ -138,8 +135,9 @@ class EditorBar extends return; } if (!_.isEmpty(readData)) { - const valid = ajv.validate(schema, readData); - if (valid) { + const validator = validate(schema); + const errors = validator(readData); + if (_.isEmpty(errors)) { this.props.updateRootData(readData); } else { alert('Loaded data does not adhere to the specified schema.'); @@ -159,10 +157,10 @@ class EditorBar extends
- + UI Schema Editor - @@ -171,7 +169,7 @@ class EditorBar extends readOnly={false} onClose={this.handleModelSchemaClose} /> - diff --git a/src/editor/app-bar/dialogs/ModelSchemaDialog.tsx b/src/editor/app-bar/dialogs/ModelSchemaDialog.tsx index 4f62a1e..e2ad77d 100644 --- a/src/editor/app-bar/dialogs/ModelSchemaDialog.tsx +++ b/src/editor/app-bar/dialogs/ModelSchemaDialog.tsx @@ -11,7 +11,7 @@ import TextField from '@material-ui/core/TextField'; import withMobileDialog from '@material-ui/core/withMobileDialog'; import { getData, getUiSchema } from '@jsonforms/core'; import PreviewDialog from './PreviewDialog'; -import { getModelSchema, setModelSchema } from '../../../reducers'; +import { setModelSchema } from '../../../reducers'; const styles: StyleRulesCallback<'textarea'> = () => ({ textarea: { @@ -27,7 +27,6 @@ interface ModelSchemaDialogProps { onClose: any; readOnly: boolean; open: boolean; - modelSchema?: any; setModelSchema?: any; fullScreen?: boolean; rootData?: any; @@ -35,22 +34,21 @@ interface ModelSchemaDialogProps { interface ModelSchemaDialogState { modelSchema: any; + inputValue: string; preview: { open: boolean }; - textInput: any; } class ModelSchemaDialog extends React.Component, ModelSchemaDialogState> { private textInput; componentWillMount() { - const { modelSchema } = this.props; - this.textInput = null; + this.textInput = {}; this.setState({ - modelSchema: modelSchema, - textInput: null, + modelSchema: {}, + inputValue: '{}', preview: { open: false } @@ -58,17 +56,9 @@ class ModelSchemaDialog extends } handleChange = event => { - try { - const modelSchema = JSON.parse(event.target.value); - this.setState({ - modelSchema: modelSchema - }); - } catch (err) { - console.error('The entered text did not contain valid JSON.', err); - alert(`The entered text does not contain valid JSON`); - - return; - } + this.setState({ + inputValue: event.target.value + }); } handleCancel = () => { @@ -81,11 +71,20 @@ class ModelSchemaDialog extends } handlePreviewOpen = () => { - this.setState({ - preview: { - open: true - } - }); + try { + const modelSchema = JSON.parse(this.textInput.value); + this.setState({ + preview: { + open: true + }, + modelSchema: modelSchema + }); + } catch (err) { + console.error('The entered text did not contain valid JSON.', err); + alert(`The entered text does not contain valid JSON`); + + return; + } } handlePreviewClose = () => { @@ -105,7 +104,8 @@ class ModelSchemaDialog extends const { classes, fullScreen, open, rootData, readOnly } = this.props; const textFieldData = readOnly ? JSON.stringify(rootData, null, 2) : - JSON.stringify(this.state.modelSchema, null, 2); + this.state.inputValue; + const disabled = this.state.inputValue === '{}' || this.state.inputValue === ''; return ( @@ -141,7 +141,11 @@ class ModelSchemaDialog extends -
@@ -168,7 +172,6 @@ const mapStateToProps = (state, ownProps) => { onClose: ownProps.onClose, readOnly: ownProps.readOnly, open: ownProps.open, - modelSchema: getModelSchema(state), uischema: getUiSchema(state) }; }; diff --git a/src/editor/app-bar/dialogs/PreviewDialog.tsx b/src/editor/app-bar/dialogs/PreviewDialog.tsx index 1e185df..d571851 100644 --- a/src/editor/app-bar/dialogs/PreviewDialog.tsx +++ b/src/editor/app-bar/dialogs/PreviewDialog.tsx @@ -51,10 +51,10 @@ class PreviewDialog extends > - + - + Preview diff --git a/src/editor/jsoneditor.css b/src/editor/jsoneditor.css deleted file mode 100644 index f3dc860..0000000 --- a/src/editor/jsoneditor.css +++ /dev/null @@ -1,212 +0,0 @@ -:root { - --jsf-modest-bg-color: #217daf; - --jsf-border-color: lightgray; - --jsf-validation-color: #F44336; -} - -body { - background-color: #1e1e1e; -} - -#editor { - margin: auto; - width: 75%; -} - -.array-button { - margin-right: 0.5em -} - -.group.label { - color: lightgray; -} - -.validation_error { - color: var(--jsf-validation-color); -} - -fieldset { - margin-bottom: 0.5em; -} - -fieldset legend label { - font-size: 1em; -} - -jsf-treeMasterDetail { - display: flex; - flex-direction: column; -} -.jsf-treeMasterDetail > .jsf-treeMasterDetail-content { - display: flex; - flex-direction: row; -} -.jsf-treeMasterDetail > .jsf-treeMasterDetail-content > * { - padding: 0.5em; - border-style: solid; - border-width: thin; - border-color: var(--jsf-border-color); - border-radius: 0.2em; -} -.jsf-treeMasterDetail > .jsf-treeMasterDetail-content > *:first-child { - margin-right: 0.25em; -} -.jsf-treeMasterDetail-master { - flex:1; -} -.jsf-treeMasterDetail-detail { - flex:3; -} -.jsf-treeMasterDetail-master ul { - list-style-type: none; - margin: 0; - padding: 0; - position: relative; - overflow:hidden; -} -.jsf-treeMasterDetail-master li { - min-height: 1em; - position: relative; - padding-left: 1.5em; -} -.jsf-treeMasterDetail-master li > div { - display: flex; - flex-direction: row; -} -.jsf-treeMasterDetail-master li > div > .icon { - flex-basis: 1em; - min-height: 1em; - margin-right: 0.25em; - background-repeat: no-repeat; - background-position: center; -} - -.jsf-treeMasterDetail-master li.selected > div > .label { - font-weight: bold; -} -.jsf-treeMasterDetail-master li > div > .label { - display: flex; - flex: 1; - margin-right: 1em; - min-height: 1.5em; - color: white; - align-items: center; -} -/* TODO: Needed? */ -.jsf-treeMasterDetail-master li > div > .label > span:first-child:empty { - background: #ffff00; - max-height: 1.5em; -} -.jsf-treeMasterDetail-master li > div > .label:hover { - font-weight: bold; - cursor: pointer; - color: white; - opacity: 0.9; - background-color: var(--jsf-modest-bg-color); -} -.jsf-treeMasterDetail-master li > div > .label > .add, -.jsf-treeMasterDetail-master li > div > .label > .remove { - display: none; - cursor: pointer; - margin-left: 0.25em; - font-weight: normal; - width: inherit; - height: inherit; -} -.jsf-treeMasterDetail-master li > div > .label:hover > .add, -.jsf-treeMasterDetail-master li > div > .label:hover > .remove { - display: flex; - justify-content: center; -} -.jsf-treeMasterDetail-master li > div > .label:hover > .add:hover, -.jsf-treeMasterDetail-master li > div > .label:hover > .remove:hover { - color: white; - border-radius: 50%; -} -.jsf-treeMasterDetail-master li::before, -.jsf-treeMasterDetail-master li::after, -.jsf-treeMasterDetail-master ul::after { - content: ''; - position: absolute; - left:0.2em; -} -.jsf-treeMasterDetail-master li::before { - border-top: 1px solid var(--jsf-border-color); - top:0.5em; - width: 1em; -} -.jsf-treeMasterDetail-master li::after { - border-left: 1px solid var(--jsf-border-color); - height:100%; - top:-0.6em; -} -.jsf-treeMasterDetail-master ul::after { - border-left: 1px solid var(--jsf-border-color); - height: 0.6em; - bottom: 0; -} -.jsf-treeMasterDetail-master ul:last-child::after { - display: none; -} -.jsf-treeMasterDetail-master > ul > li::after { - top:0.5em; -} -.jsf-treeMasterDetail-master > ul > li:last-child::after { - display: none; -} -.jsf-treeMasterDetail-master > ul > li:only-child::before { - display: none; -} -.jsf-treeMasterDetail-master > ul > li:only-child { - padding-left: 0.25em; -} - -/* tree master detail create dialog */ -.jsf-treeMasterDetail-dialog { - border-width: medium; - border-radius: 8px; - border-color: lightgrey -} -.jsf-treeMasterDetail-dialog-title { - font-size: large; -} -.jsf-treeMasterDetail-dialog-content { - display: flex; - flex-direction: column; -} -.jsf-treeMasterDetail-dialog-button, -.jsf-treeMasterDetail-dialog-createbutton { - margin-bottom: 5px -} -.jsf-treeMasterDetail-dialog-button { - width: 100%; - margin-top: 10px; - margin-bottom: 0; -} - -.jsf-treeMasterDetail-dialog-close { - width: 100%; - margin-top: 20px; -} - -/* Drag and Drop */ -/* Create border for possible drag and drop drop-zones */ - -.jsf-editor-dnd-target-valid, -.jsf-editor-dnd-target-invalid { - border-style: dashed; - border-width: thin; -} - -.jsf-editor-dnd-target-valid { - border-color: rgb(88, 199, 23); - min-height: 1em; -} - -.jsf-editor-dnd-target-invalid { - border-color: rgb(189, 0, 0); -} - -.jsf-editor-dnd-current-target { - border-width: medium; -} diff --git a/src/editor/util/ExpectedValueField.tsx b/src/editor/util/ExpectedValueField.tsx index 6b00285..f0c9e26 100644 --- a/src/editor/util/ExpectedValueField.tsx +++ b/src/editor/util/ExpectedValueField.tsx @@ -8,7 +8,8 @@ import { rankWith, schemaSubPathMatches, StatePropsOfEnumField, - uiTypeIs + uiTypeIs, + update } from '@jsonforms/core'; import * as _ from 'lodash'; import { MaterialEnumField } from '@jsonforms/material-renderers'; @@ -40,8 +41,12 @@ interface EnumFieldState { selectedType: string; } +interface ExpectedValueFieldProps extends EnumFieldProps { + updateRootData: any; +} + export class ExpectedValueField extends - React.Component { + React.Component { constructor(props) { super(props); @@ -51,6 +56,11 @@ export class ExpectedValueField extends } selectionHandle = (path, value) => { + if (value === 'boolean') { + this.props.updateRootData(this.props.path, false); + } else { + this.props.updateRootData(this.props.path, undefined); + } this.setState({ selectedType: value }); @@ -72,7 +82,9 @@ export class ExpectedValueField extends { @@ -89,6 +101,13 @@ export class ExpectedValueField extends } } +const mapDispatchToEnumFieldProps = dispatch => ({ + updateRootData(path, value) { + dispatch(update(path, () => value)); + } +}); + export default connect( - mapStateToEnumFieldProps + mapStateToEnumFieldProps, + mapDispatchToEnumFieldProps )(ExpectedValueField); diff --git a/src/index.tsx b/src/index.tsx index 01f080d..e1214e8 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -14,11 +14,11 @@ import { RankedTester } from '@jsonforms/core'; import { - editorReducer, findAllContainerProperties, Property, - setContainerProperties -} from '@jsonforms/editor'; + setContainerProperties, + treeWithDetailReducer +} from '@jsonforms/material-tree-renderer'; import { uiEditorReducer } from './reducers'; import NonEmptyLayoutRenderer, { nonEmptyLayoutTester } from './editor/util/NonEmptyLayout'; import ExpectedValueField, { @@ -99,7 +99,7 @@ const jsonforms: any = { jsonforms: { renderers, fields, - editor: { + treeWithDetail: { imageMapping: imageProvider, labelMapping: labelProvider, modelMapping, @@ -115,7 +115,7 @@ const store: Store = createStore( combineReducers({ jsonforms: jsonformsReducer( { - editor: editorReducer, + treeWithDetail: treeWithDetailReducer, uiEditor: uiEditorReducer } ) diff --git a/src/models/ui-metaschema.ts b/src/models/ui-metaschema.ts index 3755228..b2edfa6 100644 --- a/src/models/ui-metaschema.ts +++ b/src/models/ui-metaschema.ts @@ -203,7 +203,8 @@ export const uiMetaSchema: JsonSchema7 = { 'properties': { 'type': { 'type': 'string', - 'const': 'LEAF' + 'const': 'LEAF', + 'default': 'LEAF' }, 'scope': { '$ref': '#/definitions/scope' @@ -224,10 +225,10 @@ export const uiMetaSchema: JsonSchema7 = { ] } }, - 'required': [ - 'effect', - 'condition' - ] + 'dependencies': { + 'effect': ['condition'], + 'condition': ['effect'] + } }, 'scope': { 'type': 'string',