UNPKG

react-relay

Version:

A framework for building GraphQL-driven React applications.

127 lines (126 loc) 5.1 kB
'use strict'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var useLoadMoreFunction = require('./useLoadMoreFunction'); var useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal'); var useRelayEnvironment = require('./useRelayEnvironment'); var useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning'); var _require = require('react'), useCallback = _require.useCallback, useDebugValue = _require.useDebugValue, useState = _require.useState; var _require2 = require('relay-runtime'), getFragment = _require2.getFragment, getFragmentIdentifier = _require2.getFragmentIdentifier, getPaginationMetadata = _require2.getPaginationMetadata; function usePaginationFragment(fragmentInput, parentFragmentRef) { var fragmentNode = getFragment(fragmentInput); useStaticFragmentNodeWarning(fragmentNode, 'first argument of usePaginationFragment()'); var componentDisplayName = 'usePaginationFragment()'; var _getPaginationMetadat = getPaginationMetadata(fragmentNode, componentDisplayName), connectionPathInFragmentData = _getPaginationMetadat.connectionPathInFragmentData, paginationRequest = _getPaginationMetadat.paginationRequest, paginationMetadata = _getPaginationMetadat.paginationMetadata; var _useRefetchableFragme = useRefetchableFragmentInternal(fragmentNode, parentFragmentRef, componentDisplayName), fragmentData = _useRefetchableFragme.fragmentData, fragmentRef = _useRefetchableFragme.fragmentRef, refetch = _useRefetchableFragme.refetch; var fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef); var _useLoadMore = useLoadMore({ componentDisplayName: componentDisplayName, connectionPathInFragmentData: connectionPathInFragmentData, direction: 'backward', fragmentData: fragmentData, fragmentIdentifier: fragmentIdentifier, fragmentNode: fragmentNode, fragmentRef: fragmentRef, paginationMetadata: paginationMetadata, paginationRequest: paginationRequest }), loadPrevious = _useLoadMore[0], hasPrevious = _useLoadMore[1], isLoadingPrevious = _useLoadMore[2], disposeFetchPrevious = _useLoadMore[3]; var _useLoadMore2 = useLoadMore({ componentDisplayName: componentDisplayName, connectionPathInFragmentData: connectionPathInFragmentData, direction: 'forward', fragmentData: fragmentData, fragmentIdentifier: fragmentIdentifier, fragmentNode: fragmentNode, fragmentRef: fragmentRef, paginationMetadata: paginationMetadata, paginationRequest: paginationRequest }), loadNext = _useLoadMore2[0], hasNext = _useLoadMore2[1], isLoadingNext = _useLoadMore2[2], disposeFetchNext = _useLoadMore2[3]; var refetchPagination = useCallback(function (variables, options) { disposeFetchNext(); disposeFetchPrevious(); return refetch(variables, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, options), {}, { __environment: undefined })); }, [disposeFetchNext, disposeFetchPrevious, refetch]); if (process.env.NODE_ENV !== "production") { useDebugValue({ fragment: fragmentNode.name, data: fragmentData, hasNext: hasNext, isLoadingNext: isLoadingNext, hasPrevious: hasPrevious, isLoadingPrevious: isLoadingPrevious }); } return { data: fragmentData, loadNext: loadNext, loadPrevious: loadPrevious, hasNext: hasNext, hasPrevious: hasPrevious, isLoadingNext: isLoadingNext, isLoadingPrevious: isLoadingPrevious, refetch: refetchPagination }; } function useLoadMore(args) { var environment = useRelayEnvironment(); var _useState = useState(false), isLoadingMore = _useState[0], reallySetIsLoadingMore = _useState[1]; var setIsLoadingMore = function setIsLoadingMore(value) { var _environment$getSched; var schedule = (_environment$getSched = environment.getScheduler()) === null || _environment$getSched === void 0 ? void 0 : _environment$getSched.schedule; if (schedule) { schedule(function () { reallySetIsLoadingMore(value); }); } else { reallySetIsLoadingMore(value); } }; var observer = { start: function start() { return setIsLoadingMore(true); }, complete: function complete() { return setIsLoadingMore(false); }, error: function error() { return setIsLoadingMore(false); } }; var handleReset = function handleReset() { return setIsLoadingMore(false); }; var _useLoadMoreFunction = useLoadMoreFunction((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, args), {}, { observer: observer, onReset: handleReset })), loadMore = _useLoadMoreFunction[0], hasMore = _useLoadMoreFunction[1], disposeFetch = _useLoadMoreFunction[2]; return [loadMore, hasMore, isLoadingMore, disposeFetch]; } module.exports = usePaginationFragment;