1 | "use strict";
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.useQuery = useQuery;
|
5 |
|
6 | var _apolloClient = require("apollo-client");
|
7 |
|
8 | var _react = require("react");
|
9 |
|
10 | var _ApolloContext = require("./ApolloContext");
|
11 |
|
12 | var _SSRContext = require("./internal/SSRContext");
|
13 |
|
14 | var _actHack = _interopRequireDefault(require("./internal/actHack"));
|
15 |
|
16 | var _queryCache = require("./queryCache");
|
17 |
|
18 | var _utils = require("./utils");
|
19 |
|
20 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
21 |
|
22 | function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
23 |
|
24 | function useQuery(query, _temp) {
|
25 | var _ref = _temp === void 0 ? {} : _temp,
|
26 | _ref$ssr = _ref.ssr,
|
27 | ssr = _ref$ssr === void 0 ? true : _ref$ssr,
|
28 | _ref$skip = _ref.skip,
|
29 | skip = _ref$skip === void 0 ? false : _ref$skip,
|
30 | _ref$suspend = _ref.suspend,
|
31 | suspend = _ref$suspend === void 0 ? false : _ref$suspend,
|
32 | pollInterval = _ref.pollInterval,
|
33 | _ref$notifyOnNetworkS = _ref.notifyOnNetworkStatusChange,
|
34 | notifyOnNetworkStatusChange = _ref$notifyOnNetworkS === void 0 ? false : _ref$notifyOnNetworkS,
|
35 | overrideClient = _ref.client,
|
36 | context = _ref.context,
|
37 | metadata = _ref.metadata,
|
38 | variables = _ref.variables,
|
39 | actualCachePolicy = _ref.fetchPolicy,
|
40 | errorPolicy = _ref.errorPolicy,
|
41 | fetchResults = _ref.fetchResults;
|
42 |
|
43 | var client = (0, _ApolloContext.useApolloClient)(overrideClient);
|
44 | var ssrManager = (0, _react.useContext)(_SSRContext.SSRContext);
|
45 | var ssrInUse = ssr && ssrManager;
|
46 |
|
47 | var shouldSkip = skip || ssrManager != null && !ssr;
|
48 | var fetchPolicy = ssrInUse && (
|
49 | actualCachePolicy === 'network-only' || actualCachePolicy === 'cache-and-network') ? 'cache-first' : actualCachePolicy;
|
50 | var watchQueryOptions = (0, _react.useMemo)(function () {
|
51 | return (0, _utils.compact)({
|
52 | context: context,
|
53 | errorPolicy: errorPolicy,
|
54 | fetchPolicy: fetchPolicy,
|
55 | fetchResults: fetchResults,
|
56 | metadata: metadata,
|
57 | notifyOnNetworkStatusChange: notifyOnNetworkStatusChange,
|
58 | pollInterval: pollInterval,
|
59 | query: query,
|
60 | variables: variables
|
61 | });
|
62 | }, [query, pollInterval, notifyOnNetworkStatusChange, context && (0, _utils.objToKey)(context), metadata && (0, _utils.objToKey)(metadata), variables && (0, _utils.objToKey)(variables), fetchPolicy, errorPolicy, fetchResults]);
|
63 | var observableQuery = (0, _react.useMemo)(function () {
|
64 | return (0, _queryCache.getCachedObservableQuery)(client, watchQueryOptions);
|
65 | }, [client, watchQueryOptions]);
|
66 |
|
67 | var _useState = (0, _react.useState)(0),
|
68 | responseId = _useState[0],
|
69 | setResponseId = _useState[1];
|
70 |
|
71 | var currentResult = (0, _react.useMemo)(function () {
|
72 | var helpers = {
|
73 | fetchMore: observableQuery.fetchMore.bind(observableQuery),
|
74 | refetch: observableQuery.refetch.bind(observableQuery),
|
75 | startPolling: observableQuery.startPolling.bind(observableQuery),
|
76 | stopPolling: observableQuery.stopPolling.bind(observableQuery),
|
77 | updateQuery: observableQuery.updateQuery.bind(observableQuery)
|
78 | };
|
79 | var result = observableQuery.getCurrentResult();
|
80 |
|
81 | var data = result.data;
|
82 |
|
83 | if (result.error || result.errors) {
|
84 | data = _extends({}, result.data, {}, (observableQuery.getLastResult() || {}).data);
|
85 | }
|
86 |
|
87 | if (shouldSkip) {
|
88 |
|
89 | return _extends({}, helpers, {
|
90 | data: undefined,
|
91 | error: undefined,
|
92 | loading: false,
|
93 | networkStatus: undefined
|
94 | });
|
95 | }
|
96 |
|
97 | return _extends({}, helpers, {
|
98 | data: data,
|
99 | error: result.errors && result.errors.length > 0 ? new _apolloClient.ApolloError({
|
100 | graphQLErrors: result.errors
|
101 | }) : result.error,
|
102 | errors: result.errors,
|
103 | loading: result.loading,
|
104 |
|
105 |
|
106 |
|
107 | networkStatus: suspend ? undefined : result.networkStatus,
|
108 | partial: result.partial,
|
109 | stale: result.stale
|
110 | });
|
111 | }, [shouldSkip, responseId, observableQuery]);
|
112 | (0, _react.useEffect)(function () {
|
113 | if (shouldSkip) {
|
114 | return;
|
115 | }
|
116 |
|
117 | var invalidateCurrentResult = function invalidateCurrentResult() {
|
118 |
|
119 |
|
120 |
|
121 |
|
122 | (0, _actHack["default"])(function () {
|
123 | setResponseId(function (x) {
|
124 | return x + 1;
|
125 | });
|
126 | });
|
127 | };
|
128 |
|
129 | var subscription = observableQuery.subscribe(invalidateCurrentResult, invalidateCurrentResult);
|
130 | (0, _queryCache.invalidateCachedObservableQuery)(client, watchQueryOptions);
|
131 | return function () {
|
132 | subscription.unsubscribe();
|
133 | };
|
134 | }, [shouldSkip, observableQuery]);
|
135 | ensureSupportedFetchPolicy(suspend, fetchPolicy);
|
136 |
|
137 | if (currentResult.partial) {
|
138 | if (suspend) {
|
139 |
|
140 |
|
141 | throw observableQuery.result();
|
142 | }
|
143 |
|
144 | if (ssrInUse) {
|
145 | ssrManager.register(observableQuery.result());
|
146 | }
|
147 | }
|
148 |
|
149 | return currentResult;
|
150 | }
|
151 |
|
152 | function ensureSupportedFetchPolicy(suspend, fetchPolicy) {
|
153 | if (suspend && fetchPolicy && fetchPolicy !== 'cache-first') {
|
154 | throw new Error("Fetch policy " + fetchPolicy + " is not supported without 'suspend: false'");
|
155 | }
|
156 | } |
\ | No newline at end of file |