UNPKG

apeman-react-mixins

Version:
270 lines (211 loc) 17.3 kB
/** * Mixin for form. * @mixin ApFormMixin */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _defaults = require('defaults'); var _defaults2 = _interopRequireDefault(_defaults); var _stringcase = require('stringcase'); var _stringcase2 = _interopRequireDefault(_stringcase); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** @lends ApFormMixin */ var ApFormMixin = { // -------------------- // Custom // -------------------- $apFormMixed: true, /** * Handle change of form input * @param {object} e - Input change event. */ handleFormChange: function handleFormChange(e) { var s = this; var props = s.props; var _e$target = e.target; var name = _e$target.name; var value = _e$target.value; var values = Object.assign({}, props.formValues, _defineProperty({}, name, value)); if (props.onFormChange) { e = e || {}; e.target = e.target || _reactDom2.default.findDOMNode(s); e.form = values; props.onFormChange(e); } }, /** * Handle form submit. * @param {object} e - Submit event. */ handleFormSubmit: function handleFormSubmit(e) { var s = this; var props = s.props; var values = props.formValues; if (props.onFormSubmit) { e = e || {}; e.target = e.target || _reactDom2.default.findDOMNode(s); e.form = values; props.onFormSubmit(e); } }, /** * Handle form cancel. * @param {object} e - Submit event. */ handleFormCancel: function handleFormCancel(e) { var s = this; var props = s.props; var values = props.formValues; if (props.onFormCancel) { e = e || {}; e.target = e.target || _reactDom2.default.findDOMNode(s); e.form = values; props.onFormCancel(e); } }, /** * Get a form value. * @param {string} name - Name of the value. * @returns {*} - Value */ getFormValue: function getFormValue(name) { var s = this; var values = s.getFormValues(); return values && values[name]; }, /** * Get form values. * @returns {string} */ getFormValues: function getFormValues() { var s = this; var formValues = s.props.formValues; return s.formatFormValues(formValues || null); }, /** * Get a form id. * @param {string} name * @returns {string} */ getFormId: function getFormId(name) { var s = this; var formPrefix = s.props.formPrefix; return [formPrefix || 'ap-form', _stringcase2.default.spinalcase(name)].join('-'); }, /** * Get a label * @param {string} name * @returns {string} */ getFormLabel: function getFormLabel(name) { var s = this; var formLabels = s.props.formLabels; var label = (formLabels || {})[name]; if (!label) { console.warn('[ApFormMixin] Label not found with name: ' + name); label = name; } return label; }, /** * Get a icon * @param {string} name * @returns {string} */ getFormIcon: function getFormIcon(name) { var s = this; var formIcons = s.props.formIcons; return (formIcons || {})[name]; }, /** * Get a placeholder * @param {string} name * @returns {string} */ getFormPlaceholder: function getFormPlaceholder(name) { var s = this; var formPlaceholders = s.props.formPlaceholders; return (formPlaceholders || {})[name]; }, /** * Get an image * @param {string} name * @returns {string} */ getFormImage: function getFormImage(name) { var s = this; var formImages = s.props.formImages; return (formImages || {})[name]; }, /** * Get an action * @param {string} name * @returns {string} */ getFormAction: function getFormAction(name) { var s = this; var formActions = s.props.formActions; return (formActions || {})[name]; }, /** * Wrap as form handler. * @param {function} handler - A handler. * @param {object} options - Optional setttings * @returns {function} */ asFormHandler: function asFormHandler(handler, options) { var s = this; options = options || {}; var key = options.key || 'default'; if (!handler) { return null; } handler.apFormWraps = handler.apFormWraps || {}; handler.apFormWraps[key] = handler.apFormWraps[key] || function formWrap(e) { e = Object.assign(e || {}, { form: s.getFormValues() }, options); handler.call(s, e); }; return handler.apFormWraps[key]; }, // -------------------- // Specs // -------------------- propTypes: { formValues: _react.PropTypes.object, formLabels: _react.PropTypes.object, formIcons: _react.PropTypes.object, formImages: _react.PropTypes.object, formActions: _react.PropTypes.object, formPlaceholders: _react.PropTypes.object, formPrefix: _react.PropTypes.string, onFormChange: _react.PropTypes.func, onFormSubmit: _react.PropTypes.func, onFormCancel: _react.PropTypes.func }, getDefaultProps: function getDefaultProps() { return {}; }, // -------------------- // Lifecycle // -------------------- componentWillMount: function componentWillMount() { var s = this; var noop = function noop(value) { return value; }; (0, _defaults2.default)(s, { formatFormValues: noop }); } }; exports.default = Object.freeze(ApFormMixin); //# sourceMappingURL=data:application/json;base64,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c2hpbmlzaGkvUHJvamVjdHMvYXBlbWFuLXByb2plY3RzL2FwZW1hbi1yZWFjdC1taXhpbnMvbGliIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNaXhpbiBmb3IgZm9ybS5cbiAqIEBtaXhpbiBBcEZvcm1NaXhpblxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgUmVhY3QsIHtQcm9wVHlwZXMgYXMgdHlwZXN9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBkZWZhdWx0cyBmcm9tICdkZWZhdWx0cydcbmltcG9ydCBzdHJpbmdjYXNlIGZyb20gJ3N0cmluZ2Nhc2UnXG5cbi8qKiBAbGVuZHMgQXBGb3JtTWl4aW4gKi9cbmNvbnN0IEFwRm9ybU1peGluID0ge1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEN1c3RvbVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAkYXBGb3JtTWl4ZWQ6IHRydWUsXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjaGFuZ2Ugb2YgZm9ybSBpbnB1dFxuICAgKiBAcGFyYW0ge29iamVjdH0gZSAtIElucHV0IGNoYW5nZSBldmVudC5cbiAgICovXG4gIGhhbmRsZUZvcm1DaGFuZ2UgKGUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG5cbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXRcbiAgICBsZXQgdmFsdWVzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LCBwcm9wcy5mb3JtVmFsdWVzLCB7XG4gICAgICAgIFtuYW1lXTogdmFsdWVcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAocHJvcHMub25Gb3JtQ2hhbmdlKSB7XG4gICAgICBlID0gZSB8fCB7fVxuICAgICAgZS50YXJnZXQgPSBlLnRhcmdldCB8fCBSZWFjdERPTS5maW5kRE9NTm9kZShzKVxuICAgICAgZS5mb3JtID0gdmFsdWVzXG4gICAgICBwcm9wcy5vbkZvcm1DaGFuZ2UoZSlcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBmb3JtIHN1Ym1pdC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGUgLSBTdWJtaXQgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVGb3JtU3VibWl0IChlKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuXG4gICAgbGV0IHZhbHVlcyA9IHByb3BzLmZvcm1WYWx1ZXNcbiAgICBpZiAocHJvcHMub25Gb3JtU3VibWl0KSB7XG4gICAgICBlID0gZSB8fCB7fVxuICAgICAgZS50YXJnZXQgPSBlLnRhcmdldCB8fCBSZWFjdERPTS5maW5kRE9NTm9kZShzKVxuICAgICAgZS5mb3JtID0gdmFsdWVzXG4gICAgICBwcm9wcy5vbkZvcm1TdWJtaXQoZSlcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBmb3JtIGNhbmNlbC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGUgLSBTdWJtaXQgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVGb3JtQ2FuY2VsIChlKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuXG4gICAgbGV0IHZhbHVlcyA9IHByb3BzLmZvcm1WYWx1ZXNcbiAgICBpZiAocHJvcHMub25Gb3JtQ2FuY2VsKSB7XG4gICAgICBlID0gZSB8fCB7fVxuICAgICAgZS50YXJnZXQgPSBlLnRhcmdldCB8fCBSZWFjdERPTS5maW5kRE9NTm9kZShzKVxuICAgICAgZS5mb3JtID0gdmFsdWVzXG4gICAgICBwcm9wcy5vbkZvcm1DYW5jZWwoZSlcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIGZvcm0gdmFsdWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHsqfSAtIFZhbHVlXG4gICAqL1xuICBnZXRGb3JtVmFsdWUgKG5hbWUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB2YWx1ZXMgPSBzLmdldEZvcm1WYWx1ZXMoKVxuICAgIHJldHVybiB2YWx1ZXMgJiYgdmFsdWVzWyBuYW1lIF1cbiAgfSxcblxuICAvKipcbiAgICogR2V0IGZvcm0gdmFsdWVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Rm9ybVZhbHVlcyAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtVmFsdWVzIH0gPSBzLnByb3BzXG4gICAgcmV0dXJuIHMuZm9ybWF0Rm9ybVZhbHVlcyhmb3JtVmFsdWVzIHx8IG51bGwpXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIGZvcm0gaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRGb3JtSWQgKG5hbWUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IGZvcm1QcmVmaXggfSA9IHMucHJvcHNcbiAgICByZXR1cm4gW1xuICAgICAgZm9ybVByZWZpeCB8fCAnYXAtZm9ybScsXG4gICAgICBzdHJpbmdjYXNlLnNwaW5hbGNhc2UobmFtZSlcbiAgICBdLmpvaW4oJy0nKVxuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSBsYWJlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Rm9ybUxhYmVsIChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtTGFiZWxzIH0gPSBzLnByb3BzXG4gICAgbGV0IGxhYmVsID0gKGZvcm1MYWJlbHMgfHwge30pWyBuYW1lIF1cbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtBcEZvcm1NaXhpbl0gTGFiZWwgbm90IGZvdW5kIHdpdGggbmFtZTogJHtuYW1lfWApXG4gICAgICBsYWJlbCA9IG5hbWVcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIGljb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldEZvcm1JY29uIChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtSWNvbnMgfSA9IHMucHJvcHNcbiAgICByZXR1cm4gKGZvcm1JY29ucyB8fCB7fSlbIG5hbWUgXVxuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSBwbGFjZWhvbGRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Rm9ybVBsYWNlaG9sZGVyIChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtUGxhY2Vob2xkZXJzIH0gPSBzLnByb3BzXG4gICAgcmV0dXJuIChmb3JtUGxhY2Vob2xkZXJzIHx8IHt9KVsgbmFtZSBdXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhbiBpbWFnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Rm9ybUltYWdlIChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBmb3JtSW1hZ2VzIH0gPSBzLnByb3BzXG4gICAgcmV0dXJuIChmb3JtSW1hZ2VzIHx8IHt9KVsgbmFtZSBdXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhbiBhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldEZvcm1BY3Rpb24gKG5hbWUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IGZvcm1BY3Rpb25zIH0gPSBzLnByb3BzXG4gICAgcmV0dXJuIChmb3JtQWN0aW9ucyB8fCB7fSlbIG5hbWUgXVxuICB9LFxuXG4gIC8qKlxuICAgKiBXcmFwIGFzIGZvcm0gaGFuZGxlci5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gaGFuZGxlciAtIEEgaGFuZGxlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0dGluZ3NcbiAgICogQHJldHVybnMge2Z1bmN0aW9ufVxuICAgKi9cbiAgYXNGb3JtSGFuZGxlciAoaGFuZGxlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgICBsZXQga2V5ID0gb3B0aW9ucy5rZXkgfHwgJ2RlZmF1bHQnXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBoYW5kbGVyLmFwRm9ybVdyYXBzID0gaGFuZGxlci5hcEZvcm1XcmFwcyB8fCB7fVxuICAgIGhhbmRsZXIuYXBGb3JtV3JhcHNbIGtleSBdID0gaGFuZGxlci5hcEZvcm1XcmFwc1sga2V5IF0gfHxcbiAgICAgIGZ1bmN0aW9uIGZvcm1XcmFwIChlKSB7XG4gICAgICAgIGUgPSBPYmplY3QuYXNzaWduKGUgfHwge30sIHtcbiAgICAgICAgICBmb3JtOiBzLmdldEZvcm1WYWx1ZXMoKVxuICAgICAgICB9LCBvcHRpb25zKVxuICAgICAgICBoYW5kbGVyLmNhbGwocywgZSlcbiAgICAgIH1cbiAgICByZXR1cm4gaGFuZGxlci5hcEZvcm1XcmFwc1sga2V5IF1cbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTcGVjc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByb3BUeXBlczoge1xuICAgIGZvcm1WYWx1ZXM6IHR5cGVzLm9iamVjdCxcbiAgICBmb3JtTGFiZWxzOiB0eXBlcy5vYmplY3QsXG4gICAgZm9ybUljb25zOiB0eXBlcy5vYmplY3QsXG4gICAgZm9ybUltYWdlczogdHlwZXMub2JqZWN0LFxuICAgIGZvcm1BY3Rpb25zOiB0eXBlcy5vYmplY3QsXG4gICAgZm9ybVBsYWNlaG9sZGVyczogdHlwZXMub2JqZWN0LFxuICAgIGZvcm1QcmVmaXg6IHR5cGVzLnN0cmluZyxcbiAgICBvbkZvcm1DaGFuZ2U6IHR5cGVzLmZ1bmMsXG4gICAgb25Gb3JtU3VibWl0OiB0eXBlcy5mdW5jLFxuICAgIG9uRm9ybUNhbmNlbDogdHlwZXMuZnVuY1xuICB9LFxuXG4gIGdldERlZmF1bHRQcm9wcyAoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgY29tcG9uZW50V2lsbE1vdW50ICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuXG4gICAgbGV0IG5vb3AgPSAodmFsdWUpID0+IHZhbHVlXG4gICAgZGVmYXVsdHMocywge1xuICAgICAgZm9ybWF0Rm9ybVZhbHVlczogbm9vcFxuICAgIH0pXG4gIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuZnJlZXplKEFwRm9ybU1peGluKVxuIl19