@airbnb/lunar-apollo
Version:
Apollo and GraphQL utilities.
74 lines (53 loc) • 2.72 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireDefault(require("react"));
var _components = require("@apollo/client/react/components");
var _ErrorMessage = _interopRequireDefault(require("@airbnb/lunar/lib/components/ErrorMessage"));
var _Loader = _interopRequireDefault(require("@airbnb/lunar/lib/components/Loader"));
var _renderElementOrFunction = _interopRequireDefault(require("@airbnb/lunar/lib/utils/renderElementOrFunction"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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; }
/**
* A declarative component to make GraphQL queries.
* Based on Apollo's [Query](https://www.apollographql.com/docs/react/essentials/queries.html#props) component.
*/
class Query extends _react.default.Component {
constructor(...args) {
super(...args);
_defineProperty(this, "handleRender", result => {
if (result.loading) {
return (0, _renderElementOrFunction.default)(this.props.loading) || /*#__PURE__*/_react.default.createElement(_Loader.default, {
static: true
});
}
if (result.error && (!this.props.ignoreGraphQLErrors || result.error.networkError)) {
return (0, _renderElementOrFunction.default)(this.props.error, result.error) || /*#__PURE__*/_react.default.createElement(_ErrorMessage.default, {
error: result.error
});
}
return this.props.children(result.data || null, result);
});
}
render() {
const _this$props = this.props,
props = _objectWithoutPropertiesLoose(_this$props, ["children", "loading", "error"]); // @ts-ignore Prop spreading
return /*#__PURE__*/_react.default.createElement(_components.Query, props, this.handleRender);
}
}
exports.default = Query;
_defineProperty(Query, "propTypes", {
children: _propTypes.default.func.isRequired,
ignoreGraphQLErrors: _propTypes.default.bool
});
_defineProperty(Query, "defaultProps", {
ignoreGraphQLErrors: false,
notifyOnNetworkStatusChange: false,
partialRefetch: false,
pollInterval: 0,
skip: false,
ssr: false,
variables: {}
});