UNPKG

@future-widget-lab/react-context-provider

Version:

A helper for creating React providers with an associated custom hook.

80 lines (72 loc) 2.17 kB
'use strict'; var React = require('react'); function _interopNamespaceDefault(e) { var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return n; } var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React); function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } /** * @description * Use this helper to create a hook that uses a specific context. */ var createContextHook = function createContextHook(options) { var name = options.name, context = options.context; var useHook = function useHook() { var provided = React__namespace.useContext(context); if (!provided) { throw new Error("Trying to use " + name + " hook out of its context."); } return provided; }; Object.defineProperty(useHook, 'name', { value: "use-" + name + "-context-provider" }); return useHook; }; var _excluded = ["children"]; var createContextProvider = function createContextProvider(options) { var name = options.name, useGetState = options.useGetState; var context = React__namespace.createContext({}); var ContextProvider = function ContextProvider(_ref) { var children = _ref.children, rest = _objectWithoutPropertiesLoose(_ref, _excluded); var state = useGetState(rest); return React__namespace.createElement(context.Provider, { value: state }, typeof children === 'function' ? children(state) : children); }; var hook = createContextHook({ name: name, context: context }); ContextProvider.displayName = name + "-context-provider"; return { ContextProvider: ContextProvider, hook: hook }; }; exports.createContextProvider = createContextProvider; //# sourceMappingURL=react-context-provider.cjs.development.js.map