import React, { PropTypes, Component } from 'react'; import Formsy from 'formsy-react'; import { Button } from 'react-bootstrap'; import SmartForms from "./smart-forms.jsx"; import Utils from './utils.js'; const EditDocument = React.createClass({ propTypes: { document: React.PropTypes.object.isRequired, collection: React.PropTypes.object.isRequired, currentUser: React.PropTypes.object, successCallback: React.PropTypes.func, errorCallback: React.PropTypes.func, methodName: React.PropTypes.string, labelFunction: React.PropTypes.func }, getFields() { const collection = this.props.collection; const fields = collection.getInsertableFields(this.props.currentUser); return fields; }, submitForm(data) { 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) => { 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 (
{fields.map(fieldName =>
{SmartForms.getComponent(fieldName, collection.simpleSchema()._schema[fieldName], this.props.labelFunction, document)}
)}
) } }); EditDocument.contextTypes = { closeCallback: React.PropTypes.func } module.exports = EditDocument; export default EditDocument;