createActorContext.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. var __assign = (this && this.__assign) || function () {
  3. __assign = Object.assign || function(t) {
  4. for (var s, i = 1, n = arguments.length; i < n; i++) {
  5. s = arguments[i];
  6. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  7. t[p] = s[p];
  8. }
  9. return t;
  10. };
  11. return __assign.apply(this, arguments);
  12. };
  13. Object.defineProperty(exports, "__esModule", { value: true });
  14. exports.createActorContext = void 0;
  15. var React = require("react");
  16. var useInterpret_1 = require("./useInterpret");
  17. var useActor_1 = require("./useActor");
  18. var useSelector_1 = require("./useSelector");
  19. function createActorContext(machine, interpreterOptions, observerOrListener) {
  20. var ReactContext = React.createContext(null);
  21. var OriginalProvider = ReactContext.Provider;
  22. function Provider(_a) {
  23. var children = _a.children, _b = _a.machine, providedMachine = _b === void 0 ? machine : _b, options = _a.options;
  24. var actor = (0, useInterpret_1.useInterpret)(providedMachine, __assign(__assign({}, interpreterOptions), options), observerOrListener);
  25. return React.createElement(OriginalProvider, { value: actor }, children);
  26. }
  27. Provider.displayName = "ActorProvider(".concat(machine.id, ")");
  28. function useContext() {
  29. var actor = React.useContext(ReactContext);
  30. if (!actor) {
  31. throw new Error("You used a hook from \"".concat(Provider.displayName, "\" but it's not inside a <").concat(Provider.displayName, "> component."));
  32. }
  33. return actor;
  34. }
  35. function useActor() {
  36. var actor = useContext();
  37. return (0, useActor_1.useActor)(actor);
  38. }
  39. function useSelector(selector, compare) {
  40. var actor = useContext();
  41. return (0, useSelector_1.useSelector)(actor, selector, compare);
  42. }
  43. return {
  44. Provider: Provider,
  45. useActorRef: useContext,
  46. useActor: useActor,
  47. useSelector: useSelector
  48. };
  49. }
  50. exports.createActorContext = createActorContext;