@airbnb/lunar-apollo
Version:
Apollo and GraphQL utilities.
60 lines (47 loc) • 2.25 kB
JavaScript
import _pt from "prop-types";
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
import React from 'react';
import { Mutation as BaseMutation } from 'react-apollo';
import ErrorMessage from '@airbnb/lunar/lib/components/ErrorMessage';
import Loader from '@airbnb/lunar/lib/components/Loader';
import renderElementOrFunction from '@airbnb/lunar/lib/utils/renderElementOrFunction';
/**
* A declarative component to make GraphQL mutations.
* Based on Apollo's [Mutation](https://www.apollographql.com/docs/react/essentials/mutations.html#props) component.
*/
export default class Mutation extends React.Component {
constructor() {
super(...arguments);
_defineProperty(this, "handleRender", (mutator, result) => {
if (result.loading) {
return renderElementOrFunction(this.props.loading) || React.createElement(Loader, {
static: true
});
}
if (result.error && (!this.props.ignoreGraphQLErrors || result.error.networkError)) {
// istanbul ignore next (need to fix tests)
return renderElementOrFunction(this.props.error, result.error) || React.createElement(ErrorMessage, {
error: result.error
});
}
return this.props.children(mutator, result);
});
}
render() {
const _this$props = this.props,
props = _objectWithoutPropertiesLoose(_this$props, ["children", "loading", "error"]); // @ts-ignore Prop spreading
return React.createElement(BaseMutation, props, this.handleRender);
}
}
_defineProperty(Mutation, "propTypes", {
error: _pt.any,
loading: _pt.any,
ignoreGraphQLErrors: _pt.bool
});
_defineProperty(Mutation, "defaultProps", {
awaitRefetchQueries: false,
ignoreGraphQLErrors: false,
ignoreResults: false,
variables: {}
});