From 71b0c75ce1e419e9397fc31ea243e61f4529175d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B3mez?= Date: Sun, 24 Jul 2016 23:12:43 -0300 Subject: [PATCH 1/8] First refactor to remove underscore, there is still how to change some code in MetadataProvider that seems to be simpler with _.each --- demo/less/styles.less | 2 ++ src/metadata/MetadataProvider.js | 23 +++++++++---------- .../evaluator/filter/arrayMetadataFilter.js | 6 ++--- .../evaluator/filter/defaultMetadataFilter.js | 4 +--- .../evaluator/filter/entityMetadataFilter.js | 4 +--- src/metadata/evaluator/metadataEvaluator.js | 3 +-- src/metadata/model/modelParser.js | 6 ++--- src/metadata/validator/metadataValidator.js | 3 +-- 8 files changed, 21 insertions(+), 30 deletions(-) diff --git a/demo/less/styles.less b/demo/less/styles.less index f21b2d2..0ec07c9 100644 --- a/demo/less/styles.less +++ b/demo/less/styles.less @@ -2,4 +2,6 @@ @import '../../node_modules/font-awesome/less/font-awesome.less'; @import '../../node_modules/react-widgets/dist/css/react-widgets.css'; @import '../../node_modules/react-select/dist/react-select.css'; +@import '../../node_modules/redux-autoform-bootstrap-ui/lib/styles/styles'; +@import '../../node_modules/redux-autoform-bootstrap-ui/lib/styles/styles-defaultfactories'; @import './LiveSchemaEditor.less'; \ No newline at end of file diff --git a/src/metadata/MetadataProvider.js b/src/metadata/MetadataProvider.js index 60e09aa..cda64d1 100644 --- a/src/metadata/MetadataProvider.js +++ b/src/metadata/MetadataProvider.js @@ -1,5 +1,4 @@ import _ from 'underscore'; -import clone from 'clone'; export default class MetadataProvider { @@ -38,7 +37,7 @@ export default class MetadataProvider { }); } - schema = clone(schema); + schema = {...schema}; schema.entities = MetadataProvider.canonizeArray(schema.entities); _.each(schema.entities, entity => { entity.fields = MetadataProvider.canonizeArray(entity.fields); @@ -71,10 +70,10 @@ export default class MetadataProvider { return obj; // let's create an array - return _.map(_.keys(obj), (property) => { + return Object.keys(obj).map((property) => { if (!_.isObject(obj[property])) throw Error('cannot generate canonical array. Every field should be an object'); - return _.extend({name: property}, obj[property]); + return {name: property, ...obj[property]}; }); } @@ -101,7 +100,7 @@ export default class MetadataProvider { let entity; if(entityName) - entity = _.find(schema.entities, e => e.name === entityName); + entity = schema.entities.find(e => e.name === entityName); else { if(schema.entities.length != 1) throw Error('When an entityName is not specified, there must be one and only one entity'); @@ -123,7 +122,7 @@ export default class MetadataProvider { let layout; if(layoutName) - layout = _.find(entity.layouts, l => l.name === layoutName); + layout = entity.layouts.find(l => l.name === layoutName); else { if(entity.layouts.length != 1) throw Error('When the layoutName is not specified, there must be one and only one layout'); @@ -170,8 +169,8 @@ export default class MetadataProvider { let thisGroupFields = []; if (layout.groups) { - _.each(layout.groups, g => { - thisGroupFields = _.union(thisGroupFields, this.getFieldsInternal(schema, entity, g, partialResult, callback)) + layout.groups.forEach(g => { + thisGroupFields = [... new Set(thisGroupFields.concat(this.getFieldsInternal(schema, entity, g, partialResult, callback)))]; }); } @@ -180,9 +179,9 @@ export default class MetadataProvider { for (let i = 0; i < layout.fields.length; i++) { let groupField = layout.fields[i]; - let existingEntityProperty = _.find(entity.fields, field => field.name == groupField.name); + let existingEntityProperty = entity.fields.find(field => field.name == groupField.name); - let field = _.extend({}, existingEntityProperty || {}, groupField); + let field = {...existingEntityProperty || {}, ...groupField}; this.validateFieldMetadata(field); thisGroupFields.push(field); @@ -222,7 +221,7 @@ export default class MetadataProvider { } } - return _.union(partialResult, thisGroupFields); + return [...new Set(partialResult.concat(thisGroupFields))]; } /** @@ -306,7 +305,7 @@ export default class MetadataProvider { if (!fieldMetadata) throw Error('fieldMetadata should be truthy'); let result = []; - _.each(fieldMetadata, f => { + fieldMetadata.forEach(f => { if (f.fields) { // if a field has fields, it's either an array or a complex object let fieldPrefix = f.type == 'array' ? `${f.name}[]` : f.name; diff --git a/src/metadata/evaluator/filter/arrayMetadataFilter.js b/src/metadata/evaluator/filter/arrayMetadataFilter.js index 2c932b2..fd261b8 100644 --- a/src/metadata/evaluator/filter/arrayMetadataFilter.js +++ b/src/metadata/evaluator/filter/arrayMetadataFilter.js @@ -1,5 +1,3 @@ -import _ from 'underscore'; - export default { filter: function(propertyMetadata, model, keyPrefix, metadataEvaluator, reduxProps, onChange) { @@ -11,7 +9,7 @@ export default { throw Error('when metadata is of type \'array\' and arrayType is \'entity\', it must have a fields property'); } - if (!_.has(model, propertyMetadata.name) || model[propertyMetadata.name] === null || model[propertyMetadata.name] === undefined) { + if (!model.hasOwnProperty(propertyMetadata.name) || model[propertyMetadata.name] === null || model[propertyMetadata.name] === undefined) { // if the property does not exist, create it model[propertyMetadata.name] = []; } else { @@ -24,7 +22,7 @@ export default { // returns the reduxProps for a particular array item let getReduxPropsForItem = (index) => { if(!reduxProps) return undefined; - if(!_.has(reduxProps, propertyMetadata.name)) throw Error('reduxProps is defined but it does not have the required property metadata'); + if(!reduxProps.hasOwnProperty(propertyMetadata.name)) throw Error('reduxProps is defined but it does not have the required property metadata'); return reduxProps[propertyMetadata.name][index]; }; diff --git a/src/metadata/evaluator/filter/defaultMetadataFilter.js b/src/metadata/evaluator/filter/defaultMetadataFilter.js index 38fafad..c04bbfa 100644 --- a/src/metadata/evaluator/filter/defaultMetadataFilter.js +++ b/src/metadata/evaluator/filter/defaultMetadataFilter.js @@ -1,5 +1,3 @@ -import _ from 'underscore'; - export default { filter: function(propertyMetadata, model, keyPrefix, metadataEvaluator, reduxProps, onChange) { @@ -9,7 +7,7 @@ export default { propertyMetadata.key = keyPrefix; // set redux properties - if(_.has(reduxProps, propertyMetadata.name)) { + if(reduxProps.hasOwnProperty(propertyMetadata.name)) { propertyMetadata.reduxFormProps = reduxProps[propertyMetadata.name]; } diff --git a/src/metadata/evaluator/filter/entityMetadataFilter.js b/src/metadata/evaluator/filter/entityMetadataFilter.js index 7e04536..f29aa3a 100644 --- a/src/metadata/evaluator/filter/entityMetadataFilter.js +++ b/src/metadata/evaluator/filter/entityMetadataFilter.js @@ -1,5 +1,3 @@ -import _ from 'underscore'; - export default { filter: function(propertyMetadata, model, keyPrefix, metadataEvaluator, reduxProps, onChange) { if(!propertyMetadata) { @@ -13,7 +11,7 @@ export default { throw Error('when metadata is of type entity, it must have a fields property'); } - if(!_.has(model, propertyMetadata.name) || model[propertyMetadata.name] === null || model[propertyMetadata.name] === undefined) { + if(!model.hasOwnProperty(propertyMetadata.name) || model[propertyMetadata.name] === null || model[propertyMetadata.name] === undefined) { // if the property does not exist, create it model[propertyMetadata.name] = {}; } else { diff --git a/src/metadata/evaluator/metadataEvaluator.js b/src/metadata/evaluator/metadataEvaluator.js index fcb1633..7cd3ac9 100644 --- a/src/metadata/evaluator/metadataEvaluator.js +++ b/src/metadata/evaluator/metadataEvaluator.js @@ -5,7 +5,6 @@ import arrayMetadataFilter from './filter/arrayMetadataFilter.js'; // property filters import defaultPropertyMetadataFilter from './property-filter/defaultMetadataPropertyFilter.js'; -import _ from 'underscore'; class MetadataEvaluator { @@ -33,7 +32,7 @@ class MetadataEvaluator { if (propertyMetadata.constructor === Array) return propertyMetadata.map(i => this.evaluate(i, model, keyPrefix, reduxFieldProps, onChange)); let result = {}; - _.each(_.keys(propertyMetadata), (fieldName) => { + Object.keys(propertyMetadata).forEach((fieldName) => { result[fieldName] = this.filterPropertyField(fieldName, propertyMetadata[fieldName], model); }); let newPrefix = keyPrefix ? `${keyPrefix}.${propertyMetadata.name}` : propertyMetadata.name; diff --git a/src/metadata/model/modelParser.js b/src/metadata/model/modelParser.js index 21f6f85..043ca4e 100644 --- a/src/metadata/model/modelParser.js +++ b/src/metadata/model/modelParser.js @@ -1,5 +1,3 @@ -import _ from 'underscore'; - import dateTimeParser from './parsers/dateTimeParser'; import numberParser from './parsers/numberParser'; import entityParser from './parsers/entityParser'; @@ -23,7 +21,7 @@ class ModelProcessor { let result = {}; - _.each(propertyMetadata, (eachPropertyMetadata) => { + propertyMetadata.forEach((eachPropertyMetadata) => { result[eachPropertyMetadata.name] = this.processProperty(eachPropertyMetadata, model); }); @@ -38,7 +36,7 @@ class ModelProcessor { if (!types) throw Error('\'type\' should be truthy'); if (!(types instanceof Array)) throw Error('type should be an array'); - _.each(types, type => { + types.forEach(type => { this.parsers[type] = parser; }); } diff --git a/src/metadata/validator/metadataValidator.js b/src/metadata/validator/metadataValidator.js index 6e7d32b..ff1201f 100644 --- a/src/metadata/validator/metadataValidator.js +++ b/src/metadata/validator/metadataValidator.js @@ -1,4 +1,3 @@ -import _ from 'underscore'; import defaultValidator from './validators/defaultMetadataValidator'; import arrayValidator from './validators/arrayValidator'; import entityValidator from './validators/entityValidator'; @@ -21,7 +20,7 @@ var validator = { if (propertyMetadata.constructor !== Array) throw Error('ApropertyMetadata should be an array'); let validationResult = {}; - _.each(propertyMetadata, m => { + propertyMetadata.forEach(m => { let propertyValidation; for(let i = 0; i < this.validators.length; i++) { let validate = this.validators[i]; From 212a34a0c137fd0c2221367f03ca7ffcec61352f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B3mez?= Date: Sun, 24 Jul 2016 23:39:37 -0300 Subject: [PATCH 2/8] Refactored isArray and isObject --- src/metadata/MetadataProvider.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/metadata/MetadataProvider.js b/src/metadata/MetadataProvider.js index cda64d1..bfff0b1 100644 --- a/src/metadata/MetadataProvider.js +++ b/src/metadata/MetadataProvider.js @@ -66,12 +66,13 @@ export default class MetadataProvider { static canonizeArray(obj) { if (!obj) return obj; // this is so the canonizeSchema method doesn't have to check every property for undefined - if (_.isArray(obj)) + if (Array.isArray(obj)) return obj; // let's create an array return Object.keys(obj).map((property) => { - if (!_.isObject(obj[property])) + let isObject = obj[property] && typeof obj[property] === "object"; + if (!isObject) throw Error('cannot generate canonical array. Every field should be an object'); return {name: property, ...obj[property]}; }); From fb4e1e7488176d19dc96fc24eefbd89ccfb33f75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B3mez?= Date: Mon, 25 Jul 2016 23:43:22 -0300 Subject: [PATCH 3/8] Removed underscore, implemented recursive schema array canonization --- src/metadata/MetadataProvider.js | 40 +++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/metadata/MetadataProvider.js b/src/metadata/MetadataProvider.js index bfff0b1..aea9e0f 100644 --- a/src/metadata/MetadataProvider.js +++ b/src/metadata/MetadataProvider.js @@ -1,5 +1,3 @@ -import _ from 'underscore'; - export default class MetadataProvider { /** @@ -38,22 +36,36 @@ export default class MetadataProvider { } schema = {...schema}; - schema.entities = MetadataProvider.canonizeArray(schema.entities); - _.each(schema.entities, entity => { - entity.fields = MetadataProvider.canonizeArray(entity.fields); - entity.layouts = MetadataProvider.canonizeArray(entity.layouts); - _.each(entity.layouts, layout => { - layout.fields = MetadataProvider.canonizeArray(layout.fields); - layout.groups = MetadataProvider.canonizeArray(layout.groups); - _.each(layout.groups, group => { - group.fields = MetadataProvider.canonizeArray(group.fields); - }) - }); - }); + this._canonizeArrays(schema, ["entities", "layouts", "groups"]) + + //schema.entities = MetadataProvider.canonizeArray(schema.entities); + //_.each(schema.entities, entity => { + // entity.fields = MetadataProvider.canonizeArray(entity.fields); + // entity.layouts = MetadataProvider.canonizeArray(entity.layouts); + // _.each(entity.layouts, layout => { + // layout.fields = MetadataProvider.canonizeArray(layout.fields); + // layout.groups = MetadataProvider.canonizeArray(layout.groups); + // _.each(layout.groups, group => { + // group.fields = MetadataProvider.canonizeArray(group.fields); + // }) + // }); + //}); + return schema; } + static _canonizeArrays(dataArray, keys, id = 0) { + dataArray[keys[id]] = MetadataProvider.canonizeArray(dataArray[keys[id]]); + if(dataArray[keys[id]]) { + dataArray[keys[id]].forEach(elem => { + elem.fields = MetadataProvider.canonizeArray(elem.fields); + if(++id < keys.length) + this._canonizeArrays(elem, keys, id); + }) + } + + } /** * Ensures the object passed in is an array. If it is, it is returned, otherwise, this function * converts the target object into an array. From 445bc41dcfab7618d812af0477e750ff5d9f8ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B3mez?= Date: Mon, 25 Jul 2016 23:49:51 -0300 Subject: [PATCH 4/8] Minimal change --- src/metadata/MetadataProvider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/metadata/MetadataProvider.js b/src/metadata/MetadataProvider.js index aea9e0f..98442de 100644 --- a/src/metadata/MetadataProvider.js +++ b/src/metadata/MetadataProvider.js @@ -60,8 +60,8 @@ export default class MetadataProvider { if(dataArray[keys[id]]) { dataArray[keys[id]].forEach(elem => { elem.fields = MetadataProvider.canonizeArray(elem.fields); - if(++id < keys.length) - this._canonizeArrays(elem, keys, id); + if(id + 1 < keys.length) + this._canonizeArrays(elem, keys, id + 1); }) } From c5fa60e9aa20fe6f5123e6db2724f324b33d743a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B3mez?= Date: Tue, 26 Jul 2016 00:47:57 -0300 Subject: [PATCH 5/8] Fix test case Non-existing layout that was failing after refactor --- src/metadata/MetadataProvider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/metadata/MetadataProvider.js b/src/metadata/MetadataProvider.js index 98442de..bf65c16 100644 --- a/src/metadata/MetadataProvider.js +++ b/src/metadata/MetadataProvider.js @@ -135,7 +135,7 @@ export default class MetadataProvider { let layout; if(layoutName) - layout = entity.layouts.find(l => l.name === layoutName); + layout = entity.layouts? entity.layouts.find(l => l.name === layoutName) : layout; else { if(entity.layouts.length != 1) throw Error('When the layoutName is not specified, there must be one and only one layout'); From ffff15c3d61d3d54c04b753b3add6152b343db86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B3mez?= Date: Tue, 26 Jul 2016 01:29:16 -0300 Subject: [PATCH 6/8] Fix test cas --- src/metadata/evaluator/filter/arrayMetadataFilter.js | 2 +- src/metadata/evaluator/filter/defaultMetadataFilter.js | 2 +- src/metadata/evaluator/filter/entityMetadataFilter.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/metadata/evaluator/filter/arrayMetadataFilter.js b/src/metadata/evaluator/filter/arrayMetadataFilter.js index fd261b8..ddfb771 100644 --- a/src/metadata/evaluator/filter/arrayMetadataFilter.js +++ b/src/metadata/evaluator/filter/arrayMetadataFilter.js @@ -22,7 +22,7 @@ export default { // returns the reduxProps for a particular array item let getReduxPropsForItem = (index) => { if(!reduxProps) return undefined; - if(!reduxProps.hasOwnProperty(propertyMetadata.name)) throw Error('reduxProps is defined but it does not have the required property metadata'); + if(reduxProps && !reduxProps.hasOwnProperty(propertyMetadata.name)) throw Error('reduxProps is defined but it does not have the required property metadata'); return reduxProps[propertyMetadata.name][index]; }; diff --git a/src/metadata/evaluator/filter/defaultMetadataFilter.js b/src/metadata/evaluator/filter/defaultMetadataFilter.js index c04bbfa..167ce2e 100644 --- a/src/metadata/evaluator/filter/defaultMetadataFilter.js +++ b/src/metadata/evaluator/filter/defaultMetadataFilter.js @@ -7,7 +7,7 @@ export default { propertyMetadata.key = keyPrefix; // set redux properties - if(reduxProps.hasOwnProperty(propertyMetadata.name)) { + if(reduxProps && reduxProps.hasOwnProperty(propertyMetadata.name)) { propertyMetadata.reduxFormProps = reduxProps[propertyMetadata.name]; } diff --git a/src/metadata/evaluator/filter/entityMetadataFilter.js b/src/metadata/evaluator/filter/entityMetadataFilter.js index f29aa3a..33fa558 100644 --- a/src/metadata/evaluator/filter/entityMetadataFilter.js +++ b/src/metadata/evaluator/filter/entityMetadataFilter.js @@ -11,7 +11,7 @@ export default { throw Error('when metadata is of type entity, it must have a fields property'); } - if(!model.hasOwnProperty(propertyMetadata.name) || model[propertyMetadata.name] === null || model[propertyMetadata.name] === undefined) { + if(model && !model.hasOwnProperty(propertyMetadata.name) || model[propertyMetadata.name] === null || model[propertyMetadata.name] === undefined) { // if the property does not exist, create it model[propertyMetadata.name] = {}; } else { From f105134a3eaf35f9b9a8c3d78bd0d2c07402eac4 Mon Sep 17 00:00:00 2001 From: jonisaa Date: Tue, 26 Jul 2016 09:04:08 -0300 Subject: [PATCH 7/8] #47 remove demo and config files for demo, update package.json, and minimal modification over UIManager --- demo/Client.js | 19 --- demo/Routes.js | 12 -- demo/Server.js | 36 ---- demo/actions/formOptions.js | 45 ----- demo/components/ButtonToolbar.js | 19 --- demo/components/CodeEditor.js | 20 --- demo/components/DevTools.js | 14 -- demo/components/FormOptions.js | 47 ------ demo/components/Layout.js | 19 --- demo/components/LiveSchemaEditor.js | 167 ------------------- demo/components/LiveSchemaEditorForm.js | 81 --------- demo/containers/App.js | 2 - demo/containers/LiveSchemaEditorContainer.js | 20 --- demo/less/LiveSchemaEditor.less | 49 ------ demo/less/styles.less | 7 - demo/lib/reduxStoreObserver.js | 27 --- demo/pages/BasePage.html | 14 -- demo/pages/Demo.js | 16 -- demo/pages/Root.js | 16 -- demo/presets.js | 120 ------------- demo/presets/ComponentsCheckbox.txt | 20 --- demo/presets/componentsArrrayContainer.txt | 49 ------ demo/presets/componentsDateTimePicker.txt | 52 ------ demo/presets/componentsFieldGroup.txt | 57 ------- demo/presets/componentsLookup.txt | 42 ----- demo/presets/componentsRadio.txt | 41 ----- demo/presets/componentsSelect.txt | 64 ------- demo/presets/componentsTextArea.txt | 57 ------- demo/presets/componentsTextBox.txt | 44 ----- demo/presets/componentsTextBoxFloat.txt | 15 -- demo/presets/componentsTextBoxInt.txt | 15 -- demo/presets/componentsToggle.txt | 22 --- demo/presets/default.txt | 148 ---------------- demo/presets/layouts.txt | 55 ------ demo/presets/schemaTypesSimple.txt | 10 -- demo/reducers/formOptions.js | 50 ------ demo/reducers/index.js | 12 -- demo/store/configureStore.development.js | 44 ----- demo/store/configureStore.js | 2 - package.json | 3 - src/UIManager.js | 2 +- tools/build-demo.js | 48 ------ webpack.config.demo.dev.js | 4 - webpack.config.demo.prod.js | 4 - webpack/webpack.config.demo.dev.js | 52 ------ webpack/webpack.config.demo.prod.js | 46 ----- 46 files changed, 1 insertion(+), 1707 deletions(-) delete mode 100644 demo/Client.js delete mode 100644 demo/Routes.js delete mode 100644 demo/Server.js delete mode 100644 demo/actions/formOptions.js delete mode 100644 demo/components/ButtonToolbar.js delete mode 100644 demo/components/CodeEditor.js delete mode 100644 demo/components/DevTools.js delete mode 100644 demo/components/FormOptions.js delete mode 100644 demo/components/Layout.js delete mode 100644 demo/components/LiveSchemaEditor.js delete mode 100644 demo/components/LiveSchemaEditorForm.js delete mode 100644 demo/containers/App.js delete mode 100644 demo/containers/LiveSchemaEditorContainer.js delete mode 100644 demo/less/LiveSchemaEditor.less delete mode 100644 demo/less/styles.less delete mode 100644 demo/lib/reduxStoreObserver.js delete mode 100644 demo/pages/BasePage.html delete mode 100644 demo/pages/Demo.js delete mode 100644 demo/pages/Root.js delete mode 100644 demo/presets.js delete mode 100644 demo/presets/ComponentsCheckbox.txt delete mode 100644 demo/presets/componentsArrrayContainer.txt delete mode 100644 demo/presets/componentsDateTimePicker.txt delete mode 100644 demo/presets/componentsFieldGroup.txt delete mode 100644 demo/presets/componentsLookup.txt delete mode 100644 demo/presets/componentsRadio.txt delete mode 100644 demo/presets/componentsSelect.txt delete mode 100644 demo/presets/componentsTextArea.txt delete mode 100644 demo/presets/componentsTextBox.txt delete mode 100644 demo/presets/componentsTextBoxFloat.txt delete mode 100644 demo/presets/componentsTextBoxInt.txt delete mode 100644 demo/presets/componentsToggle.txt delete mode 100644 demo/presets/default.txt delete mode 100644 demo/presets/layouts.txt delete mode 100644 demo/presets/schemaTypesSimple.txt delete mode 100644 demo/reducers/formOptions.js delete mode 100644 demo/reducers/index.js delete mode 100644 demo/store/configureStore.development.js delete mode 100644 demo/store/configureStore.js delete mode 100644 tools/build-demo.js delete mode 100644 webpack.config.demo.dev.js delete mode 100644 webpack.config.demo.prod.js delete mode 100644 webpack/webpack.config.demo.dev.js delete mode 100644 webpack/webpack.config.demo.prod.js diff --git a/demo/Client.js b/demo/Client.js deleted file mode 100644 index 624d553..0000000 --- a/demo/Client.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import {Router} from 'react-router' -import routes from './Routes'; -import configureStore from './store/configureStore'; -import {Provider} from 'react-redux'; -import {syncHistoryWithStore} from 'react-router-redux'; -import {browserHistory} from 'react-router' -import {render} from 'react-dom'; -import './less/styles.less'; - -const store = configureStore(); -const history = syncHistoryWithStore(browserHistory, store); - -render( - - - , - document.getElementById('#app_container') -); \ No newline at end of file diff --git a/demo/Routes.js b/demo/Routes.js deleted file mode 100644 index b8260bb..0000000 --- a/demo/Routes.js +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; -import App from './containers/App'; -import Demo from './pages/Demo.js'; - -import { Route, Redirect } from 'react-router'; - -export default ( - - - - -); diff --git a/demo/Server.js b/demo/Server.js deleted file mode 100644 index 34f4c90..0000000 --- a/demo/Server.js +++ /dev/null @@ -1,36 +0,0 @@ -import fs from 'fs'; -import React from 'react'; -import express from 'express'; -import path from 'path'; -import webpackConfig from '../webpack/webpack.config.demo.dev'; -import colors from 'colors'; -import webpackMiddleware from 'webpack-dev-middleware'; -import webpackHotMiddleware from 'webpack-hot-middleware'; -import webpack from 'webpack'; - -const webpackCompiler = webpack(webpackConfig); - -require.extensions['.html'] = function (module, filename) { - module.exports = fs.readFileSync(filename, 'utf8'); -}; - -const development = process.env.NODE_ENV !== 'production'; -let app = express(); - -if (development) { - app.use(webpackMiddleware(webpackCompiler)); - app.use(webpackHotMiddleware(webpackCompiler)); - app.use(function renderApp(req, res) { - let wrap = require('./pages/BasePage.html') - .replace(/\$\{cssBundlePath\}/g, '') - .replace(/\$\{jsBundlePath\}/g, '/bundle.js'); - - res.status(200).send(wrap); - }); -} else { - app.use(express.static(path.join(__dirname, '../demo-built'))); -} - -app.listen(4000, '0.0.0.0', function () { - console.log(colors.green(`React-metaform started at http://localhost:4000/. NODE_ENV: ${process.env.NODE_ENV}`)); -}); diff --git a/demo/actions/formOptions.js b/demo/actions/formOptions.js deleted file mode 100644 index 2c77f74..0000000 --- a/demo/actions/formOptions.js +++ /dev/null @@ -1,45 +0,0 @@ -const UPDATE_FORM = 'UPDATE_FORM'; -const SET_STACKED_FIELD_LAYOUT = 'SET_STACKED_FIELD_LAYOUT'; -const SET_INLINE_FIELD_LAYOUT = 'SET_INLINE_FIELD_LAYOUT'; -const SET_EDIT_COMPONENT_FACTORY = 'SET_EDIT_COMPONENT_FACTORY'; -const SET_DETAILS_COMPONENT_FACTORY = 'SET_DETAILS_COMPONENT_FACTORY'; - -/** - * Updates the form - */ -export const updateForm = (schema) => ({ - type: UPDATE_FORM, - schema: schema -}); - -/** - * Sets the field layout as stacked - * @returns {{type: string}} - */ -export const setStackedFieldLayout = () => ({ - type: SET_STACKED_FIELD_LAYOUT -}); - -/** - * Sets the field layout as inline - * @returns {{type: string}} - */ -export const setInlineFieldLayout = () => ({ - type: SET_INLINE_FIELD_LAYOUT -}); - -export const setEditComponentFactory = () => ({ - type: SET_EDIT_COMPONENT_FACTORY -}); - -export const setDetailsComponentFactory = () => ({ - type: SET_DETAILS_COMPONENT_FACTORY -}); - -export default { - UPDATE_FORM, - SET_STACKED_FIELD_LAYOUT, - SET_INLINE_FIELD_LAYOUT, - SET_EDIT_COMPONENT_FACTORY, - SET_DETAILS_COMPONENT_FACTORY -} \ No newline at end of file diff --git a/demo/components/ButtonToolbar.js b/demo/components/ButtonToolbar.js deleted file mode 100644 index 5b32619..0000000 --- a/demo/components/ButtonToolbar.js +++ /dev/null @@ -1,19 +0,0 @@ -import React, { Component } from 'react'; -import { ButtonToolbar, Button }from 'react-bootstrap' - -class Layout extends Component { - render() { - - let { submitting } = this.props; - - return ( - - - - ); - } -} - -export default Layout; \ No newline at end of file diff --git a/demo/components/CodeEditor.js b/demo/components/CodeEditor.js deleted file mode 100644 index 811ec82..0000000 --- a/demo/components/CodeEditor.js +++ /dev/null @@ -1,20 +0,0 @@ -import React, { Component } from 'react'; -import AceEditor from 'react-ace'; - -import 'brace/mode/jsx'; -import 'brace/theme/github.js'; - -class CodeEditor extends Component { - render() { - let { value, name, readOnly, onChange, mode, width, height } = this.props; - mode = mode || 'jsx'; - width = width || '100%'; - - // metadata - let props = { value, name, ref: 'input', readOnly, onChange, mode, width, theme: 'github', height, fontSize: 14, editorProps: {$blockScrolling: true} }; - - return ; - } -} - -export default CodeEditor; \ No newline at end of file diff --git a/demo/components/DevTools.js b/demo/components/DevTools.js deleted file mode 100644 index a47ba28..0000000 --- a/demo/components/DevTools.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { createDevTools } from 'redux-devtools'; -import LogMonitor from 'redux-devtools-log-monitor'; -import DockMonitor from 'redux-devtools-dock-monitor'; - -export default createDevTools( - - - -); diff --git a/demo/components/FormOptions.js b/demo/components/FormOptions.js deleted file mode 100644 index 643553f..0000000 --- a/demo/components/FormOptions.js +++ /dev/null @@ -1,47 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { ButtonGroup, Button, ButtonToolbar } from 'react-bootstrap' - -class FormOptions extends Component { - static propTypes = { - fieldLayout: PropTypes.string.isRequired, - setStackedFieldLayout: PropTypes.func.isRequired, - setInlineFieldLayout: PropTypes.func.isRequired - }; - - render() { - let { fieldLayout, componentFactory, setStackedFieldLayout, setInlineFieldLayout, setEditComponentFactory, setDetailsComponentFactory, updateForm, editorSchema, schema} = this.props; - - return ( - - -