UNPKG

4.04 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.default = QueryRenderer;
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _react = _interopRequireWildcard(require("react"));
15
16var _reactRelay = require("react-relay");
17
18var _js = require("@kiwicom/js");
19
20var _fetch = require("@kiwicom/fetch");
21
22var _createEnvironment = _interopRequireDefault(require("./createEnvironment"));
23
24var _createNetworkFetcher = _interopRequireDefault(require("./fetchers/createNetworkFetcher"));
25
26function QueryRenderer(props) {
27 var _ref2, _props$environment;
28
29 function renderQueryRendererResponse(_ref) {
30 var error = _ref.error,
31 rendererProps = _ref.props,
32 retry = _ref.retry;
33
34 if (error) {
35 if (props.onSystemError) {
36 return props.onSystemError({
37 error: error,
38 retry: retry
39 });
40 }
41
42 var publicErrorMessage = 'Error!';
43
44 if (error instanceof _fetch.TimeoutError) {
45 publicErrorMessage = 'Timeout error!';
46 } else if (error instanceof _fetch.ResponseError) {
47 var response = error.response;
48 publicErrorMessage = (0, _js.sprintf)('Unsuccessful response! (%s - %s)', response.status, response.statusText); // You can get the actual response here:
49 // error.response.json().then(data => console.warn(data));
50 }
51
52 return _react.default.createElement("div", {
53 "data-testid": "error"
54 }, publicErrorMessage, ' ', _react.default.createElement("button", {
55 type: "button",
56 onClick: retry
57 }, "Retry"));
58 }
59
60 if (!rendererProps) {
61 return props.onLoading ? props.onLoading() : _react.default.createElement("div", {
62 "data-testid": "loading"
63 }, "Loading...");
64 }
65
66 !(props.onResponse !== undefined) ? process.env.NODE_ENV !== "production" ? (0, _js.invariant)(false, 'QueryRenderer used default render function but "onResponse" property has not been provided.') : (0, _js.invariant)(false) : void 0;
67 return props.onResponse(rendererProps);
68 }
69
70 function createDefaultEnvironment(clientID) {
71 !(clientID != null) ? process.env.NODE_ENV !== "production" ? (0, _js.invariant)(false, "You must provide 'clientID' to the QueryRenderer in order to correctly identify your client.") : (0, _js.invariant)(false) : void 0;
72 var defaultResource = 'https://graphql.kiwi.com';
73 return (0, _createEnvironment.default)({
74 fetchFn: (0, _createNetworkFetcher.default)(defaultResource, {
75 'X-Client': clientID
76 }),
77 graphiQLPrinter: function graphiQLPrinter(request, variables) {
78 return "".concat(defaultResource, "/?query=").concat(encodeURIComponent(request.text), "&variables=").concat(encodeURIComponent(JSON.stringify(variables)));
79 }
80 });
81 } // 1) <QR environment={Env} /> always win
82 // 2) <QR /> checks whether we provide Environment via `RelayEnvironmentProvider`
83 // 3) <QR /> defaults to the default Kiwi.com environment
84
85
86 var context = (0, _react.useContext)(_reactRelay.ReactRelayContext);
87 var environment = (_ref2 = (_props$environment = props.environment) !== null && _props$environment !== void 0 ? _props$environment : context === null || context === void 0 ? void 0 : context.environment) !== null && _ref2 !== void 0 ? _ref2 : createDefaultEnvironment(props.clientID); // Use this to disable store GC in order to reuse already existing data between screens:
88 // const disposable = environment.getStore().holdGC();
89 // Relay QR itself recreates the context with our environment.
90 // Relay hooks are using `useRelayEnvironment` with `ReactRelayContext` inside (so we use it as well).
91
92 return _react.default.createElement(_reactRelay.QueryRenderer, (0, _extends2.default)({
93 environment: environment,
94 render: renderQueryRendererResponse
95 }, props));
96}
\No newline at end of file