1 | var __read = (this && this.__read) || function (o, n) {
|
2 | var m = typeof Symbol === "function" && o[Symbol.iterator];
|
3 | if (!m) return o;
|
4 | var i = m.call(o), r, ar = [], e;
|
5 | try {
|
6 | while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
7 | }
|
8 | catch (error) { e = { error: error }; }
|
9 | finally {
|
10 | try {
|
11 | if (r && !r.done && (m = i["return"])) m.call(i);
|
12 | }
|
13 | finally { if (e) throw e.error; }
|
14 | }
|
15 | return ar;
|
16 | };
|
17 | import { Reaction } from "mobx";
|
18 | import React from "react";
|
19 | import { printDebugValue } from "./utils/printDebugValue";
|
20 | import { addReactionToTrack, recordReactionAsCommitted } from "./utils/reactionCleanupTracking";
|
21 | import { isUsingStaticRendering } from "./staticRendering";
|
22 | function observerComponentNameFor(baseComponentName) {
|
23 | return "observer".concat(baseComponentName);
|
24 | }
|
25 |
|
26 |
|
27 |
|
28 | var ObjectToBeRetainedByReact = (function () {
|
29 | function ObjectToBeRetainedByReact() {
|
30 | }
|
31 | return ObjectToBeRetainedByReact;
|
32 | }());
|
33 | function objectToBeRetainedByReactFactory() {
|
34 | return new ObjectToBeRetainedByReact();
|
35 | }
|
36 | export function useObserver(fn, baseComponentName) {
|
37 | if (baseComponentName === void 0) { baseComponentName = "observed"; }
|
38 | if (isUsingStaticRendering()) {
|
39 | return fn();
|
40 | }
|
41 | var _a = __read(React.useState(objectToBeRetainedByReactFactory), 1), objectRetainedByReact = _a[0];
|
42 |
|
43 | var _b = __read(React.useState(), 2), setState = _b[1];
|
44 | var forceUpdate = function () { return setState([]); };
|
45 |
|
46 |
|
47 |
|
48 | var reactionTrackingRef = React.useRef(null);
|
49 | if (!reactionTrackingRef.current) {
|
50 |
|
51 |
|
52 | var newReaction = new Reaction(observerComponentNameFor(baseComponentName), function () {
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 | if (trackingData_1.mounted) {
|
59 |
|
60 | forceUpdate();
|
61 | }
|
62 | else {
|
63 |
|
64 |
|
65 | trackingData_1.changedBeforeMount = true;
|
66 | }
|
67 | });
|
68 | var trackingData_1 = addReactionToTrack(reactionTrackingRef, newReaction, objectRetainedByReact);
|
69 | }
|
70 | var reaction = reactionTrackingRef.current.reaction;
|
71 | React.useDebugValue(reaction, printDebugValue);
|
72 | React.useEffect(function () {
|
73 |
|
74 | recordReactionAsCommitted(reactionTrackingRef);
|
75 | if (reactionTrackingRef.current) {
|
76 |
|
77 |
|
78 |
|
79 | reactionTrackingRef.current.mounted = true;
|
80 |
|
81 | if (reactionTrackingRef.current.changedBeforeMount) {
|
82 | reactionTrackingRef.current.changedBeforeMount = false;
|
83 | forceUpdate();
|
84 | }
|
85 | }
|
86 | else {
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 | reactionTrackingRef.current = {
|
93 | reaction: new Reaction(observerComponentNameFor(baseComponentName), function () {
|
94 |
|
95 | forceUpdate();
|
96 | }),
|
97 | mounted: true,
|
98 | changedBeforeMount: false,
|
99 | cleanAt: Infinity
|
100 | };
|
101 | forceUpdate();
|
102 | }
|
103 | return function () {
|
104 | reactionTrackingRef.current.reaction.dispose();
|
105 | reactionTrackingRef.current = null;
|
106 | };
|
107 | }, []);
|
108 |
|
109 |
|
110 |
|
111 | var rendering;
|
112 | var exception;
|
113 | reaction.track(function () {
|
114 | try {
|
115 | rendering = fn();
|
116 | }
|
117 | catch (e) {
|
118 | exception = e;
|
119 | }
|
120 | });
|
121 | if (exception) {
|
122 | throw exception;
|
123 | }
|
124 | return rendering;
|
125 | }
|
126 |
|
\ | No newline at end of file |