UNPKG

4.7 kBJavaScriptView Raw
1/**
2 * Copyright (c) Facebook, Inc. and its affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @emails oncall+relay
8 *
9 * @format
10 */
11'use strict';
12
13var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
15var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
16
17var getPaginationMetadata = require('./getPaginationMetadata');
18
19var useLoadMoreFunction = require('./useLoadMoreFunction');
20
21var useRefetchableFragmentNode = require('./useRefetchableFragmentNode');
22
23var useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
24
25var _require = require('react'),
26 useCallback = _require.useCallback,
27 useState = _require.useState;
28
29var _require2 = require('relay-runtime'),
30 getFragment = _require2.getFragment,
31 getFragmentIdentifier = _require2.getFragmentIdentifier;
32
33function useLegacyPaginationFragment(fragmentInput, parentFragmentRef) {
34 var fragmentNode = getFragment(fragmentInput);
35 useStaticFragmentNodeWarning(fragmentNode, 'first argument of useLegacyPaginationFragment()');
36 var componentDisplayName = 'useLegacyPaginationFragment()';
37
38 var _getPaginationMetadat = getPaginationMetadata(fragmentNode, componentDisplayName),
39 connectionPathInFragmentData = _getPaginationMetadat.connectionPathInFragmentData,
40 fragmentRefPathInResponse = _getPaginationMetadat.fragmentRefPathInResponse,
41 paginationRequest = _getPaginationMetadat.paginationRequest,
42 paginationMetadata = _getPaginationMetadat.paginationMetadata;
43
44 var _useRefetchableFragme = useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDisplayName),
45 fragmentData = _useRefetchableFragme.fragmentData,
46 fragmentRef = _useRefetchableFragme.fragmentRef,
47 refetch = _useRefetchableFragme.refetch;
48
49 var fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef); // Backward pagination
50
51 var _useLoadMore = useLoadMore({
52 direction: 'backward',
53 fragmentNode: fragmentNode,
54 fragmentRef: fragmentRef,
55 fragmentIdentifier: fragmentIdentifier,
56 fragmentData: fragmentData,
57 connectionPathInFragmentData: connectionPathInFragmentData,
58 fragmentRefPathInResponse: fragmentRefPathInResponse,
59 paginationRequest: paginationRequest,
60 paginationMetadata: paginationMetadata,
61 componentDisplayName: componentDisplayName
62 }),
63 loadPrevious = _useLoadMore[0],
64 hasPrevious = _useLoadMore[1],
65 isLoadingPrevious = _useLoadMore[2],
66 disposeFetchPrevious = _useLoadMore[3]; // Forward pagination
67
68
69 var _useLoadMore2 = useLoadMore({
70 direction: 'forward',
71 fragmentNode: fragmentNode,
72 fragmentRef: fragmentRef,
73 fragmentIdentifier: fragmentIdentifier,
74 fragmentData: fragmentData,
75 connectionPathInFragmentData: connectionPathInFragmentData,
76 fragmentRefPathInResponse: fragmentRefPathInResponse,
77 paginationRequest: paginationRequest,
78 paginationMetadata: paginationMetadata,
79 componentDisplayName: componentDisplayName
80 }),
81 loadNext = _useLoadMore2[0],
82 hasNext = _useLoadMore2[1],
83 isLoadingNext = _useLoadMore2[2],
84 disposeFetchNext = _useLoadMore2[3];
85
86 var refetchPagination = useCallback(function (variables, options) {
87 disposeFetchNext();
88 disposeFetchPrevious();
89 return refetch(variables, (0, _objectSpread2["default"])({}, options, {
90 __environment: undefined
91 }));
92 }, [disposeFetchNext, disposeFetchPrevious, refetch]);
93 return {
94 data: fragmentData,
95 loadNext: loadNext,
96 loadPrevious: loadPrevious,
97 hasNext: hasNext,
98 hasPrevious: hasPrevious,
99 isLoadingNext: isLoadingNext,
100 isLoadingPrevious: isLoadingPrevious,
101 refetch: refetchPagination
102 };
103}
104
105function useLoadMore(args) {
106 var _useState = useState(false),
107 isLoadingMore = _useState[0],
108 setIsLoadingMore = _useState[1];
109
110 var observer = {
111 start: function start() {
112 return setIsLoadingMore(true);
113 },
114 complete: function complete() {
115 return setIsLoadingMore(false);
116 },
117 error: function error() {
118 return setIsLoadingMore(false);
119 }
120 };
121
122 var handleReset = function handleReset() {
123 return setIsLoadingMore(false);
124 };
125
126 var _useLoadMoreFunction = useLoadMoreFunction((0, _objectSpread2["default"])({}, args, {
127 observer: observer,
128 onReset: handleReset
129 })),
130 loadMore = _useLoadMoreFunction[0],
131 hasMore = _useLoadMoreFunction[1],
132 disposeFetch = _useLoadMoreFunction[2];
133
134 return [loadMore, hasMore, isLoadingMore, disposeFetch];
135}
136
137module.exports = useLegacyPaginationFragment;
\No newline at end of file