variable-form-fields
Version:
Component for a form segment that requires a variable number of rows of custom fields. Uses react.
99 lines (78 loc) • 3.51 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _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; };
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _utils = require('utils/utils');
var _immutabilityHelper = require('immutability-helper');
var _immutabilityHelper2 = _interopRequireDefault(_immutabilityHelper);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function getModifyVarInput(createFieldInputHandler, data) {
return function (row) {
return function (ele) {
// remove varInput as it won't be natively compatible with the input element
var _ele$props = ele.props,
varInput = _ele$props.varInput,
onChange = _ele$props.onChange,
restProps = _objectWithoutProperties(_ele$props, ['varInput', 'onChange']); // eslint-disable-line no-unused-vars
var key = ele.key;
if (!key) console.error('variable-form-fields requires key on all varInput fields');
// if no field.key, we just wont' track it, no err req
// should probably use React.cloneElement()
return (0, _immutabilityHelper2.default)(ele, key ? {
props: {
$set: _extends({}, restProps, {
value: data && data[row][key] || '',
onChange: createFieldInputHandler(row, data, key, onChange)
})
}
} : {});
};
};
}
function getModifyVarRemove(createRemoveRowHandler, data) {
return function (row) {
return function (ele) {
if (row === 0 && !ele.props.showFirstRow) return undefined;
// remove varRemove and showFirst as it won't be natively compatible with the button element
var _ele$props2 = ele.props,
varRemove = _ele$props2.varRemove,
showFirstRow = _ele$props2.showFirstRow,
restProps = _objectWithoutProperties(_ele$props2, ['varRemove', 'showFirstRow']);
var input = (0, _immutabilityHelper2.default)(ele, {
props: {
$set: _extends({}, restProps, {
onClick: createRemoveRowHandler(row, data)
})
}
});
return input;
};
};
}
function VarRow(props) {
var modifierArr = [{
propKey: 'varInput',
modifier: getModifyVarInput(props.createFieldInputHandler, props.data)(props.row)
}, {
propKey: 'varRemove',
modifier: getModifyVarRemove(props.createRemoveRowHandler, props.data)(props.row)
}];
if (props.children.constructor !== Array) {
return (0, _utils.findEleWithPropAndModify)(props.children, modifierArr);
}
return props.children.map(function (field) {
return (0, _utils.findEleWithPropAndModify)(field, modifierArr);
});
}
VarRow.propTypes = {
modifierArr: _propTypes2.default.arrayOf(_propTypes2.default.shape({
propKey: _propTypes2.default.string,
modifier: _propTypes2.default.func
})),
children: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.arrayOf(_propTypes2.default.element)])
};
exports.default = VarRow;
;