From 7ec76de68ec0f9349fcca2d253c449c2df4c4b0b Mon Sep 17 00:00:00 2001 From: Bharat Chauhan Date: Sat, 28 Aug 2021 21:13:45 +0530 Subject: [PATCH] Bump version to 1.0.0 and update dist files --- dist/react-json-form.js | 929 ++++++++++++++++++++++++++++++++ dist/react-json-form.js.map | 1 + dist/react-json-form.min.js | 2 + dist/react-json-form.min.js.map | 1 + package.json | 4 +- 5 files changed, 935 insertions(+), 2 deletions(-) create mode 100644 dist/react-json-form.js create mode 100644 dist/react-json-form.js.map create mode 100644 dist/react-json-form.min.js create mode 100644 dist/react-json-form.min.js.map diff --git a/dist/react-json-form.js b/dist/react-json-form.js new file mode 100644 index 0000000..a500a6a --- /dev/null +++ b/dist/react-json-form.js @@ -0,0 +1,929 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.reactJsonForm = factory()); +}(this, (function () { + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + + _setPrototypeOf(subClass, superClass); + } + + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); + } + + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + + function getBlankObject(schema) { + var keys = {}; + + for (var key in schema.keys) { + var value = schema.keys[key]; + var type = value.type; + if (type === 'array') keys[key] = getBlankArray(value);else if (type === 'object') keys[key] = getBlankObject(value);else if (type === 'string') keys[key] = '';else if (schema.type === 'number') return ''; + } + + return keys; + } + function getBlankArray(schema) { + var items = []; + var type = schema.items.type; + if (type === 'array') items.push(getBlankArray(schema.items));else if (type === 'object') items.push(getBlankObject(schema.items));else if (type === 'string') items.push('');else if (schema.type === 'number') items.push(''); + return items; + } + function getBlankData(schema) { + if (schema.type === 'array') { + return getBlankArray(schema); + } else if (schema.type === 'object') { + return getBlankObject(schema); + } else if (schema.type === 'string') { + return ''; + } else if (schema.type === 'number') { + return ''; + } + } + + function getSyncedArray(data, schema) { + var newData = JSON.parse(JSON.stringify(data)); + + for (var i = 0; i < data.length; i++) { + var item = data[i]; + + if (schema.items.type === 'array') { + newData[i] = getSyncedArray(item, schema.items); + } else if (schema.items.type === 'object') { + newData[i] = getSyncedObject(item, schema.items); + } + } + + return newData; + } + + function getSyncedObject(data, schema) { + var newData = JSON.parse(JSON.stringify(data)); + var keys = [].concat(Object.keys(schema.keys)); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var schemaValue = schema.keys[key]; + + if (!data.hasOwnProperty(key)) { + if (schemaValue.type === 'string') newData[key] = '';else if (schemaValue.type === 'array') newData[key] = getSyncedArray([], schemaValue);else if (schemaValue.type === 'object') newData[key] = getSyncedObject({}, schemaValue); + } else { + if (schemaValue.type === 'string') newData[key] = data[key];else if (schemaValue.type === 'array') newData[key] = getSyncedArray(data[key], schemaValue);else if (schemaValue.type === 'object') newData[key] = getSyncedObject(data[key], schemaValue); + } + } + + return newData; + } + + function getSyncedData(data, schema) { + // adds those keys to data which are in schema but not in data + if (schema.type === 'array') { + return getSyncedArray(data, schema); + } else if (schema.type === 'object') { + return getSyncedObject(data, schema); + } + + return data; + } + + var _excluded$1 = ["className"]; + function Button(_ref) { + var className = _ref.className, + props = _objectWithoutPropertiesLoose(_ref, _excluded$1); + + if (!className) className = ''; + className = 'rjf-' + className + '-button'; + return h("button", _extends({ + className: className, + type: "button" + }, props), props.children); + } + + function Loader(props) { + return h("div", { + className: "rjf-loader" + }); + } + + var EditorContext = React.createContext(); + function capitalize(string) { + if (!string) return ''; + return string.charAt(0).toUpperCase() + string.substr(1).toLowerCase(); + } + function getVerboseName(name) { + if (name === undefined || name === null) return ''; + name = name.replace(/_/g, ' '); + return capitalize(name); + } + function getCsrfCookie() { + if (document.cookie.split(';').filter(function (item) { + return item.trim().indexOf('csrftoken=') === 0; + }).length) { + return document.cookie.split(';').filter(function (item) { + return item.trim().indexOf('csrftoken=') === 0; + })[0].split('=')[1]; + } + + return null; + } + + var _excluded = ["label", "help_text", "error", "inputRef"], + _excluded2 = ["label", "help_text", "error", "value"], + _excluded3 = ["label", "help_text", "error", "value", "options"], + _excluded4 = ["label", "help_text", "error", "value", "options"], + _excluded5 = ["label", "value"]; + function FormInput(_ref) { + var label = _ref.label, + inputRef = _ref.inputRef, + props = _objectWithoutPropertiesLoose(_ref, _excluded); + + if (props.type === 'string') props.type = 'text'; + if (inputRef) props.ref = inputRef; + return h("div", null, label && h("label", null, label), h("input", props)); + } + function FormCheckInput(_ref2) { + var label = _ref2.label, + value = _ref2.value, + props = _objectWithoutPropertiesLoose(_ref2, _excluded2); + + if (!label) label = props.name.toUpperCase(); + if (props.type === 'bool') props.type = 'checkbox'; + if (props.checked === undefined) props.checked = value; + if (props.checked === '') props.checked = false; + return h("div", null, h("label", null, h("input", props), " ", label)); + } + function FormRadioInput(_ref3) { + var label = _ref3.label, + value = _ref3.value, + options = _ref3.options, + props = _objectWithoutPropertiesLoose(_ref3, _excluded3); + + return h("div", null, h("label", null, label), options.map(function (option, i) { + var label, inputValue; + + if (typeof option === 'object') { + label = option.label; + inputValue = option.value; + } else { + label = option; + inputValue = option; + } + + return h("label", { + key: label + '_' + inputValue + '_' + i + }, h("input", _extends({}, props, { + value: inputValue, + checked: inputValue === value + })), " ", label); + })); + } + function FormSelectInput(_ref4) { + var label = _ref4.label, + options = _ref4.options, + props = _objectWithoutPropertiesLoose(_ref4, _excluded4); + + return h("div", null, label && h("label", null, label), h("select", _extends({ + defaultValue: "" + }, props), h("option", { + disabled: true, + value: "", + key: '__placehlder' + }, "Select..."), options.map(function (option, i) { + var label, inputValue; + + if (typeof option === 'object') { + label = option.label; + inputValue = option.value; + } else { + label = option; + inputValue = option; + } + + return h("option", { + value: inputValue, + key: label + '_' + inputValue + '_' + i + }, label); + }))); + } + function dataURItoBlob(dataURI) { + // Split metadata from data + var splitted = dataURI.split(","); // Split params + + var params = splitted[0].split(";"); // Get mime-type from params + + var type = params[0].replace("data:", ""); // Filter the name property from params + + var properties = params.filter(function (param) { + return param.split("=")[0] === "name"; + }); // Look for the name and use unknown if no name property. + + var name; + + if (properties.length !== 1) { + name = "unknown"; + } else { + // Because we filtered out the other property, + // we only have the name case here. + name = properties[0].split("=")[1]; + } // Built the Uint8Array Blob parameter from the base64 string. + + + var binary = atob(splitted[1]); + var array = []; + + for (var i = 0; i < binary.length; i++) { + array.push(binary.charCodeAt(i)); + } // Create the blob object + + + var blob = new window.Blob([new Uint8Array(array)], { + type: type + }); + return { + blob: blob, + name: name + }; + } + var FormFileInput = /*#__PURE__*/function (_React$Component) { + _inheritsLoose(FormFileInput, _React$Component); + + function FormFileInput(props) { + var _this; + + _this = _React$Component.call(this, props) || this; + + _this.getFileName = function () { + if (!_this.props.value) return ''; + + if (_this.props.type === 'data-url') { + return _this.extractFileInfo(_this.props.value).name; + } else if (_this.props.type === 'file-url') { + return _this.props.value; + } else { + return 'Unknown file'; + } + }; + + _this.extractFileInfo = function (dataURL) { + var _dataURItoBlob = dataURItoBlob(dataURL), + blob = _dataURItoBlob.blob, + name = _dataURItoBlob.name; + + return { + name: name, + size: blob.size, + type: blob.type + }; + }; + + _this.addNameToDataURL = function (dataURL, name) { + return dataURL.replace(';base64', ';name=' + encodeURIComponent(name) + ';base64'); + }; + + _this.handleChange = function (e) { + if (_this.props.type === 'data-url') { + var file = e.target.files[0]; + var fileName = file.name; + var reader = new FileReader(); + + reader.onload = function () { + // this.setState({src: reader.result}); + // we create a fake event object + var event = { + target: { + type: 'text', + value: _this.addNameToDataURL(reader.result, fileName), + name: _this.props.name + } + }; + + _this.props.onChange(event); + }; + + reader.readAsDataURL(file); + } else if (_this.props.type === 'file-url') { + var endpoint = _this.context.fileUploadEndpoint; + + if (!endpoint) { + console.error("Error: fileUploadEndpoint option need to be passed " + "while initializing editor for enabling file uploads."); + alert("Files can't be uploaded."); + return; + } + + _this.setState({ + loading: true + }); + + var formData = new FormData(); + formData.append('field_name', _this.context.fieldName); + formData.append('model_name', _this.context.modelName); + formData.append('coordinates', JSON.stringify(_this.props.name.split('-').slice(1))); + formData.append('file', e.target.files[0]); + fetch(endpoint, { + method: 'POST', + headers: { + 'X-CSRFToken': getCsrfCookie() + }, + body: formData + }).then(function (response) { + return response.json(); + }).then(function (result) { + // we create a fake event object + var event = { + target: { + type: 'text', + value: result.file_path, + name: _this.props.name + } + }; + + _this.props.onChange(event); + + _this.setState({ + loading: false + }); + })["catch"](function (error) { + alert('Something went wrong while uploading file'); + console.error('Error:', error); + + _this.setState({ + loading: false + }); + }); + } + }; + + _this.showFileBrowser = function () { + _this.inputRef.current.click(); + }; + + _this.state = { + value: props.value, + fileName: _this.getFileName(), + loading: false + }; + _this.inputRef = React.createRef(); + return _this; + } + + var _proto = FormFileInput.prototype; + + _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) { + if (this.props.value !== prevProps.value) { + this.setState({ + value: this.props.value, + fileName: this.getFileName() + }); + } + }; + + _proto.render = function render() { + var _value$this$props = _extends({ + value: value + }, this.props), + label = _value$this$props.label, + value = _value$this$props.value, + props = _objectWithoutPropertiesLoose(_value$this$props, _excluded5); + + props.type = 'file'; + props.onChange = this.handleChange; + return h("div", null, label && h("label", null, label), h("div", { + className: "rjf-file-field" + }, this.state.value && h("div", { + className: "rjf-current-file-name" + }, "Current file: ", h("span", null, this.state.fileName)), this.state.value && !this.state.loading && 'Change:', this.state.loading ? h("div", { + className: "rjf-file-field-loading" + }, h(Loader, null), " Uploading...") : h("div", { + className: "rjf-file-field-input" + }, h(FormInput, _extends({}, props, { + inputRef: this.inputRef + }))))); + }; + + return FormFileInput; + }(React.Component); + FormFileInput.contextType = EditorContext; + + function GroupTitle(props) { + if (!props.children) return null; + return h("div", { + className: "rjf-form-group-title" + }, props.children); + } + function FormRow(props) { + return h("div", { + className: "rjf-form-row" + }, props.onRemove && h(Button, { + className: "remove", + onClick: function onClick(e) { + return props.onRemove(name); + }, + title: "Remove" + }, "\xD7"), h("div", { + className: "rjf-form-row-inner" + }, props.children)); + } + function FormGroup(props) { + var hasChildren = React.Children.count(props.children); + var innerClassName = props.level === 0 && !hasChildren ? "" : "rjf-form-group-inner"; + return h("div", { + className: "rjf-form-group" + }, props.level === 0 && h(GroupTitle, null, props.schema.title), h("div", { + className: innerClassName + }, props.level > 0 && h(GroupTitle, null, props.schema.title), props.children, props.addable && h(Button, { + className: "add", + onClick: function onClick(e) { + return props.onAdd(); + }, + title: "Add new" + }, hasChildren ? 'Add more' : 'Add'))); + } + + function handleChange(e, valueType, callback) { + var type = e.target.type; + var value; + + if (type === 'checkbox') { + value = e.target.checked; + } else { + value = e.target.value; + } + + if (valueType === 'number') { + value = value.trim(); + if (value !== '' && !isNaN(Number(value))) value = Number(value); + } + + callback(e.target.name, value); + } + + function FormField(props) { + var inputProps = { + name: props.name, + value: props.data + }; + var type = props.schema.type; + + if (props.schema.choices) { + inputProps.options = props.schema.choices; + type = 'select'; + } + + if (props.schema.widget) type = props.schema.widget; + var InputField; + + switch (type) { + case 'string': + InputField = FormInput; + + if (props.schema.format) { + if (props.schema.format === 'data-url' || props.schema.format === 'file-url') { + InputField = FormFileInput; + } + + inputProps.type = props.schema.format; + } else { + inputProps.type = 'text'; + } + + break; + + case 'number': + inputProps.type = 'number'; + InputField = FormInput; + break; + + case 'integer': + inputProps.type = 'number'; + InputField = FormInput; + break; + + case 'boolean': + inputProps.type = 'checkbox'; + InputField = FormCheckInput; + break; + + case 'checkbox': + inputProps.type = 'checkbox'; + InputField = FormCheckInput; + break; + + case 'radio': + inputProps.type = 'radio'; + InputField = FormRadioInput; + break; + + case 'select': + InputField = FormSelectInput; + break; + + default: + inputProps.type = 'text'; + InputField = FormInput; + } + + return h(InputField, _extends({}, inputProps, { + label: props.editable ? h("span", null, props.schema.title, " ", h(Button, { + className: "edit", + onClick: props.onEdit, + title: "Edit" + }, "Edit")) : props.schema.title, + onChange: function onChange(e) { + return handleChange(e, props.schema.type, props.onChange); + } + })); + } + + function getStringFormRow(data, schema, name, onChange, onRemove, removable, onEdit, editable) { + return h(FormRow, { + key: name, + onRemove: removable ? function (e) { + return onRemove(name); + } : null + }, h(FormField, { + data: data, + schema: schema, + name: name, + onChange: onChange, + onEdit: onEdit, + editable: editable + })); + } + function getArrayFormRow(data, schema, name, onChange, _onAdd, onRemove, level) { + var rows = []; + var groups = []; + var removable = true; + var min_items = schema.min_items || 0; + if (data.length <= min_items) removable = false; + var addable = true; + var max_items = schema.max_items || 100; + if (data.length >= max_items) addable = false; + + for (var i = 0; i < data.length; i++) { + var item = data[i]; + var childName = name + '-' + i; + + if (schema.items.type === 'array') { + groups.push(getArrayFormRow(item, schema.items, childName, onChange, _onAdd, onRemove, level + 1)); + } else if (schema.items.type === 'object') { + groups.push(getObjectFormRow(item, schema.items, childName, onChange, _onAdd, onRemove, level + 1)); + } else { + rows.push(getStringFormRow(item, schema.items, childName, onChange, onRemove, removable)); + } + } + + var coords = name; // coordinates for insertion and deletion + + if (rows.length || !rows.length && !groups.length) { + rows = h(FormGroup, { + level: level, + schema: schema, + addable: addable, + onAdd: function onAdd() { + return _onAdd(getBlankData(schema.items), coords); + }, + key: 'row_group_' + name + }, rows); + } + + if (groups.length) { + var groupTitle = schema.title ? h("div", { + className: "rjf-form-group-title" + }, schema.title) : null; + groups = h("div", { + key: 'group_' + name + }, groupTitle, groups.map(function (i, index) { + return h("div", { + className: "rjf-form-group-wrapper", + key: 'group_wrapper_' + name + '_' + index + }, removable && h(Button, { + className: "remove", + onClick: function onClick(e) { + return onRemove(name + '-' + index); + }, + title: "Remove" + }, "\xD7"), i); + }), addable && h(Button, { + className: "add", + onClick: function onClick(e) { + return _onAdd(getBlankData(schema.items), coords); + }, + title: "Add new" + }, "Add item")); + } + + return [].concat(rows, groups); + } + function getObjectFormRow(data, schema, name, onChange, _onAdd2, onRemove, level) { + var rows = []; + var keys = [].concat(Object.keys(schema.keys)); + if (schema.additionalProperties) keys = [].concat(keys, Object.keys(data).filter(function (k) { + return keys.indexOf(k) === -1; + })); + + var _loop = function _loop(i) { + var key = keys[i]; + var value = data[key]; + var childName = name + '-' + key; + var schemaValue = schema.keys[key] || { + type: 'string' + }; + if (!schemaValue.title) schemaValue.title = getVerboseName(key); + var removable = false; + if (schema.keys[key] === undefined) removable = true; + + if (schemaValue.type === 'array') { + rows.push(getArrayFormRow(value, schemaValue, childName, onChange, _onAdd2, onRemove, level + 1)); + } else if (schemaValue.type === 'object') { + rows.push(getObjectFormRow(value, schemaValue, childName, onChange, _onAdd2, onRemove, level + 1)); + } else { + rows.push(getStringFormRow(value, schemaValue, childName, onChange, onRemove, removable, function () { + return handleKeyEdit(data, key, value, childName, _onAdd2, onRemove); + }, removable)); + } + }; + + for (var i = 0; i < keys.length; i++) { + _loop(i); + } + + if (rows.length || schema.additionalProperties) { + var coords = name; + rows = h(FormGroup, { + level: level, + schema: schema, + addable: schema.additionalProperties, + onAdd: function onAdd() { + return handleKeyValueAdd(data, coords, _onAdd2); + }, + key: 'row_group_' + name + }, rows); + } + + return rows; + } + + function handleKeyValueAdd(data, coords, onAdd) { + var key = prompt("Add new key"); + if (key === null) // clicked cancel + return; + key = key.trim(); + if (!key) alert("(!) Can't add empty key.\r\n\r\n‎");else if (data.hasOwnProperty(key)) alert("(!) Duplicate keys not allowed. This key already exists.\r\n\r\n‎");else onAdd("", coords + '-' + key); + } + + function handleKeyEdit(data, key, value, coords, onAdd, onRemove) { + var newKey = prompt("Rename key", key); + if (newKey === null) // clicked cancel + return; + newKey = newKey.trim(); + if (newKey === key) // same keys + return; + if (!newKey) return alert("(!) Key name can't be empty.\r\n\r\n‎");else if (data.hasOwnProperty(newKey)) return alert("(!) Duplicate keys not allowed. This key already exists.\r\n\r\n‎"); + onAdd(value, name + '-' + newKey); + onRemove(coords); + } + + var Form = /*#__PURE__*/function (_React$Component) { + _inheritsLoose(Form, _React$Component); + + function Form(props) { + var _this; + + _this = _React$Component.call(this, props) || this; + + _this.populateDataInput = function () { + _this.dataInput.value = JSON.stringify(_this.state.data); + }; + + _this.handleChange = function (coords, value) { + /* + e.target.name is a chain of indices and keys: + xxx-0-key-1-key2 and so on. + These can be used as coordinates to locate + a particular deeply nested item. + This first coordinate is not important and should be removed. + */ + coords = coords.split('-'); + coords.shift(); // remove first coord + + function setDataUsingCoords(coords, data, value) { + var coord = coords.shift(); + if (!isNaN(Number(coord))) coord = Number(coord); + + if (coords.length) { + setDataUsingCoords(coords, data[coord], value); + } else { + data[coord] = value; + } + } + + var _data = JSON.parse(JSON.stringify(_this.state.data)); + + setDataUsingCoords(coords, _data, value); + + _this.setState({ + data: _data + }); + }; + + _this.getFields = function () { + var data = _this.state.data; + var formGroups = []; + + try { + if (_this.schema.type === 'array') { + return getArrayFormRow(data, _this.schema, 'rjf', _this.handleChange, _this.addFieldset, _this.removeFieldset, 0); + } else if (_this.schema.type === 'object') { + return getObjectFormRow(data, _this.schema, 'rjf', _this.handleChange, _this.addFieldset, _this.removeFieldset, 0); + } + } catch (error) { + formGroups = h("p", { + style: { + color: '#f00' + } + }, h("strong", null, "(!) Error:"), " Schema and data do not match."); + } + + return formGroups; + }; + + _this.addFieldset = function (blankData, coords) { + coords = coords.split('-'); + coords.shift(); + + _this.setState(function (state) { + function addDataUsingCoords(coords, data, value) { + var coord = coords.shift(); + if (!isNaN(Number(coord))) coord = Number(coord); + + if (coords.length) { + addDataUsingCoords(coords, data[coord], value); + } else { + if (Array.isArray(data)) { + data.push(value); + } else { + if (Array.isArray(data[coord])) { + data[coord].push(value); + } else { + data[coord] = value; + } + } + } + } + + var _data = JSON.parse(JSON.stringify(state.data)); + + addDataUsingCoords(coords, _data, blankData); + return { + data: _data + }; + }); + }; + + _this.removeFieldset = function (coords) { + coords = coords.split('-'); + coords.shift(); + + _this.setState(function (state) { + function removeDataUsingCoords(coords, data) { + var coord = coords.shift(); + if (!isNaN(Number(coord))) coord = Number(coord); + + if (coords.length) { + removeDataUsingCoords(coords, data[coord]); + } else { + if (Array.isArray(data)) data = data.splice(coord, 1); // in-place mutation + else delete data[coord]; + } + } + + var _data = JSON.parse(JSON.stringify(state.data)); + + removeDataUsingCoords(coords, _data); + return { + data: _data + }; + }); + }; + + _this.dataInput = document.getElementById(_this.props.dataInputId); + _this.schema = props.schema; + var _data2 = props.data; + + if (!_data2) { + // create empty data from schema + _data2 = getBlankData(_this.schema); + } else { + // data might be stale if schema has new keys, so add them to data + try { + _data2 = getSyncedData(_data2, _this.schema); + } catch (error) { + console.log("Error: Schema and data don't match"); + console.log(error); + } + } + + _this.state = { + value: '', + data: _data2 + }; // update data in the input + + _this.populateDataInput(); + + return _this; + } + + var _proto = Form.prototype; + + _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) { + if (this.state.data !== prevState.data) { + this.populateDataInput(); + } + }; + + _proto.render = function render() { + return h("div", { + className: "rjf-form-wrapper" + }, h("fieldset", { + className: "module aligned" + }, h(EditorContext.Provider, { + value: { + fileUploadEndpoint: this.props.fileUploadEndpoint, + fieldName: this.props.fieldName, + modelName: this.props.modelName + } + }, this.getFields()))); + }; + + return Form; + }(React.Component); + + function JSONForm(config) { + this.containerId = config.containerId; + this.dataInputId = config.dataInputId; + this.schema = config.schema; + this.data = config.data; + this.fileUploadEndpoint = config.fileUploadEndpoint; + this.fieldName = config.fieldName; + this.modelName = config.modelName; + + this.render = function () { + ReactDOM.render(h(Form, { + schema: this.schema, + dataInputId: this.dataInputId, + data: this.data, + fileUploadEndpoint: this.fileUploadEndpoint, + fieldName: this.fieldName, + modelName: this.modelName + }), document.getElementById(this.containerId)); + }; + } + + var index = { + JSONForm: JSONForm + }; + + return index; + +}))); +//# sourceMappingURL=react-json-form.js.map diff --git a/dist/react-json-form.js.map b/dist/react-json-form.js.map new file mode 100644 index 0000000..6420b3b --- /dev/null +++ b/dist/react-json-form.js.map @@ -0,0 +1 @@ +{"version":3,"file":"react-json-form.js","sources":["../src/data.js","../src/components/buttons.js","../src/components/loaders.js","../src/util.js","../src/components/form.js","../src/components/containers.js","../src/ui.js","../src/form.js","../src/renderer.js","../src/index.js"],"sourcesContent":["export function getBlankObject(schema) {\n let keys = {};\n\n for (let key in schema.keys) {\n let value = schema.keys[key];\n let type = value.type;\n\n if (type === 'array')\n keys[key] = getBlankArray(value);\n else if (type === 'object')\n keys[key] = getBlankObject(value);\n else if (type === 'string')\n keys[key] = '';\n else if (schema.type === 'number')\n return '';\n }\n\n return keys;\n}\n\n\nexport function getBlankArray(schema) {\n let items = [];\n let type = schema.items.type;\n\n if (type === 'array')\n items.push(getBlankArray(schema.items))\n else if (type === 'object')\n items.push(getBlankObject(schema.items));\n else if (type === 'string')\n items.push('');\n else if (schema.type === 'number')\n items.push('');\n\n return items;\n}\n\n\nexport function getBlankData(schema) {\n if (schema.type === 'array') {\n return getBlankArray(schema);\n }\n else if (schema.type === 'object') {\n return getBlankObject(schema);\n } else if (schema.type === 'string') {\n return '';\n } else if (schema.type === 'number') {\n return '';\n }\n}\n\n\n\nfunction getSyncedArray(data, schema) {\n let newData = JSON.parse(JSON.stringify(data));\n\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n\n if (schema.items.type === 'array') {\n newData[i] = getSyncedArray(item, schema.items);\n } else if (schema.items.type === 'object') {\n newData[i] = getSyncedObject(item, schema.items);\n }\n }\n\n return newData;\n}\n\n\nfunction getSyncedObject(data, schema) {\n let newData = JSON.parse(JSON.stringify(data));\n\n let keys = [...Object.keys(schema.keys)];\n\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let schemaValue = schema.keys[key];\n \n if (!data.hasOwnProperty(key)) {\n if (schemaValue.type === 'string')\n newData[key] = '';\n else if (schemaValue.type === 'array')\n newData[key] = getSyncedArray([], schemaValue);\n else if (schemaValue.type === 'object')\n newData[key] = getSyncedObject({}, schemaValue);\n } else {\n if (schemaValue.type === 'string')\n newData[key] = data[key];\n else if (schemaValue.type === 'array')\n newData[key] = getSyncedArray(data[key], schemaValue);\n else if (schemaValue.type === 'object')\n newData[key] = getSyncedObject(data[key], schemaValue);\n }\n \n }\n\n return newData;\n}\n\n\nexport function getSyncedData(data, schema) {\n // adds those keys to data which are in schema but not in data\n\n if (schema.type === 'array') {\n return getSyncedArray(data, schema);\n } else if (schema.type === 'object') {\n return getSyncedObject(data, schema);\n }\n\n return data;\n}\n","export default function Button({className, ...props}) {\n if (!className)\n className = '';\n\n className = 'rjf-' + className + '-button';\n return (\n \n );\n}","export default function Loader (props) {\n return
;\n}\n","export const EditorContext = React.createContext();\n\n\nexport function capitalize(string) {\n if (!string)\n return '';\n \n return string.charAt(0).toUpperCase() + string.substr(1).toLowerCase();\n}\n\n\nexport function getVerboseName(name) {\n if (name === undefined || name === null)\n return '';\n\n name = name.replace(/_/g, ' ');\n return capitalize(name);\n}\n\n\nexport function getCsrfCookie() {\n if ((document.cookie.split(';').filter((item) => item.trim().indexOf('csrftoken=') === 0)).length) {\n return document.cookie.split(';').filter((item) => item.trim().indexOf('csrftoken=') === 0)[0].split('=')[1];\n }\n return null;\n}\n","import Button from './buttons';\nimport Loader from './loaders';\nimport {EditorContext, getCsrfCookie} from '../util';\n\n\nexport function FormInput({label, help_text, error, inputRef, ...props}) {\n\n if (props.type === 'string')\n props.type = 'text'\n\n if (inputRef)\n props.ref = inputRef;\n\n return (\n
\n {label && }\n \n
\n );\n}\n\n\nexport function FormCheckInput({label, help_text, error, value, ...props}) {\n\n if (!label)\n label = props.name.toUpperCase();\n\n if (props.type === 'bool')\n props.type = 'checkbox';\n\n if (props.checked === undefined)\n props.checked = value;\n\n if (props.checked === '')\n props.checked = false\n\n return (\n
\n \n
\n );\n}\n\n\nexport function FormRadioInput({label, help_text, error, value, options, ...props}) {\n return (\n
\n \n {options.map((option, i) => {\n let label, inputValue;\n if (typeof option === 'object') {\n label = option.label;\n inputValue = option.value;\n } else {\n label = option;\n inputValue = option;\n }\n\n return (\n \n );\n })}\n
\n );\n}\n\n\nexport function FormSelectInput({label, help_text, error, value, options, ...props}) {\n return (\n
\n {label && }\n \n
\n );\n}\n\nexport function dataURItoBlob(dataURI) {\n // Split metadata from data\n const splitted = dataURI.split(\",\");\n // Split params\n const params = splitted[0].split(\";\");\n // Get mime-type from params\n const type = params[0].replace(\"data:\", \"\");\n // Filter the name property from params\n const properties = params.filter(param => {\n return param.split(\"=\")[0] === \"name\";\n });\n // Look for the name and use unknown if no name property.\n let name;\n if (properties.length !== 1) {\n name = \"unknown\";\n } else {\n // Because we filtered out the other property,\n // we only have the name case here.\n name = properties[0].split(\"=\")[1];\n }\n\n // Built the Uint8Array Blob parameter from the base64 string.\n const binary = atob(splitted[1]);\n const array = [];\n for (let i = 0; i < binary.length; i++) {\n array.push(binary.charCodeAt(i));\n }\n // Create the blob object\n const blob = new window.Blob([new Uint8Array(array)], { type });\n\n return {blob, name};\n}\n\n\n\nexport class FormFileInput extends React.Component {\n static contextType = EditorContext;\n\n constructor(props) {\n super(props);\n\n this.state = {\n value: props.value,\n fileName: this.getFileName(),\n loading: false\n };\n\n this.inputRef = React.createRef();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.props.value !== prevProps.value) {\n this.setState({\n value: this.props.value, \n fileName: this.getFileName()\n });\n }\n }\n\n getFileName = () => {\n if (!this.props.value)\n return '';\n\n if (this.props.type === 'data-url') {\n return this.extractFileInfo(this.props.value).name;\n } else if (this.props.type === 'file-url') {\n return this.props.value;\n } else {\n return 'Unknown file';\n }\n }\n\n extractFileInfo = (dataURL) => {\n const {blob, name} = dataURItoBlob(dataURL);\n return {\n name: name,\n size: blob.size,\n type: blob.type\n }\n }\n\n addNameToDataURL = (dataURL, name) => {\n return dataURL.replace(';base64', ';name=' + encodeURIComponent(name) + ';base64');\n }\n\n handleChange = (e) => {\n if (this.props.type === 'data-url') {\n let file = e.target.files[0];\n let fileName = file.name\n\n let reader = new FileReader();\n\n reader.onload = () => {\n\n // this.setState({src: reader.result});\n\n // we create a fake event object\n let event = {\n target: {\n type: 'text',\n value: this.addNameToDataURL(reader.result, fileName),\n name: this.props.name\n }\n };\n\n this.props.onChange(event);\n\n }\n reader.readAsDataURL(file);\n } else if (this.props.type === 'file-url') {\n let endpoint = this.context.fileUploadEndpoint;\n if (!endpoint) {\n console.error(\n \"Error: fileUploadEndpoint option need to be passed \"\n + \"while initializing editor for enabling file uploads.\");\n alert(\"Files can't be uploaded.\");\n return;\n }\n\n this.setState({loading: true});\n\n let formData = new FormData();\n formData.append('field_name', this.context.fieldName);\n formData.append('model_name', this.context.modelName);\n formData.append('coordinates', JSON.stringify(this.props.name.split('-').slice(1)));\n formData.append('file', e.target.files[0]);\n\n fetch(endpoint, {\n method: 'POST',\n headers: {\n 'X-CSRFToken': getCsrfCookie(),\n },\n body: formData\n })\n .then((response) => response.json())\n .then((result) => {\n // we create a fake event object\n let event = {\n target: {\n type: 'text',\n value: result.file_path,\n name: this.props.name\n }\n };\n\n this.props.onChange(event);\n this.setState({loading: false});\n })\n .catch((error) => {\n alert('Something went wrong while uploading file');\n console.error('Error:', error);\n this.setState({loading: false});\n });\n\n }\n\n }\n\n showFileBrowser = () => {\n this.inputRef.current.click();\n }\n\n render() {\n let {label, value, ...props} = {value, ...this.props};\n props.type = 'file';\n props.onChange = this.handleChange;\n\n return (\n
\n {label && }\n
\n {this.state.value && \n
Current file: {this.state.fileName}
\n }\n {this.state.value && !this.state.loading && 'Change:'}\n {this.state.loading ?\n
Uploading...
\n : \n
\n \n
\n }\n
\n
\n );\n }\n}\n","import Button from './buttons';\n\n\nexport function GroupTitle(props) {\n if (!props.children)\n return null;\n\n return (\n
{props.children}
\n );\n}\n\n\nexport function FormRow(props) {\n return (\n
\n {props.onRemove &&\n \n }\n
\n {props.children}\n
\n
\n );\n}\n\n\nexport function FormGroup(props) {\n let hasChildren = React.Children.count(props.children);\n\n let innerClassName = props.level === 0 && !hasChildren\n ? \"\" \n : \"rjf-form-group-inner\";\n\n return (\n
\n {props.level === 0 && {props.schema.title}}\n
\n {props.level > 0 && {props.schema.title}}\n {props.children}\n {props.addable && \n props.onAdd()}\n title=\"Add new\"\n >\n {hasChildren ? 'Add more' : 'Add'}\n \n }\n
\n
\n );\n}\n","import {getBlankData} from './data';\nimport {Button, FormInput, FormCheckInput, FormRadioInput, FormSelectInput,\n FormFileInput, FormRow, FormGroup} from './components';\nimport {getVerboseName} from './util';\n\n\nfunction handleChange(e, valueType, callback) {\n let type = e.target.type\n let value;\n\n if (type === 'checkbox') {\n value = e.target.checked;\n } else {\n value = e.target.value;\n }\n\n if (valueType === 'number') {\n value = value.trim();\n if (value !== '' && !isNaN(Number(value)))\n value = Number(value);\n }\n\n callback(e.target.name, value);\n}\n\n\nfunction FormField(props) {\n let inputProps = {\n name: props.name,\n value: props.data,\n };\n\n let type = props.schema.type;\n if (props.schema.choices) {\n inputProps.options = props.schema.choices;\n type = 'select';\n }\n if (props.schema.widget)\n type = props.schema.widget;\n\n let InputField;\n\n switch (type) {\n case 'string':\n InputField = FormInput;\n\n if (props.schema.format) {\n if (props.schema.format === 'data-url' || props.schema.format === 'file-url') {\n InputField = FormFileInput;\n }\n inputProps.type = props.schema.format;\n }\n else {\n inputProps.type = 'text';\n }\n break;\n case 'number':\n inputProps.type = 'number';\n InputField = FormInput;\n break;\n case 'integer':\n inputProps.type = 'number';\n InputField = FormInput;\n break;\n case 'boolean':\n inputProps.type = 'checkbox';\n InputField = FormCheckInput;\n break;\n case 'checkbox':\n inputProps.type = 'checkbox';\n InputField = FormCheckInput;\n break;\n case 'radio':\n inputProps.type = 'radio';\n InputField = FormRadioInput;\n break;\n case 'select':\n InputField = FormSelectInput;\n break;\n default:\n inputProps.type = 'text';\n InputField = FormInput;\n }\n\n return (\n {props.schema.title} \n :\n props.schema.title\n }\n onChange={(e) => handleChange(e, props.schema.type, props.onChange)}\n />\n );\n}\n\n\nexport function getStringFormRow(data, schema, name, onChange, onRemove, removable, onEdit, editable) {\n\n return (\n onRemove(name) : null}\n >\n \n \n );\n}\n\nexport function getArrayFormRow(data, schema, name, onChange, onAdd, onRemove, level) {\n let rows = [];\n let groups = [];\n\n let removable = true;\n let min_items = schema.min_items || 0;\n if (data.length <= min_items)\n removable = false;\n\n let addable = true;\n let max_items = schema.max_items || 100;\n if (data.length >= max_items)\n addable = false;\n\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let childName = name + '-' + i;\n\n if (schema.items.type === 'array') {\n groups.push(getArrayFormRow(item, schema.items, childName, onChange, onAdd, onRemove, level + 1));\n } else if (schema.items.type === 'object') {\n groups.push(getObjectFormRow(item, schema.items, childName, onChange, onAdd, onRemove, level + 1));\n } else {\n rows.push(getStringFormRow(item, schema.items, childName, onChange, onRemove, removable));\n } \n }\n\n let coords = name; // coordinates for insertion and deletion\n\n if (rows.length || (!rows.length && !groups.length)) {\n rows = (\n onAdd(getBlankData(schema.items), coords)}\n key={'row_group_' + name}\n >\n {rows}\n \n );\n }\n\n if (groups.length) {\n let groupTitle = schema.title ?
{schema.title}
: null;\n\n groups = (\n
\n {groupTitle}\n {groups.map((i, index) => (\n
\n {removable && \n onRemove(name + '-' + index)}\n title=\"Remove\"\n >\n ×\n \n }\n {i}\n
\n )\n )}\n {addable && \n onAdd(getBlankData(schema.items), coords)}\n title=\"Add new\"\n >\n Add item\n \n }\n
\n )\n }\n\n return [...rows, ...groups];\n}\n\n\nexport function getObjectFormRow(data, schema, name, onChange, onAdd, onRemove, level) {\n let rows = [];\n\n let keys = [...Object.keys(schema.keys)];\n\n if (schema.additionalProperties)\n keys = [...keys, ...Object.keys(data).filter((k) => keys.indexOf(k) === -1)];\n\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let value = data[key];\n let childName = name + '-' + key;\n let schemaValue = schema.keys[key] || {type: 'string'};\n\n if (!schemaValue.title)\n schemaValue.title = getVerboseName(key);\n\n let removable = false;\n if (schema.keys[key] === undefined)\n removable = true;\n\n if (schemaValue.type === 'array') {\n rows.push(getArrayFormRow(value, schemaValue, childName, onChange, onAdd, onRemove, level + 1));\n } else if (schemaValue.type === 'object') {\n rows.push(getObjectFormRow(value, schemaValue, childName, onChange, onAdd, onRemove, level + 1));\n } else {\n rows.push(getStringFormRow(\n value, schemaValue, childName, onChange, onRemove, removable, \n () => handleKeyEdit(data, key, value, childName, onAdd, onRemove),\n removable\n ));\n }\n }\n\n if (rows.length || schema.additionalProperties) {\n let className = \"rjf-form-group-inner\";\n if (level === 0 && !rows.length)\n className = \"\";\n \n let coords = name;\n\n rows = (\n handleKeyValueAdd(data, coords, onAdd)}\n key={'row_group_' + name}\n >\n {rows}\n \n );\n }\n\n return rows;\n}\n\n\nfunction handleKeyValueAdd(data, coords, onAdd) {\n let key = prompt(\"Add new key\");\n if (key === null) // clicked cancel\n return;\n\n key = key.trim();\n if (!key)\n alert(\"(!) Can't add empty key.\\r\\n\\r\\n‎\");\n else if (data.hasOwnProperty(key))\n alert(\"(!) Duplicate keys not allowed. This key already exists.\\r\\n\\r\\n‎\");\n else\n onAdd(\"\", coords + '-' + key); \n}\n\n\nfunction handleKeyEdit(data, key, value, coords, onAdd, onRemove) {\n let newKey = prompt(\"Rename key\", key);\n if (newKey === null) // clicked cancel\n return;\n\n newKey = newKey.trim();\n\n if (newKey === key) // same keys\n return;\n\n if (!newKey)\n return alert(\"(!) Key name can't be empty.\\r\\n\\r\\n‎\");\n else if (data.hasOwnProperty(newKey))\n return alert(\"(!) Duplicate keys not allowed. This key already exists.\\r\\n\\r\\n‎\");\n\n onAdd(value, name + '-' + newKey);\n onRemove(coords);\n}\n","import {getBlankData, getSyncedData} from './data';\nimport {getArrayFormRow, getObjectFormRow} from './ui';\nimport {EditorContext} from './util';\n\n\nexport default class Form extends React.Component {\n constructor(props) {\n super(props);\n\n this.dataInput = document.getElementById(this.props.dataInputId);\n this.schema = props.schema;\n\n let data = props.data;\n\n if (!data) {\n // create empty data from schema\n data = getBlankData(this.schema);\n } else {\n // data might be stale if schema has new keys, so add them to data\n try {\n data = getSyncedData(data, this.schema);\n } catch (error) {\n console.log(\"Error: Schema and data don't match\");\n console.log(error);\n }\n }\n\n this.state = {\n value: '',\n data: data\n };\n \n // update data in the input\n this.populateDataInput();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.state.data !== prevState.data) {\n this.populateDataInput();\n }\n }\n\n populateDataInput = () => {\n this.dataInput.value = JSON.stringify(this.state.data);\n }\n\n handleChange = (coords, value) => {\n /*\n e.target.name is a chain of indices and keys:\n xxx-0-key-1-key2 and so on.\n These can be used as coordinates to locate \n a particular deeply nested item.\n\n This first coordinate is not important and should be removed.\n */\n coords = coords.split('-');\n\n coords.shift(); // remove first coord\n\n function setDataUsingCoords(coords, data, value) {\n let coord = coords.shift();\n if (!isNaN(Number(coord)))\n coord = Number(coord);\n\n if (coords.length) {\n setDataUsingCoords(coords, data[coord], value);\n } else {\n data[coord] = value;\n }\n }\n\n let _data = JSON.parse(JSON.stringify(this.state.data));\n\n setDataUsingCoords(coords, _data, value);\n\n this.setState({data: _data});\n }\n\n getFields = () => {\n let data = this.state.data;\n let formGroups = [];\n\n try {\n if (this.schema.type === 'array') {\n return getArrayFormRow(\n data, this.schema, 'rjf',\n this.handleChange, this.addFieldset, this.removeFieldset,\n 0\n );\n } else if (this.schema.type === 'object') {\n return getObjectFormRow(\n data, this.schema, 'rjf',\n this.handleChange, this.addFieldset, this.removeFieldset,\n 0\n );\n }\n } catch (error) {\n formGroups = (\n

\n (!) Error: Schema and data do not match.\n

\n );\n }\n\n return formGroups;\n }\n\n addFieldset = (blankData, coords) => {\n coords = coords.split('-');\n coords.shift();\n\n this.setState((state) => {\n function addDataUsingCoords(coords, data, value) {\n let coord = coords.shift();\n if (!isNaN(Number(coord)))\n coord = Number(coord);\n\n if (coords.length) {\n addDataUsingCoords(coords, data[coord], value);\n } else {\n if (Array.isArray(data)) {\n data.push(value);\n }\n else {\n if (Array.isArray(data[coord])) {\n data[coord].push(value);\n } else {\n data[coord] = value;\n }\n }\n }\n }\n\n let _data = JSON.parse(JSON.stringify(state.data));\n\n addDataUsingCoords(coords, _data, blankData);\n\n return {data: _data};\n });\n }\n\n removeFieldset = (coords) => {\n coords = coords.split('-');\n coords.shift();\n\n this.setState((state) => {\n function removeDataUsingCoords(coords, data) {\n let coord = coords.shift();\n if (!isNaN(Number(coord)))\n coord = Number(coord);\n\n if (coords.length) {\n removeDataUsingCoords(coords, data[coord]);\n } else {\n if (Array.isArray(data))\n data = data.splice(coord, 1); // in-place mutation\n else\n delete data[coord];\n }\n }\n\n let _data = JSON.parse(JSON.stringify(state.data));\n\n removeDataUsingCoords(coords, _data);\n\n return {data: _data};\n });\n }\n\n render() {\n return (\n
\n
\n \n {this.getFields()}\n \n
\n
\n );\n }\n}\n","import Form from './form';\n\n\nexport default function JSONForm(config) {\n this.containerId = config.containerId;\n this.dataInputId = config.dataInputId;\n this.schema = config.schema;\n this.data = config.data;\n this.fileUploadEndpoint = config.fileUploadEndpoint;\n this.fieldName = config.fieldName;\n this.modelName = config.modelName;\n\n this.render = function() {\n ReactDOM.render(\n ,\n document.getElementById(this.containerId)\n );\n }\n}","import JSONForm from './renderer';\n\n\nexport default {\n JSONForm,\n};"],"names":["getBlankObject","schema","keys","key","value","type","getBlankArray","items","push","getBlankData","getSyncedArray","data","newData","JSON","parse","stringify","i","length","item","getSyncedObject","Object","schemaValue","hasOwnProperty","getSyncedData","Button","className","props","children","Loader","EditorContext","React","createContext","capitalize","string","charAt","toUpperCase","substr","toLowerCase","getVerboseName","name","undefined","replace","getCsrfCookie","document","cookie","split","filter","trim","indexOf","FormInput","label","inputRef","ref","FormCheckInput","checked","FormRadioInput","options","map","option","inputValue","FormSelectInput","dataURItoBlob","dataURI","splitted","params","properties","param","binary","atob","array","charCodeAt","blob","window","Blob","Uint8Array","FormFileInput","getFileName","extractFileInfo","dataURL","size","addNameToDataURL","encodeURIComponent","handleChange","e","file","target","files","fileName","reader","FileReader","onload","event","result","onChange","readAsDataURL","endpoint","context","fileUploadEndpoint","console","error","alert","setState","loading","formData","FormData","append","fieldName","modelName","slice","fetch","method","headers","body","then","response","json","file_path","showFileBrowser","current","click","state","createRef","componentDidUpdate","prevProps","prevState","render","Component","contextType","GroupTitle","FormRow","onRemove","FormGroup","hasChildren","Children","count","innerClassName","level","title","addable","onAdd","valueType","callback","isNaN","Number","FormField","inputProps","choices","widget","InputField","format","editable","onEdit","getStringFormRow","removable","getArrayFormRow","rows","groups","min_items","max_items","childName","getObjectFormRow","coords","groupTitle","index","additionalProperties","k","handleKeyEdit","handleKeyValueAdd","prompt","newKey","Form","populateDataInput","dataInput","shift","setDataUsingCoords","coord","_data","getFields","formGroups","addFieldset","removeFieldset","color","blankData","addDataUsingCoords","Array","isArray","removeDataUsingCoords","splice","getElementById","dataInputId","log","JSONForm","config","containerId","ReactDOM"],"mappings":"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"} \ No newline at end of file diff --git a/dist/react-json-form.min.js b/dist/react-json-form.min.js new file mode 100644 index 0000000..847285c --- /dev/null +++ b/dist/react-json-form.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e||self).reactJsonForm=t()}(this,function(){function e(){return(e=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}function r(e){var t={};for(var a in e.keys){var n=e.keys[a],l=n.type;if("array"===l)t[a]=i(n);else if("object"===l)t[a]=r(n);else if("string"===l)t[a]="";else if("number"===e.type)return""}return t}function i(e){var t=[],a=e.items.type;return"array"===a?t.push(i(e.items)):"object"===a?t.push(r(e.items)):("string"===a||"number"===e.type)&&t.push(""),t}function l(e){return"array"===e.type?i(e):"object"===e.type?r(e):"string"===e.type||"number"===e.type?"":void 0}function o(e,t){for(var a=JSON.parse(JSON.stringify(e)),n=0;n0&&h(O,null,e.schema.title),e.children,e.addable&&h(c,{className:"add",onClick:function(t){return e.onAdd()},title:"Add new"},t?"Add more":"Add")))}function _(t){var a,n={name:t.name,value:t.data},r=t.schema.type;switch(t.schema.choices&&(n.options=t.schema.choices,r="select"),t.schema.widget&&(r=t.schema.widget),r){case"string":a=b,t.schema.format?("data-url"!==t.schema.format&&"file-url"!==t.schema.format||(a=w),n.type=t.schema.format):n.type="text";break;case"number":case"integer":n.type="number",a=b;break;case"boolean":case"checkbox":n.type="checkbox",a=N;break;case"radio":n.type="radio",a=k;break;case"select":a=j;break;default:n.type="text",a=b}return h(a,e({},n,{label:t.editable?h("span",null,t.schema.title," ",h(c,{className:"edit",onClick:t.onEdit,title:"Edit"},"Edit")):t.schema.title,onChange:function(e){return function(e,t,a){var n;n="checkbox"===e.target.type?e.target.checked:e.target.value,"number"===t&&(""===(n=n.trim())||isNaN(Number(n))||(n=Number(n))),a(e.target.name,n)}(e,t.schema.type,t.onChange)}}))}function S(e,t,a,n,r,i,l,o){return h(x,{key:a,onRemove:i?function(e){return r(a)}:null},h(_,{data:e,schema:t,name:a,onChange:n,onEdit:l,editable:o}))}function R(e,t,a,n,r,i,o){var s=[],u=[],p=!0;e.length<=(t.min_items||0)&&(p=!1);var d=!0;e.length>=(t.max_items||100)&&(d=!1);for(var f=0;f\n {props.children}\n \n );\n}","export default function Loader (props) {\n return
;\n}\n","export const EditorContext = React.createContext();\n\n\nexport function capitalize(string) {\n if (!string)\n return '';\n \n return string.charAt(0).toUpperCase() + string.substr(1).toLowerCase();\n}\n\n\nexport function getVerboseName(name) {\n if (name === undefined || name === null)\n return '';\n\n name = name.replace(/_/g, ' ');\n return capitalize(name);\n}\n\n\nexport function getCsrfCookie() {\n if ((document.cookie.split(';').filter((item) => item.trim().indexOf('csrftoken=') === 0)).length) {\n return document.cookie.split(';').filter((item) => item.trim().indexOf('csrftoken=') === 0)[0].split('=')[1];\n }\n return null;\n}\n","import Button from './buttons';\nimport Loader from './loaders';\nimport {EditorContext, getCsrfCookie} from '../util';\n\n\nexport function FormInput({label, help_text, error, inputRef, ...props}) {\n\n if (props.type === 'string')\n props.type = 'text'\n\n if (inputRef)\n props.ref = inputRef;\n\n return (\n
\n {label && }\n \n
\n );\n}\n\n\nexport function FormCheckInput({label, help_text, error, value, ...props}) {\n\n if (!label)\n label = props.name.toUpperCase();\n\n if (props.type === 'bool')\n props.type = 'checkbox';\n\n if (props.checked === undefined)\n props.checked = value;\n\n if (props.checked === '')\n props.checked = false\n\n return (\n
\n \n
\n );\n}\n\n\nexport function FormRadioInput({label, help_text, error, value, options, ...props}) {\n return (\n
\n \n {options.map((option, i) => {\n let label, inputValue;\n if (typeof option === 'object') {\n label = option.label;\n inputValue = option.value;\n } else {\n label = option;\n inputValue = option;\n }\n\n return (\n \n );\n })}\n
\n );\n}\n\n\nexport function FormSelectInput({label, help_text, error, value, options, ...props}) {\n return (\n
\n {label && }\n \n
\n );\n}\n\nexport function dataURItoBlob(dataURI) {\n // Split metadata from data\n const splitted = dataURI.split(\",\");\n // Split params\n const params = splitted[0].split(\";\");\n // Get mime-type from params\n const type = params[0].replace(\"data:\", \"\");\n // Filter the name property from params\n const properties = params.filter(param => {\n return param.split(\"=\")[0] === \"name\";\n });\n // Look for the name and use unknown if no name property.\n let name;\n if (properties.length !== 1) {\n name = \"unknown\";\n } else {\n // Because we filtered out the other property,\n // we only have the name case here.\n name = properties[0].split(\"=\")[1];\n }\n\n // Built the Uint8Array Blob parameter from the base64 string.\n const binary = atob(splitted[1]);\n const array = [];\n for (let i = 0; i < binary.length; i++) {\n array.push(binary.charCodeAt(i));\n }\n // Create the blob object\n const blob = new window.Blob([new Uint8Array(array)], { type });\n\n return {blob, name};\n}\n\n\n\nexport class FormFileInput extends React.Component {\n static contextType = EditorContext;\n\n constructor(props) {\n super(props);\n\n this.state = {\n value: props.value,\n fileName: this.getFileName(),\n loading: false\n };\n\n this.inputRef = React.createRef();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.props.value !== prevProps.value) {\n this.setState({\n value: this.props.value, \n fileName: this.getFileName()\n });\n }\n }\n\n getFileName = () => {\n if (!this.props.value)\n return '';\n\n if (this.props.type === 'data-url') {\n return this.extractFileInfo(this.props.value).name;\n } else if (this.props.type === 'file-url') {\n return this.props.value;\n } else {\n return 'Unknown file';\n }\n }\n\n extractFileInfo = (dataURL) => {\n const {blob, name} = dataURItoBlob(dataURL);\n return {\n name: name,\n size: blob.size,\n type: blob.type\n }\n }\n\n addNameToDataURL = (dataURL, name) => {\n return dataURL.replace(';base64', ';name=' + encodeURIComponent(name) + ';base64');\n }\n\n handleChange = (e) => {\n if (this.props.type === 'data-url') {\n let file = e.target.files[0];\n let fileName = file.name\n\n let reader = new FileReader();\n\n reader.onload = () => {\n\n // this.setState({src: reader.result});\n\n // we create a fake event object\n let event = {\n target: {\n type: 'text',\n value: this.addNameToDataURL(reader.result, fileName),\n name: this.props.name\n }\n };\n\n this.props.onChange(event);\n\n }\n reader.readAsDataURL(file);\n } else if (this.props.type === 'file-url') {\n let endpoint = this.context.fileUploadEndpoint;\n if (!endpoint) {\n console.error(\n \"Error: fileUploadEndpoint option need to be passed \"\n + \"while initializing editor for enabling file uploads.\");\n alert(\"Files can't be uploaded.\");\n return;\n }\n\n this.setState({loading: true});\n\n let formData = new FormData();\n formData.append('field_name', this.context.fieldName);\n formData.append('model_name', this.context.modelName);\n formData.append('coordinates', JSON.stringify(this.props.name.split('-').slice(1)));\n formData.append('file', e.target.files[0]);\n\n fetch(endpoint, {\n method: 'POST',\n headers: {\n 'X-CSRFToken': getCsrfCookie(),\n },\n body: formData\n })\n .then((response) => response.json())\n .then((result) => {\n // we create a fake event object\n let event = {\n target: {\n type: 'text',\n value: result.file_path,\n name: this.props.name\n }\n };\n\n this.props.onChange(event);\n this.setState({loading: false});\n })\n .catch((error) => {\n alert('Something went wrong while uploading file');\n console.error('Error:', error);\n this.setState({loading: false});\n });\n\n }\n\n }\n\n showFileBrowser = () => {\n this.inputRef.current.click();\n }\n\n render() {\n let {label, value, ...props} = {value, ...this.props};\n props.type = 'file';\n props.onChange = this.handleChange;\n\n return (\n
\n {label && }\n
\n {this.state.value && \n
Current file: {this.state.fileName}
\n }\n {this.state.value && !this.state.loading && 'Change:'}\n {this.state.loading ?\n
Uploading...
\n : \n
\n \n
\n }\n
\n
\n );\n }\n}\n","import Button from './buttons';\n\n\nexport function GroupTitle(props) {\n if (!props.children)\n return null;\n\n return (\n
{props.children}
\n );\n}\n\n\nexport function FormRow(props) {\n return (\n
\n {props.onRemove &&\n \n }\n
\n {props.children}\n
\n
\n );\n}\n\n\nexport function FormGroup(props) {\n let hasChildren = React.Children.count(props.children);\n\n let innerClassName = props.level === 0 && !hasChildren\n ? \"\" \n : \"rjf-form-group-inner\";\n\n return (\n
\n {props.level === 0 && {props.schema.title}}\n
\n {props.level > 0 && {props.schema.title}}\n {props.children}\n {props.addable && \n props.onAdd()}\n title=\"Add new\"\n >\n {hasChildren ? 'Add more' : 'Add'}\n \n }\n
\n
\n );\n}\n","import {getBlankData} from './data';\nimport {Button, FormInput, FormCheckInput, FormRadioInput, FormSelectInput,\n FormFileInput, FormRow, FormGroup} from './components';\nimport {getVerboseName} from './util';\n\n\nfunction handleChange(e, valueType, callback) {\n let type = e.target.type\n let value;\n\n if (type === 'checkbox') {\n value = e.target.checked;\n } else {\n value = e.target.value;\n }\n\n if (valueType === 'number') {\n value = value.trim();\n if (value !== '' && !isNaN(Number(value)))\n value = Number(value);\n }\n\n callback(e.target.name, value);\n}\n\n\nfunction FormField(props) {\n let inputProps = {\n name: props.name,\n value: props.data,\n };\n\n let type = props.schema.type;\n if (props.schema.choices) {\n inputProps.options = props.schema.choices;\n type = 'select';\n }\n if (props.schema.widget)\n type = props.schema.widget;\n\n let InputField;\n\n switch (type) {\n case 'string':\n InputField = FormInput;\n\n if (props.schema.format) {\n if (props.schema.format === 'data-url' || props.schema.format === 'file-url') {\n InputField = FormFileInput;\n }\n inputProps.type = props.schema.format;\n }\n else {\n inputProps.type = 'text';\n }\n break;\n case 'number':\n inputProps.type = 'number';\n InputField = FormInput;\n break;\n case 'integer':\n inputProps.type = 'number';\n InputField = FormInput;\n break;\n case 'boolean':\n inputProps.type = 'checkbox';\n InputField = FormCheckInput;\n break;\n case 'checkbox':\n inputProps.type = 'checkbox';\n InputField = FormCheckInput;\n break;\n case 'radio':\n inputProps.type = 'radio';\n InputField = FormRadioInput;\n break;\n case 'select':\n InputField = FormSelectInput;\n break;\n default:\n inputProps.type = 'text';\n InputField = FormInput;\n }\n\n return (\n {props.schema.title} \n :\n props.schema.title\n }\n onChange={(e) => handleChange(e, props.schema.type, props.onChange)}\n />\n );\n}\n\n\nexport function getStringFormRow(data, schema, name, onChange, onRemove, removable, onEdit, editable) {\n\n return (\n onRemove(name) : null}\n >\n \n \n );\n}\n\nexport function getArrayFormRow(data, schema, name, onChange, onAdd, onRemove, level) {\n let rows = [];\n let groups = [];\n\n let removable = true;\n let min_items = schema.min_items || 0;\n if (data.length <= min_items)\n removable = false;\n\n let addable = true;\n let max_items = schema.max_items || 100;\n if (data.length >= max_items)\n addable = false;\n\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let childName = name + '-' + i;\n\n if (schema.items.type === 'array') {\n groups.push(getArrayFormRow(item, schema.items, childName, onChange, onAdd, onRemove, level + 1));\n } else if (schema.items.type === 'object') {\n groups.push(getObjectFormRow(item, schema.items, childName, onChange, onAdd, onRemove, level + 1));\n } else {\n rows.push(getStringFormRow(item, schema.items, childName, onChange, onRemove, removable));\n } \n }\n\n let coords = name; // coordinates for insertion and deletion\n\n if (rows.length || (!rows.length && !groups.length)) {\n rows = (\n onAdd(getBlankData(schema.items), coords)}\n key={'row_group_' + name}\n >\n {rows}\n \n );\n }\n\n if (groups.length) {\n let groupTitle = schema.title ?
{schema.title}
: null;\n\n groups = (\n
\n {groupTitle}\n {groups.map((i, index) => (\n
\n {removable && \n onRemove(name + '-' + index)}\n title=\"Remove\"\n >\n ×\n \n }\n {i}\n
\n )\n )}\n {addable && \n onAdd(getBlankData(schema.items), coords)}\n title=\"Add new\"\n >\n Add item\n \n }\n
\n )\n }\n\n return [...rows, ...groups];\n}\n\n\nexport function getObjectFormRow(data, schema, name, onChange, onAdd, onRemove, level) {\n let rows = [];\n\n let keys = [...Object.keys(schema.keys)];\n\n if (schema.additionalProperties)\n keys = [...keys, ...Object.keys(data).filter((k) => keys.indexOf(k) === -1)];\n\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n let value = data[key];\n let childName = name + '-' + key;\n let schemaValue = schema.keys[key] || {type: 'string'};\n\n if (!schemaValue.title)\n schemaValue.title = getVerboseName(key);\n\n let removable = false;\n if (schema.keys[key] === undefined)\n removable = true;\n\n if (schemaValue.type === 'array') {\n rows.push(getArrayFormRow(value, schemaValue, childName, onChange, onAdd, onRemove, level + 1));\n } else if (schemaValue.type === 'object') {\n rows.push(getObjectFormRow(value, schemaValue, childName, onChange, onAdd, onRemove, level + 1));\n } else {\n rows.push(getStringFormRow(\n value, schemaValue, childName, onChange, onRemove, removable, \n () => handleKeyEdit(data, key, value, childName, onAdd, onRemove),\n removable\n ));\n }\n }\n\n if (rows.length || schema.additionalProperties) {\n let className = \"rjf-form-group-inner\";\n if (level === 0 && !rows.length)\n className = \"\";\n \n let coords = name;\n\n rows = (\n handleKeyValueAdd(data, coords, onAdd)}\n key={'row_group_' + name}\n >\n {rows}\n \n );\n }\n\n return rows;\n}\n\n\nfunction handleKeyValueAdd(data, coords, onAdd) {\n let key = prompt(\"Add new key\");\n if (key === null) // clicked cancel\n return;\n\n key = key.trim();\n if (!key)\n alert(\"(!) Can't add empty key.\\r\\n\\r\\n‎\");\n else if (data.hasOwnProperty(key))\n alert(\"(!) Duplicate keys not allowed. This key already exists.\\r\\n\\r\\n‎\");\n else\n onAdd(\"\", coords + '-' + key); \n}\n\n\nfunction handleKeyEdit(data, key, value, coords, onAdd, onRemove) {\n let newKey = prompt(\"Rename key\", key);\n if (newKey === null) // clicked cancel\n return;\n\n newKey = newKey.trim();\n\n if (newKey === key) // same keys\n return;\n\n if (!newKey)\n return alert(\"(!) Key name can't be empty.\\r\\n\\r\\n‎\");\n else if (data.hasOwnProperty(newKey))\n return alert(\"(!) Duplicate keys not allowed. This key already exists.\\r\\n\\r\\n‎\");\n\n onAdd(value, name + '-' + newKey);\n onRemove(coords);\n}\n","import {getBlankData, getSyncedData} from './data';\nimport {getArrayFormRow, getObjectFormRow} from './ui';\nimport {EditorContext} from './util';\n\n\nexport default class Form extends React.Component {\n constructor(props) {\n super(props);\n\n this.dataInput = document.getElementById(this.props.dataInputId);\n this.schema = props.schema;\n\n let data = props.data;\n\n if (!data) {\n // create empty data from schema\n data = getBlankData(this.schema);\n } else {\n // data might be stale if schema has new keys, so add them to data\n try {\n data = getSyncedData(data, this.schema);\n } catch (error) {\n console.log(\"Error: Schema and data don't match\");\n console.log(error);\n }\n }\n\n this.state = {\n value: '',\n data: data\n };\n \n // update data in the input\n this.populateDataInput();\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.state.data !== prevState.data) {\n this.populateDataInput();\n }\n }\n\n populateDataInput = () => {\n this.dataInput.value = JSON.stringify(this.state.data);\n }\n\n handleChange = (coords, value) => {\n /*\n e.target.name is a chain of indices and keys:\n xxx-0-key-1-key2 and so on.\n These can be used as coordinates to locate \n a particular deeply nested item.\n\n This first coordinate is not important and should be removed.\n */\n coords = coords.split('-');\n\n coords.shift(); // remove first coord\n\n function setDataUsingCoords(coords, data, value) {\n let coord = coords.shift();\n if (!isNaN(Number(coord)))\n coord = Number(coord);\n\n if (coords.length) {\n setDataUsingCoords(coords, data[coord], value);\n } else {\n data[coord] = value;\n }\n }\n\n let _data = JSON.parse(JSON.stringify(this.state.data));\n\n setDataUsingCoords(coords, _data, value);\n\n this.setState({data: _data});\n }\n\n getFields = () => {\n let data = this.state.data;\n let formGroups = [];\n\n try {\n if (this.schema.type === 'array') {\n return getArrayFormRow(\n data, this.schema, 'rjf',\n this.handleChange, this.addFieldset, this.removeFieldset,\n 0\n );\n } else if (this.schema.type === 'object') {\n return getObjectFormRow(\n data, this.schema, 'rjf',\n this.handleChange, this.addFieldset, this.removeFieldset,\n 0\n );\n }\n } catch (error) {\n formGroups = (\n

\n (!) Error: Schema and data do not match.\n

\n );\n }\n\n return formGroups;\n }\n\n addFieldset = (blankData, coords) => {\n coords = coords.split('-');\n coords.shift();\n\n this.setState((state) => {\n function addDataUsingCoords(coords, data, value) {\n let coord = coords.shift();\n if (!isNaN(Number(coord)))\n coord = Number(coord);\n\n if (coords.length) {\n addDataUsingCoords(coords, data[coord], value);\n } else {\n if (Array.isArray(data)) {\n data.push(value);\n }\n else {\n if (Array.isArray(data[coord])) {\n data[coord].push(value);\n } else {\n data[coord] = value;\n }\n }\n }\n }\n\n let _data = JSON.parse(JSON.stringify(state.data));\n\n addDataUsingCoords(coords, _data, blankData);\n\n return {data: _data};\n });\n }\n\n removeFieldset = (coords) => {\n coords = coords.split('-');\n coords.shift();\n\n this.setState((state) => {\n function removeDataUsingCoords(coords, data) {\n let coord = coords.shift();\n if (!isNaN(Number(coord)))\n coord = Number(coord);\n\n if (coords.length) {\n removeDataUsingCoords(coords, data[coord]);\n } else {\n if (Array.isArray(data))\n data = data.splice(coord, 1); // in-place mutation\n else\n delete data[coord];\n }\n }\n\n let _data = JSON.parse(JSON.stringify(state.data));\n\n removeDataUsingCoords(coords, _data);\n\n return {data: _data};\n });\n }\n\n render() {\n return (\n
\n
\n \n {this.getFields()}\n \n
\n
\n );\n }\n}\n","import JSONForm from './renderer';\n\n\nexport default {\n JSONForm,\n};","import Form from './form';\n\n\nexport default function JSONForm(config) {\n this.containerId = config.containerId;\n this.dataInputId = config.dataInputId;\n this.schema = config.schema;\n this.data = config.data;\n this.fileUploadEndpoint = config.fileUploadEndpoint;\n this.fieldName = config.fieldName;\n this.modelName = config.modelName;\n\n this.render = function() {\n ReactDOM.render(\n ,\n document.getElementById(this.containerId)\n );\n }\n}"],"names":["getBlankObject","schema","keys","key","value","type","getBlankArray","items","push","getBlankData","getSyncedArray","data","newData","JSON","parse","stringify","i","length","item","getSyncedObject","Object","schemaValue","hasOwnProperty","Button","className","props","children","Loader","EditorContext","React","createContext","FormInput","label","inputRef","ref","h","FormCheckInput","name","toUpperCase","undefined","checked","FormRadioInput","options","map","option","inputValue","FormSelectInput","defaultValue","disabled","FormFileInput","_this","getFileName","extractFileInfo","dataURL","dataURI","splitted","split","params","replace","properties","filter","param","binary","atob","array","charCodeAt","blob","window","Blob","Uint8Array","dataURItoBlob","size","addNameToDataURL","encodeURIComponent","handleChange","e","file","target","files","fileName","reader","FileReader","onload","event","result","onChange","readAsDataURL","endpoint","context","fileUploadEndpoint","console","error","alert","setState","loading","formData","FormData","append","fieldName","modelName","slice","fetch","method","headers","document","cookie","trim","indexOf","body","then","response","json","file_path","showFileBrowser","current","click","state","createRef","componentDidUpdate","prevProps","prevState","this","render","Component","GroupTitle","FormRow","onRemove","onClick","title","FormGroup","hasChildren","Children","count","innerClassName","level","addable","onAdd","FormField","InputField","inputProps","choices","widget","format","editable","onEdit","valueType","callback","isNaN","Number","getStringFormRow","removable","getArrayFormRow","rows","groups","min_items","max_items","childName","getObjectFormRow","coords","groupTitle","index","additionalProperties","k","string","charAt","substr","toLowerCase","getVerboseName","handleKeyEdit","prompt","handleKeyValueAdd","newKey","contextType","Form","populateDataInput","dataInput","shift","_data","setDataUsingCoords","coord","getFields","formGroups","addFieldset","removeFieldset","style","color","blankData","addDataUsingCoords","Array","isArray","removeDataUsingCoords","splice","getElementById","dataInputId","log","Provider","JSONForm","config","containerId","ReactDOM"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index eea89e6..efb8779 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-json-form", - "version": "0.1.0", + "version": "1.0.0", "description": "", "type": "module", "source": "./src/index.js", @@ -16,7 +16,7 @@ "lint": "eslint src" }, "keywords": [], - "author": "", + "author": "Bharat Chauhan", "license": "ISC", "devDependencies": { "@babel/eslint-parser": "^7.15.0",