import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { Components, registerComponent } from 'meteor/vulcan:core'; import Button from 'react-bootstrap/lib/Button'; const FormNestedItem = ({ nestedFields, name, path, removeItem, itemIndex, ...props }, { errors }) => { return (
{nestedFields.map((field, i) => { return ( ); })}
); }; FormNestedItem.contextTypes = { errors: PropTypes.array, }; registerComponent('FormNestedItem', FormNestedItem); class FormNested extends PureComponent { addItem = () => { this.props.updateCurrentValues({ [`${this.props.path}.${this.props.value.length}`]: {} }); }; removeItem = index => { this.props.updateCurrentValues({ [`${this.props.path}.${index}`]: null }); }; /* Go through this.context.deletedValues and see if any value matches both the current field and the given index (ex: if we want to know if the second address is deleted, we look for the presence of 'addresses.1') */ isDeleted = index => { return this.context.deletedValues.includes(`${this.props.path}.${index}`); }; render() { // do not pass FormNested's own value and control props down const properties = _.omit(this.props, 'value', 'control'); return (
{this.props.value && this.props.value.map( (subDocument, i) => !this.isDeleted(i) && ( { this.removeItem(i); }} /> ) )}
); } } FormNested.contextTypes = { deletedValues: PropTypes.array, }; registerComponent('FormNested', FormNested); const IconAdd = ({ width = 24, height = 24 }) => ( ); registerComponent('IconAdd', IconAdd); const IconRemove = ({ width = 24, height = 24 }) => ( ); registerComponent('IconRemove', IconRemove);