1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
8 |
|
9 | exports.useRoot = useRoot;
|
10 | exports.useBranch = useBranch;
|
11 |
|
12 | var _react = require('react');
|
13 |
|
14 | var _react2 = _interopRequireDefault(_react);
|
15 |
|
16 | var _helpers = require('./utils/helpers');
|
17 |
|
18 | var _baobab = require('baobab');
|
19 |
|
20 | var _baobab2 = _interopRequireDefault(_baobab);
|
21 |
|
22 | var _context = require('./context');
|
23 |
|
24 | var _context2 = _interopRequireDefault(_context);
|
25 |
|
26 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
27 |
|
28 | var makeError = _baobab2.default.helpers.makeError,
|
29 | isPlainObject = _baobab2.default.type.object;
|
30 |
|
31 | function invalidMapping(name, mapping) {
|
32 | throw makeError('baobab-react/hooks.useBranch: given cursors mapping is invalid (check the "' + name + '" component).', { mapping: mapping });
|
33 | }
|
34 |
|
35 | function useRoot(tree) {
|
36 | if (!(0, _helpers.isBaobabTree)(tree)) throw makeError('baobab-react/hooks.useRoot: given tree is not a Baobab.', { target: tree });
|
37 |
|
38 | var _useState = (0, _react.useState)(function () {
|
39 | return function (_ref) {
|
40 | var children = _ref.children;
|
41 |
|
42 | return _react2.default.createElement(_context2.default.Provider, {
|
43 | value: { tree: tree }
|
44 | }, children);
|
45 | };
|
46 | }),
|
47 | _useState2 = _slicedToArray(_useState, 2),
|
48 | state = _useState2[0],
|
49 | setState = _useState2[1];
|
50 |
|
51 | (0, _react.useEffect)(function () {
|
52 | setState(function () {
|
53 | return function (_ref2) {
|
54 | var children = _ref2.children;
|
55 |
|
56 | return _react2.default.createElement(_context2.default.Provider, {
|
57 | value: { tree: tree }
|
58 | }, children);
|
59 | };
|
60 | });
|
61 | }, [tree]);
|
62 |
|
63 | return state;
|
64 | }
|
65 |
|
66 | function useBranch(cursors) {
|
67 | if (!isPlainObject(cursors) && typeof cursors !== 'function') invalidMapping(name, cursors);
|
68 |
|
69 | var context = (0, _react.useContext)(_context2.default);
|
70 |
|
71 | if (!context || !(0, _helpers.isBaobabTree)(context.tree)) throw makeError('baobab-react/hooks.useBranch: tree is not available.');
|
72 |
|
73 | var _useState3 = (0, _react.useState)(function () {
|
74 | var mapping = typeof cursors === 'function' ? cursors(context) : cursors;
|
75 | var obj = context.tree.project(mapping);
|
76 | obj.dispatch = function (fn) {
|
77 | for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
78 | args[_key - 1] = arguments[_key];
|
79 | }
|
80 |
|
81 | return fn.apply(undefined, [context.tree].concat(args));
|
82 | };
|
83 | return obj;
|
84 | }),
|
85 | _useState4 = _slicedToArray(_useState3, 2),
|
86 | state = _useState4[0],
|
87 | setState = _useState4[1];
|
88 |
|
89 | (0, _react.useEffect)(function () {
|
90 | var mapping = typeof cursors === 'function' ? cursors(context) : cursors;
|
91 | var watcher = context.tree.watch(mapping);
|
92 |
|
93 | watcher.on('update', function () {
|
94 | var obj = watcher.get();
|
95 | obj.dispatch = function (fn) {
|
96 | for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
97 | args[_key2 - 1] = arguments[_key2];
|
98 | }
|
99 |
|
100 | return fn.apply(undefined, [context.tree].concat(args));
|
101 | };
|
102 | setState(obj);
|
103 | });
|
104 |
|
105 | return function () {
|
106 | return watcher.release();
|
107 | };
|
108 | }, [cursors]);
|
109 |
|
110 | return state;
|
111 | } |
\ | No newline at end of file |