UNPKG

@data-client/react

Version:

Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch

67 lines (61 loc) 10.5 kB
'use client'; import { initialState as defaultState, Controller as DataController, applyManager, initManager } from '@data-client/core'; import React, { useCallback, useMemo, useRef } from 'react'; import DataStore from './DataStore.js'; import { getDefaultManagers } from './getDefaultManagers.js'; import { SSR } from './LegacyReact.js'; import { renderDevButton } from './renderDevButton.js'; import { ControllerContext } from '../context.js'; import { DevToolsManager } from '../managers/index.js'; import GCPolicy from '../state/GCPolicy.js'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; /** * Manages state, providing all context needed to use the hooks. * @see https://dataclient.io/docs/api/DataProvider */ export default function DataProvider({ children, managers, gcPolicy, initialState = defaultState, Controller = DataController, devButton = 'bottom-right' }) { /* istanbul ignore else */ if (process.env.NODE_ENV !== 'production' && SSR) { console.warn(`DataProvider from @data-client/react does not update while doing SSR. See https://dataclient.io/docs/guides/ssr.`); } const gcRef = useRef(gcPolicy); if (!gcRef.current) gcRef.current = new GCPolicy(); // contents of this component expected to be relatively stable const controllerRef = useRef(undefined); if (!controllerRef.current) controllerRef.current = new Controller({ gcPolicy: gcRef.current }); //TODO: bind all methods so destructuring works const managersRef = useRef(managers); if (!managersRef.current) managersRef.current = getDefaultManagers(); // run in a useEffect in DataStore // eslint-disable-next-line react-hooks/exhaustive-deps const mgrEffect = useCallback(initManager(managersRef.current, controllerRef.current, initialState), // we don't support initialState changes managersRef.current); // Makes manager middleware compatible with redux-style middleware (by a wrapper enhancement to provide controller API) const middlewares = useMemo(() => applyManager(managersRef.current, controllerRef.current), // eslint-disable-next-line react-hooks/exhaustive-deps managersRef.current); // only include if they have devtools integrated const hasDevManager = !!managersRef.current.find(manager => manager instanceof DevToolsManager); return /*#__PURE__*/_jsxs(ControllerContext.Provider, { value: controllerRef.current, children: [/*#__PURE__*/_jsx(DataStore, { mgrEffect: mgrEffect, middlewares: middlewares, initialState: initialState, controller: controllerRef.current, children: children }), renderDevButton(devButton, hasDevManager)] }); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbml0aWFsU3RhdGUiLCJkZWZhdWx0U3RhdGUiLCJDb250cm9sbGVyIiwiRGF0YUNvbnRyb2xsZXIiLCJhcHBseU1hbmFnZXIiLCJpbml0TWFuYWdlciIsIlJlYWN0IiwidXNlQ2FsbGJhY2siLCJ1c2VNZW1vIiwidXNlUmVmIiwiRGF0YVN0b3JlIiwiZ2V0RGVmYXVsdE1hbmFnZXJzIiwiU1NSIiwicmVuZGVyRGV2QnV0dG9uIiwiQ29udHJvbGxlckNvbnRleHQiLCJEZXZUb29sc01hbmFnZXIiLCJHQ1BvbGljeSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJEYXRhUHJvdmlkZXIiLCJjaGlsZHJlbiIsIm1hbmFnZXJzIiwiZ2NQb2xpY3kiLCJkZXZCdXR0b24iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb25zb2xlIiwid2FybiIsImdjUmVmIiwiY3VycmVudCIsImNvbnRyb2xsZXJSZWYiLCJ1bmRlZmluZWQiLCJtYW5hZ2Vyc1JlZiIsIm1nckVmZmVjdCIsIm1pZGRsZXdhcmVzIiwiaGFzRGV2TWFuYWdlciIsImZpbmQiLCJtYW5hZ2VyIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImNvbnRyb2xsZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9EYXRhUHJvdmlkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmltcG9ydCB7XG4gIGluaXRpYWxTdGF0ZSBhcyBkZWZhdWx0U3RhdGUsXG4gIENvbnRyb2xsZXIgYXMgRGF0YUNvbnRyb2xsZXIsXG4gIGFwcGx5TWFuYWdlcixcbiAgaW5pdE1hbmFnZXIsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9jb3JlJztcbmltcG9ydCB0eXBlIHsgU3RhdGUsIE1hbmFnZXIsIEdDSW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IERhdGFTdG9yZSBmcm9tICcuL0RhdGFTdG9yZS5qcyc7XG5pbXBvcnQgdHlwZSB7IERldlRvb2xzUG9zaXRpb24gfSBmcm9tICcuL0RldlRvb2xzQnV0dG9uLmpzJztcbmltcG9ydCB7IGdldERlZmF1bHRNYW5hZ2VycyB9IGZyb20gJy4vZ2V0RGVmYXVsdE1hbmFnZXJzLmpzJztcbmltcG9ydCB7IFNTUiB9IGZyb20gJy4vTGVnYWN5UmVhY3QuanMnO1xuaW1wb3J0IHsgcmVuZGVyRGV2QnV0dG9uIH0gZnJvbSAnLi9yZW5kZXJEZXZCdXR0b24uanMnO1xuaW1wb3J0IHsgQ29udHJvbGxlckNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0LmpzJztcbmltcG9ydCB7IERldlRvb2xzTWFuYWdlciB9IGZyb20gJy4uL21hbmFnZXJzL2luZGV4LmpzJztcbmltcG9ydCBHQ1BvbGljeSBmcm9tICcuLi9zdGF0ZS9HQ1BvbGljeS5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIG1hbmFnZXJzPzogTWFuYWdlcltdO1xuICBpbml0aWFsU3RhdGU/OiBTdGF0ZTx1bmtub3duPjtcbiAgQ29udHJvbGxlcj86IHR5cGVvZiBEYXRhQ29udHJvbGxlcjtcbiAgZ2NQb2xpY3k/OiBHQ0ludGVyZmFjZTtcbiAgZGV2QnV0dG9uPzogRGV2VG9vbHNQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTWFuYWdlcyBzdGF0ZSwgcHJvdmlkaW5nIGFsbCBjb250ZXh0IG5lZWRlZCB0byB1c2UgdGhlIGhvb2tzLlxuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvRGF0YVByb3ZpZGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGFQcm92aWRlcih7XG4gIGNoaWxkcmVuLFxuICBtYW5hZ2VycyxcbiAgZ2NQb2xpY3ksXG4gIGluaXRpYWxTdGF0ZSA9IGRlZmF1bHRTdGF0ZSBhcyBTdGF0ZTx1bmtub3duPixcbiAgQ29udHJvbGxlciA9IERhdGFDb250cm9sbGVyLFxuICBkZXZCdXR0b24gPSAnYm90dG9tLXJpZ2h0Jyxcbn06IFByb3ZpZGVyUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIFNTUikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBEYXRhUHJvdmlkZXIgZnJvbSBAZGF0YS1jbGllbnQvcmVhY3QgZG9lcyBub3QgdXBkYXRlIHdoaWxlIGRvaW5nIFNTUi5cblNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9ndWlkZXMvc3NyLmAsXG4gICAgKTtcbiAgfVxuICBjb25zdCBnY1JlZjogUmVhY3QuUmVmT2JqZWN0PEdDUG9saWN5PiA9IHVzZVJlZjxhbnk+KGdjUG9saWN5KTtcbiAgaWYgKCFnY1JlZi5jdXJyZW50KSBnY1JlZi5jdXJyZW50ID0gbmV3IEdDUG9saWN5KCk7XG5cbiAgLy8gY29udGVudHMgb2YgdGhpcyBjb21wb25lbnQgZXhwZWN0ZWQgdG8gYmUgcmVsYXRpdmVseSBzdGFibGVcbiAgY29uc3QgY29udHJvbGxlclJlZjogUmVhY3QuUmVmT2JqZWN0PERhdGFDb250cm9sbGVyPiA9IHVzZVJlZjxhbnk+KHVuZGVmaW5lZCk7XG4gIGlmICghY29udHJvbGxlclJlZi5jdXJyZW50KVxuICAgIGNvbnRyb2xsZXJSZWYuY3VycmVudCA9IG5ldyBDb250cm9sbGVyKHsgZ2NQb2xpY3k6IGdjUmVmLmN1cnJlbnQgfSk7XG4gIC8vVE9ETzogYmluZCBhbGwgbWV0aG9kcyBzbyBkZXN0cnVjdHVyaW5nIHdvcmtzXG5cbiAgY29uc3QgbWFuYWdlcnNSZWY6IFJlYWN0LlJlZk9iamVjdDxNYW5hZ2VyW10+ID0gdXNlUmVmPGFueT4obWFuYWdlcnMpO1xuICBpZiAoIW1hbmFnZXJzUmVmLmN1cnJlbnQpIG1hbmFnZXJzUmVmLmN1cnJlbnQgPSBnZXREZWZhdWx0TWFuYWdlcnMoKTtcblxuICAvLyBydW4gaW4gYSB1c2VFZmZlY3QgaW4gRGF0YVN0b3JlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgY29uc3QgbWdyRWZmZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgaW5pdE1hbmFnZXIobWFuYWdlcnNSZWYuY3VycmVudCwgY29udHJvbGxlclJlZi5jdXJyZW50LCBpbml0aWFsU3RhdGUpLFxuICAgIC8vIHdlIGRvbid0IHN1cHBvcnQgaW5pdGlhbFN0YXRlIGNoYW5nZXNcbiAgICBtYW5hZ2Vyc1JlZi5jdXJyZW50LFxuICApO1xuXG4gIC8vIE1ha2VzIG1hbmFnZXIgbWlkZGxld2FyZSBjb21wYXRpYmxlIHdpdGggcmVkdXgtc3R5bGUgbWlkZGxld2FyZSAoYnkgYSB3cmFwcGVyIGVuaGFuY2VtZW50IHRvIHByb3ZpZGUgY29udHJvbGxlciBBUEkpXG4gIGNvbnN0IG1pZGRsZXdhcmVzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBhcHBseU1hbmFnZXIobWFuYWdlcnNSZWYuY3VycmVudCwgY29udHJvbGxlclJlZi5jdXJyZW50KSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgbWFuYWdlcnNSZWYuY3VycmVudCxcbiAgKTtcblxuICAvLyBvbmx5IGluY2x1ZGUgaWYgdGhleSBoYXZlIGRldnRvb2xzIGludGVncmF0ZWRcbiAgY29uc3QgaGFzRGV2TWFuYWdlciA9ICEhbWFuYWdlcnNSZWYuY3VycmVudC5maW5kKFxuICAgIG1hbmFnZXIgPT4gbWFuYWdlciBpbnN0YW5jZW9mIERldlRvb2xzTWFuYWdlcixcbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8Q29udHJvbGxlckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRyb2xsZXJSZWYuY3VycmVudH0+XG4gICAgICA8RGF0YVN0b3JlXG4gICAgICAgIG1nckVmZmVjdD17bWdyRWZmZWN0fVxuICAgICAgICBtaWRkbGV3YXJlcz17bWlkZGxld2FyZXN9XG4gICAgICAgIGluaXRpYWxTdGF0ZT17aW5pdGlhbFN0YXRlfVxuICAgICAgICBjb250cm9sbGVyPXtjb250cm9sbGVyUmVmLmN1cnJlbnR9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvRGF0YVN0b3JlPlxuICAgICAge3JlbmRlckRldkJ1dHRvbihkZXZCdXR0b24sIGhhc0Rldk1hbmFnZXIpfVxuICAgIDwvQ29udHJvbGxlckNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7O0FBQ1osU0FDRUEsWUFBWSxJQUFJQyxZQUFZLEVBQzVCQyxVQUFVLElBQUlDLGNBQWMsRUFDNUJDLFlBQVksRUFDWkMsV0FBVyxRQUNOLG1CQUFtQjtBQUUxQixPQUFPQyxLQUFLLElBQUlDLFdBQVcsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUczRCxPQUFPQyxTQUFTLE1BQU0sZ0JBQWdCO0FBRXRDLFNBQVNDLGtCQUFrQixRQUFRLHlCQUF5QjtBQUM1RCxTQUFTQyxHQUFHLFFBQVEsa0JBQWtCO0FBQ3RDLFNBQVNDLGVBQWUsUUFBUSxzQkFBc0I7QUFDdEQsU0FBU0MsaUJBQWlCLFFBQVEsZUFBZTtBQUNqRCxTQUFTQyxlQUFlLFFBQVEsc0JBQXNCO0FBQ3RELE9BQU9DLFFBQVEsTUFBTSxzQkFBc0I7QUFBQyxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBO0FBVzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTQyxZQUFZQSxDQUFDO0VBQ25DQyxRQUFRO0VBQ1JDLFFBQVE7RUFDUkMsUUFBUTtFQUNSeEIsWUFBWSxHQUFHQyxZQUE4QjtFQUM3Q0MsVUFBVSxHQUFHQyxjQUFjO0VBQzNCc0IsU0FBUyxHQUFHO0FBQ0MsQ0FBQyxFQUFlO0VBQzdCO0VBQ0EsSUFBSUMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsS0FBSyxZQUFZLElBQUloQixHQUFHLEVBQUU7SUFDaERpQixPQUFPLENBQUNDLElBQUksQ0FDVjtBQUNOLDJDQUNJLENBQUM7RUFDSDtFQUNBLE1BQU1DLEtBQWdDLEdBQUd0QixNQUFNLENBQU1lLFFBQVEsQ0FBQztFQUM5RCxJQUFJLENBQUNPLEtBQUssQ0FBQ0MsT0FBTyxFQUFFRCxLQUFLLENBQUNDLE9BQU8sR0FBRyxJQUFJaEIsUUFBUSxDQUFDLENBQUM7O0VBRWxEO0VBQ0EsTUFBTWlCLGFBQThDLEdBQUd4QixNQUFNLENBQU15QixTQUFTLENBQUM7RUFDN0UsSUFBSSxDQUFDRCxhQUFhLENBQUNELE9BQU8sRUFDeEJDLGFBQWEsQ0FBQ0QsT0FBTyxHQUFHLElBQUk5QixVQUFVLENBQUM7SUFBRXNCLFFBQVEsRUFBRU8sS0FBSyxDQUFDQztFQUFRLENBQUMsQ0FBQztFQUNyRTs7RUFFQSxNQUFNRyxXQUF1QyxHQUFHMUIsTUFBTSxDQUFNYyxRQUFRLENBQUM7RUFDckUsSUFBSSxDQUFDWSxXQUFXLENBQUNILE9BQU8sRUFBRUcsV0FBVyxDQUFDSCxPQUFPLEdBQUdyQixrQkFBa0IsQ0FBQyxDQUFDOztFQUVwRTtFQUNBO0VBQ0EsTUFBTXlCLFNBQVMsR0FBRzdCLFdBQVcsQ0FDM0JGLFdBQVcsQ0FBQzhCLFdBQVcsQ0FBQ0gsT0FBTyxFQUFFQyxhQUFhLENBQUNELE9BQU8sRUFBRWhDLFlBQVksQ0FBQztFQUNyRTtFQUNBbUMsV0FBVyxDQUFDSCxPQUNkLENBQUM7O0VBRUQ7RUFDQSxNQUFNSyxXQUFXLEdBQUc3QixPQUFPLENBQ3pCLE1BQU1KLFlBQVksQ0FBQytCLFdBQVcsQ0FBQ0gsT0FBTyxFQUFFQyxhQUFhLENBQUNELE9BQU8sQ0FBQztFQUM5RDtFQUNBRyxXQUFXLENBQUNILE9BQ2QsQ0FBQzs7RUFFRDtFQUNBLE1BQU1NLGFBQWEsR0FBRyxDQUFDLENBQUNILFdBQVcsQ0FBQ0gsT0FBTyxDQUFDTyxJQUFJLENBQzlDQyxPQUFPLElBQUlBLE9BQU8sWUFBWXpCLGVBQ2hDLENBQUM7RUFDRCxvQkFDRUssS0FBQSxDQUFDTixpQkFBaUIsQ0FBQzJCLFFBQVE7SUFBQ0MsS0FBSyxFQUFFVCxhQUFhLENBQUNELE9BQVE7SUFBQVYsUUFBQSxnQkFDdkRKLElBQUEsQ0FBQ1IsU0FBUztNQUNSMEIsU0FBUyxFQUFFQSxTQUFVO01BQ3JCQyxXQUFXLEVBQUVBLFdBQVk7TUFDekJyQyxZQUFZLEVBQUVBLFlBQWE7TUFDM0IyQyxVQUFVLEVBQUVWLGFBQWEsQ0FBQ0QsT0FBUTtNQUFBVixRQUFBLEVBRWpDQTtJQUFRLENBQ0EsQ0FBQyxFQUNYVCxlQUFlLENBQUNZLFNBQVMsRUFBRWEsYUFBYSxDQUFDO0VBQUEsQ0FDaEIsQ0FBQztBQUVqQyIsImlnbm9yZUxpc3QiOltdfQ==