react-define-form
Version:
React define form offers alternative typescript bindings for [react-final-form](https://github.com/final-form/react-final-form). It requires you to "define" a form type, specifying the type of the form data.
66 lines (62 loc) • 2.45 kB
JavaScript
;
var _jsxFileName = "/Users/fplindesay/Documents/GitHub/define-form/packages/react-define-form/lib/index.jsx";
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var createField_1 = require("./createField");
var _require = require('react-final-form'),
_Form = _require.Form,
Field = _require.Field,
FormSpy = _require.FormSpy;
function defineForm(getFields) {
return defineFormInner(getFields, {});
}
exports.default = defineForm;
function defineFormInner(getFields, existingFields) {
var _this = this;
var fieldSpecs = getFields(createField_1.default);
var fields = Object.keys(fieldSpecs);
var Fields = existingFields;
fields.forEach(function (name) {
Fields[name] = function (props) {
return React.createElement(Field, Object.assign({ validate: fieldSpecs[name].parse && function (value) {
try {
fieldSpecs[name].parse(value);
return undefined;
} catch (ex) {
return ex.message || ex;
}
} }, props, { name: name, allowNull: true, format: null, parse: null, __source: {
fileName: _jsxFileName,
lineNumber: 15
},
__self: _this
}));
};
});
return {
Form: function Form(props) {
return React.createElement(_Form, Object.assign({}, props, { onSubmit: function onSubmit(data, form) {
var parsedValues = {};
fields.forEach(function (fieldName) {
if (fieldSpecs[fieldName].parse) {
parsedValues[fieldName] = fieldSpecs[fieldName].parse(data[fieldName]);
} else {
parsedValues[fieldName] = data[fieldName];
}
});
return props.onSubmit(parsedValues, form);
}, __source: {
fileName: _jsxFileName,
lineNumber: 27
},
__self: _this
}));
},
Fields: Fields,
FormSpy: FormSpy,
extend: function extend(getFields) {
return defineFormInner(getFields, Object.assign({}, Fields));
}
};
}
//# sourceMappingURL=index.jsx.map