/*

HoC that provides a simple mutation that expects a single JSON object in return

Example usage:

export default withMutation({
  name: 'getEmbedlyData',
  args: {url: 'String'},
})(EmbedlyURL);

*/

import { graphql } from 'react-apollo';
import gql from 'graphql-tag';

export default function withMutation({name, args}) {

  let mutation;

  if (args) {
    const args1 = _.map(args, (type, name) => `$${name}: ${type}`); // e.g. $url: String
    const args2 = _.map(args, (type, name) => `${name}: $${name}`); // e.g. $url: url
    mutation = `
      mutation ${name}(${args1}) {
        ${name}(${args2})
      }
    `
  } else {
    mutation = `
      mutation ${name} {
        ${name}
      }
    `
  }

  return graphql(gql`${mutation}`, {
    props: ({ownProps, mutate}) => ({
      [name]: (vars) => {
        return mutate({ 
          variables: vars,
        });
      }
    }),
  });
}