1 | "use strict";
|
2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3 | if (k2 === undefined) k2 = k;
|
4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
5 | }) : (function(o, m, k, k2) {
|
6 | if (k2 === undefined) k2 = k;
|
7 | o[k2] = m[k];
|
8 | }));
|
9 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
10 | Object.defineProperty(o, "default", { enumerable: true, value: v });
|
11 | }) : function(o, v) {
|
12 | o["default"] = v;
|
13 | });
|
14 | var __importStar = (this && this.__importStar) || function (mod) {
|
15 | if (mod && mod.__esModule) return mod;
|
16 | var result = {};
|
17 | if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
18 | __setModuleDefault(result, mod);
|
19 | return result;
|
20 | };
|
21 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
22 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
23 | };
|
24 | Object.defineProperty(exports, "__esModule", { value: true });
|
25 | exports.createObserveContext = exports.useObserveContext = exports.calculateChangedBits = void 0;
|
26 | const react_1 = __importStar(require("react"));
|
27 |
|
28 | const invariant_1 = __importDefault(require("invariant"));
|
29 | const utils_1 = require("./utils");
|
30 | function useObserveContext(context, nextObserveState) {
|
31 | const stateKeys = getKeys(context._currentValue);
|
32 |
|
33 | let observeKeys = stateKeys;
|
34 | if (nextObserveState) {
|
35 | if (utils_1.__DEV__) {
|
36 | invariant_1.default(Array.isArray(nextObserveState), `useState: nextObserveState expected to be an Array of string but ${typeof nextObserveState} was received`);
|
37 | nextObserveState.forEach((observeKey) => {
|
38 | invariant_1.default(stateKeys.includes(observeKey), `useState: nextObserveState expected to be an Array of state keys but ${observeKey} is not one of the state`);
|
39 | });
|
40 | }
|
41 | observeKeys = nextObserveState.sort();
|
42 | }
|
43 | const observeBit = getBits(stateKeys, observeKeys);
|
44 | return readContext(context, observeBit);
|
45 | }
|
46 | exports.useObserveContext = useObserveContext;
|
47 | function getKeys(obj) {
|
48 | return Object.keys(obj).sort();
|
49 | }
|
50 | function calculateChangedBits(prev, next) {
|
51 | let changed = {};
|
52 | const keys = getKeys(next);
|
53 | if (utils_1.__DEV__) {
|
54 | invariant_1.default(keys.length < 32, `expected return state have property least than 32 but has ${keys.length} property`);
|
55 | }
|
56 | keys.forEach((key) => {
|
57 | if (prev[key] !== next[key]) {
|
58 | changed[key] = next[key];
|
59 | }
|
60 | });
|
61 | const changedKeys = getKeys(changed);
|
62 | const result = getBits(keys, changedKeys);
|
63 | return result;
|
64 | }
|
65 | exports.calculateChangedBits = calculateChangedBits;
|
66 | function getBits(keys, usage) {
|
67 | let result = 0;
|
68 | keys.forEach((key, index) => {
|
69 | if (usage.includes(key)) {
|
70 |
|
71 | result |= 1 << index % 31;
|
72 | }
|
73 | });
|
74 | return result;
|
75 | }
|
76 | const ReactCurrentDispatcher =
|
77 |
|
78 | react_1.default.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED
|
79 | .ReactCurrentDispatcher;
|
80 | function readContext(Context, observedBits) {
|
81 | const dispatcher = ReactCurrentDispatcher.current;
|
82 | if (dispatcher === null) {
|
83 | throw new Error("react-principal: useState and useDispatch may only be called from within a " +
|
84 | "component's render. They are not supported in event handlers or " +
|
85 | "lifecycle methods.");
|
86 | }
|
87 | return dispatcher.readContext(Context, observedBits);
|
88 | }
|
89 | function createObserveContext(defaultValue) {
|
90 | return react_1.createContext(defaultValue, calculateChangedBits);
|
91 | }
|
92 | exports.createObserveContext = createObserveContext;
|
93 |
|
\ | No newline at end of file |