import React, { PropTypes, Component } from 'react'; import Formsy from 'formsy-react'; import { Button } from 'react-bootstrap'; import FormComponent from "./FormComponent.jsx"; import Utils from './utils.js'; class EditDocument extends Component{ constructor() { super(); this.submitForm = this.submitForm.bind(this); this.state = { disabled: false }; } getFields() { const collection = this.props.collection; const fields = collection.getInsertableFields(this.props.currentUser); return fields; } submitForm(data) { this.setState({disabled: true}); const fields = this.getFields(); const document = this.props.document; // put all keys with data on $set const set = _.compactObject(Utils.flatten(data)); // put all keys without data on $unset const unsetKeys = _.difference(fields, _.keys(set)); const unset = _.object(unsetKeys, unsetKeys.map(()=>true)); const modifier = {$set: set, $unset: unset}; const collection = this.props.collection; const methodName = this.props.methodName ? this.props.methodName : collection._name+'.edit'; Meteor.call(methodName, document._id, modifier, (error, document) => { this.setState({disabled: false}); if (error) { console.log(error) if (this.props.errorCallback) { this.props.errorCallback(document, error); } } else { if (this.props.successCallback) { this.props.successCallback(document); } if (this.context.closeCallback) { this.context.closeCallback(); } } }); } render() { const document = this.props.document; const collection = this.props.collection; const fields = this.getFields(); const style = { maxWidth: "800px", width: "100%" } return (