variable-form-fields
Version:
Component for a form segment that requires a variable number of rows of custom fields. Uses react.
84 lines (70 loc) • 2.48 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.VarRows = undefined;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _varRow = require('./var-row');
var _varRow2 = _interopRequireDefault(_varRow);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getClassNamesStrF(rowName, animateFirst, pendingRemovalRows, addedRows) {
return function (row) {
var classNamesArr = [];
var pendingRemovalIndex = pendingRemovalRows.indexOf(row);
var addedIndex = addedRows.indexOf(row);
switch (true) {
case pendingRemovalIndex !== -1:
classNamesArr = ['-leave'];
pendingRemovalRows.splice(pendingRemovalIndex, 1);
break;
case addedIndex !== -1 || animateFirst && row === 0:
classNamesArr = ['-enter'];
addedRows.splice(addedIndex, 1);
break;
default:
break;
}
return [''].concat(classNamesArr).map(function (suffix) {
return rowName + suffix;
}).join(' ');
};
}
function renderInputs(props) {
var getClassNameStr = getClassNamesStrF(props.name, props.animateFirst, props.pendingRemovalRows, props.addedRows);
return props.data.map(function (inputState, row) {
return _react2.default.createElement(
'div',
{ key: name + 'row' + row, className: getClassNameStr(row) },
_react2.default.createElement(
_varRow2.default,
{
row: row,
data: props.data,
createFieldInputHandler: props.createFieldInputHandler,
createRemoveRowHandler: props.createRemoveRowHandler
},
props.children
)
);
});
}
var VarRows = exports.VarRows = function VarRows(props) {
return _react2.default.createElement(
'div',
null,
' ',
renderInputs(props),
' '
);
};
VarRows.propTypes = {
createFieldInputHandler: _propTypes2.default.func.isRequired,
createRemoveRowHandler: _propTypes2.default.func.isRequired,
children: _propTypes2.default.oneOfType([_propTypes2.default.element, _propTypes2.default.arrayOf(_propTypes2.default.element)]).isRequired,
data: _propTypes2.default.arrayOf(_propTypes2.default.shape({})).isRequired,
pendingRowRemoval: _propTypes2.default.arrayOf(_propTypes2.default.number).isRequired
};
exports.default = VarRows;
;