UNPKG

react-query

Version:

Hooks for managing, caching and syncing asynchronous and remote data in React

106 lines (85 loc) 3.37 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.dehydrate = dehydrate; exports.hydrate = hydrate; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); // TYPES // FUNCTIONS function dehydrateMutation(mutation) { return { mutationKey: mutation.options.mutationKey, state: mutation.state }; } // Most config is not dehydrated but instead meant to configure again when // consuming the de/rehydrated data, typically with useQuery on the client. // Sometimes it might make sense to prefetch data on the server and include // in the html-payload, but not consume it on the initial render. function dehydrateQuery(query) { return { state: query.state, queryKey: query.queryKey, queryHash: query.queryHash }; } function defaultShouldDehydrateMutation(mutation) { return mutation.state.isPaused; } function defaultShouldDehydrateQuery(query) { return query.state.status === 'success'; } function dehydrate(client, options) { var _options, _options2; options = options || {}; var mutations = []; var queries = []; if (((_options = options) == null ? void 0 : _options.dehydrateMutations) !== false) { var shouldDehydrateMutation = options.shouldDehydrateMutation || defaultShouldDehydrateMutation; client.getMutationCache().getAll().forEach(function (mutation) { if (shouldDehydrateMutation(mutation)) { mutations.push(dehydrateMutation(mutation)); } }); } if (((_options2 = options) == null ? void 0 : _options2.dehydrateQueries) !== false) { var shouldDehydrateQuery = options.shouldDehydrateQuery || defaultShouldDehydrateQuery; client.getQueryCache().getAll().forEach(function (query) { if (shouldDehydrateQuery(query)) { queries.push(dehydrateQuery(query)); } }); } return { mutations: mutations, queries: queries }; } function hydrate(client, dehydratedState, options) { if (typeof dehydratedState !== 'object' || dehydratedState === null) { return; } var mutationCache = client.getMutationCache(); var queryCache = client.getQueryCache(); var mutations = dehydratedState.mutations || []; var queries = dehydratedState.queries || []; mutations.forEach(function (dehydratedMutation) { var _options$defaultOptio; mutationCache.build(client, (0, _extends2.default)({}, options == null ? void 0 : (_options$defaultOptio = options.defaultOptions) == null ? void 0 : _options$defaultOptio.mutations, { mutationKey: dehydratedMutation.mutationKey }), dehydratedMutation.state); }); queries.forEach(function (dehydratedQuery) { var _options$defaultOptio2; var query = queryCache.get(dehydratedQuery.queryHash); // Do not hydrate if an existing query exists with newer data if (query) { if (query.state.dataUpdatedAt < dehydratedQuery.state.dataUpdatedAt) { query.setState(dehydratedQuery.state); } return; } // Restore query queryCache.build(client, (0, _extends2.default)({}, options == null ? void 0 : (_options$defaultOptio2 = options.defaultOptions) == null ? void 0 : _options$defaultOptio2.queries, { queryKey: dehydratedQuery.queryKey, queryHash: dehydratedQuery.queryHash }), dehydratedQuery.state); }); }