@mic-rexjs/usecases-react 1.7.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +1 -1
  2. package/dist/index.min.js +1 -1
  3. package/es/configs/defaultUseCaseContext/index.d.ts +2 -3
  4. package/es/configs/defaultUseCaseContext/index.js +1 -1
  5. package/es/configs/defaultUseCaseContext/types.d.ts +11 -3
  6. package/es/configs/usecaseContextMap/types.d.ts +2 -5
  7. package/es/enums/UseCaseModes/index.d.ts +6 -0
  8. package/es/enums/UseCaseModes/index.js +7 -0
  9. package/es/hooks/useChangeCallbackCollection/index.d.ts +3 -0
  10. package/es/hooks/useChangeCallbackCollection/index.js +29 -0
  11. package/es/hooks/useGlobalUseCase/index.d.ts +2 -0
  12. package/es/hooks/useGlobalUseCase/index.js +11 -0
  13. package/es/hooks/useGlobalUseCase/index.test.js +71 -0
  14. package/es/hooks/useGlobalUseCase/types.d.ts +12 -0
  15. package/es/hooks/useGlobalUseCase/types.js +1 -0
  16. package/es/hooks/useProvider/index.d.ts +3 -5
  17. package/es/hooks/useProvider/index.js +25 -15
  18. package/es/hooks/useProvider/types.d.ts +5 -1
  19. package/es/hooks/useStatelessUseCase/index.d.ts +2 -0
  20. package/es/hooks/useStatelessUseCase/index.js +8 -0
  21. package/es/hooks/useStatelessUseCase/index.test.d.ts +1 -0
  22. package/es/hooks/useStatelessUseCase/index.test.js +75 -0
  23. package/es/hooks/useStatelessUseCase/types.d.ts +5 -0
  24. package/es/hooks/useStatelessUseCase/types.js +1 -0
  25. package/es/hooks/useUseCase/index.js +27 -29
  26. package/es/hooks/useUseCase/index.test.js +273 -202
  27. package/es/hooks/useUseCase/types.d.ts +55 -8
  28. package/es/hooks/useUseCaseContext/index.d.ts +2 -2
  29. package/es/hooks/useUseCaseContext/index.js +1 -1
  30. package/es/index.d.ts +2 -0
  31. package/es/index.js +2 -0
  32. package/es/methods/getRootEntity/index.d.ts +2 -1
  33. package/es/methods/getRootEntity/index.js +6 -5
  34. package/es/methods/initEntityReducers/index.js +1 -1
  35. package/es/methods/toMaxArguments/index.d.ts +3 -0
  36. package/es/methods/toMaxArguments/index.js +28 -0
  37. package/es/methods/triggerCallbacks/index.d.ts +2 -3
  38. package/es/methods/triggerCallbacks/index.js +3 -12
  39. package/lib/configs/defaultUseCaseContext/index.js +1 -1
  40. package/lib/enums/UseCaseModes/index.js +14 -0
  41. package/lib/hooks/useChangeCallbackCollection/index.js +37 -0
  42. package/lib/hooks/useGlobalUseCase/index.js +25 -0
  43. package/lib/hooks/useGlobalUseCase/index.test.js +78 -0
  44. package/lib/hooks/useProvider/index.js +30 -20
  45. package/lib/hooks/useStatelessUseCase/index.js +22 -0
  46. package/lib/hooks/useStatelessUseCase/index.test.js +78 -0
  47. package/lib/hooks/useStatelessUseCase/types.js +5 -0
  48. package/lib/hooks/useUseCase/index.js +40 -31
  49. package/lib/hooks/useUseCase/index.test.js +380 -281
  50. package/lib/hooks/useUseCaseContext/index.js +1 -1
  51. package/lib/index.js +15 -1
  52. package/lib/methods/getRootEntity/index.js +6 -5
  53. package/lib/methods/initEntityReducers/index.js +2 -3
  54. package/lib/methods/toMaxArguments/index.js +25 -0
  55. package/lib/methods/triggerCallbacks/index.js +3 -13
  56. package/package.json +1 -1
  57. package/es/hooks/useOptionsRefCollection/index.d.ts +0 -3
  58. package/es/hooks/useOptionsRefCollection/index.js +0 -22
  59. package/es/hooks/useOptionsRefCollection/types.d.ts +0 -2
  60. package/lib/hooks/useOptionsRefCollection/index.js +0 -29
  61. /package/es/hooks/{useOptionsRefCollection/types.js → useGlobalUseCase/index.test.d.ts} +0 -0
  62. /package/lib/hooks/{useOptionsRefCollection → useGlobalUseCase}/types.js +0 -0
@@ -16,6 +16,7 @@ var _react = require("@testing-library/react");
16
16
  var _ = require(".");
17
17
  var _ahooks = require("ahooks");
18
18
  var _react2 = require("react");
19
+ var _UseCaseModes = require("../../enums/UseCaseModes");
19
20
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20
21
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
22
  function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
@@ -23,6 +24,7 @@ function AsyncFromSyncIterator(s) { function AsyncFromSyncIteratorContinuation(r
23
24
  var EXT_1 = '.png';
24
25
  var EXT_2 = '.jpg';
25
26
  var PATH_1 = "hello".concat(EXT_1);
27
+ var PATH_2 = "hello".concat(EXT_2);
26
28
  var PARENT_BUTTON_TEXT = 'parent button';
27
29
  var CHILD_BUTTON_TEXT = 'child button';
28
30
  var defaultFile = {
@@ -141,7 +143,7 @@ var Child = function Child(_ref2) {
141
143
  path = _ref3.path,
142
144
  ext = _ref3.ext;
143
145
  var onClick = function onClick() {
144
- setPath('');
146
+ setPath(PATH_2);
145
147
  };
146
148
  var undefinedEntity = (0, _ahooks.useMemoizedFn)(function () {
147
149
  onUndefinedEntity === null || onUndefinedEntity === void 0 ? void 0 : onUndefinedEntity();
@@ -171,12 +173,10 @@ var Child = function Child(_ref2) {
171
173
  };
172
174
  var Parent = function Parent(_ref4) {
173
175
  var children = _ref4.children,
174
- stateless = _ref4.stateless,
176
+ mode = _ref4.mode,
175
177
  onUpdate = _ref4.onUpdate,
176
178
  onSetPath = _ref4.onSetPath;
177
- var _useUseCase3 = (0, _.useUseCase)(defaultFile, fileUseCase, {
178
- stateless: stateless
179
- }),
179
+ var _useUseCase3 = (0, _.useUseCase)(defaultFile, fileUseCase, mode),
180
180
  _useUseCase4 = (0, _slicedToArray2["default"])(_useUseCase3, 3),
181
181
  _useUseCase4$ = _useUseCase4[0],
182
182
  path = _useUseCase4$.path,
@@ -243,10 +243,10 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
243
243
  subtractionReducer.mockClear();
244
244
  });
245
245
  (0, _globals.describe)('useUseCase', function () {
246
- (0, _globals.describe)('`useUseCase` should work with 2+ arguments on provider mode', function () {
246
+ _globals.describe.each([void 0, _UseCaseModes.UseCaseModes.Normal, _UseCaseModes.UseCaseModes.Global])('[mode=%s]: `useUseCase` should work the same as `useRootCoreCollection`', function (mode) {
247
247
  (0, _globals.test)('check `context.length`', function () {
248
248
  var _renderHook = (0, _react.renderHook)(function () {
249
- return (0, _.useUseCase)(defaultFile, fileUseCase);
249
+ return (0, _.useUseCase)(defaultFile, fileUseCase, mode);
250
250
  }),
251
251
  result = _renderHook.result;
252
252
  var cores = result.current;
@@ -254,7 +254,7 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
254
254
  });
255
255
  (0, _globals.test)('`entity` should equal `defaultFile`', function () {
256
256
  var _renderHook2 = (0, _react.renderHook)(function () {
257
- return (0, _.useUseCase)(defaultFile, fileUseCase);
257
+ return (0, _.useUseCase)(defaultFile, fileUseCase, mode);
258
258
  }),
259
259
  result = _renderHook2.result;
260
260
  var cores = result.current;
@@ -582,16 +582,14 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
582
582
  _react.fireEvent.click(_react.screen.getByText(updateButtonText));
583
583
  (0, _globals.expect)(addReducer).toHaveBeenCalledTimes(3);
584
584
  });
585
- (0, _globals.test)('`options.stateless` should not generate new reducers when `yeild entity`', function () {
585
+ (0, _globals.test)('stateless mode should not generate new reducers when `yeild entity`', function () {
586
586
  var onUpdate = _globals.jest.fn();
587
587
  var _renderHook12 = (0, _react.renderHook)(function () {
588
588
  var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultFile;
589
589
  (0, _ahooks.useUpdateEffect)(function () {
590
590
  onUpdate();
591
591
  });
592
- return (0, _.useUseCase)(file, fileUseCase, {
593
- stateless: true
594
- });
592
+ return (0, _.useUseCase)(file, fileUseCase, _UseCaseModes.UseCaseModes.Stateless);
595
593
  }),
596
594
  result = _renderHook12.result,
597
595
  rerender = _renderHook12.rerender;
@@ -608,15 +606,13 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
608
606
  (0, _globals.expect)(result.current[0].path).toBe(PATH_1);
609
607
  (0, _globals.expect)(result.current[1].setPath).not.toBe(setPath);
610
608
  });
611
- (0, _globals.test)('`options.stateless` should not trigger update when after `yield entity`', function () {
609
+ (0, _globals.test)('stateless mode should not trigger update when after `yield entity`', function () {
612
610
  var onUpdate = _globals.jest.fn();
613
611
  var _renderHook13 = (0, _react.renderHook)(function () {
614
612
  (0, _ahooks.useUpdateEffect)(function () {
615
613
  onUpdate();
616
614
  });
617
- return (0, _.useUseCase)(defaultFile, fileUseCase, {
618
- stateless: true
619
- });
615
+ return (0, _.useUseCase)(defaultFile, fileUseCase, _UseCaseModes.UseCaseModes.Stateless);
620
616
  }),
621
617
  result = _renderHook13.result;
622
618
  var cores = result.current;
@@ -1465,242 +1461,61 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1465
1461
  oldValue: EXT_1
1466
1462
  });
1467
1463
  });
1468
- });
1469
- (0, _globals.describe)('`useUseCase` should work with 1+ arguments on non-entity mode', function () {
1470
- (0, _globals.test)('`entity` should equal `defaultFile`', function () {
1471
- var _renderHook25 = (0, _react.renderHook)(function () {
1472
- return (0, _.useUseCase)(mathUseCase);
1473
- }),
1474
- result = _renderHook25.result;
1475
- var reducers = result.current;
1476
- (0, _globals.expect)(Array.isArray(reducers)).toBe(false);
1477
- });
1478
- (0, _globals.test)('returned reducer should work', function () {
1479
- var _renderHook26 = (0, _react.renderHook)(function () {
1480
- return (0, _.useUseCase)(mathUseCase);
1481
- }),
1482
- result = _renderHook26.result;
1483
- var reducers = result.current;
1484
- var add = reducers.add;
1485
- (0, _globals.expect)(add(1, 2)).toBe(3);
1486
- });
1487
- (0, _globals.test)('`usecase` should be called only once if deps has not provided', function () {
1488
- var mockUseCase = _globals.jest.fn(mathUseCase);
1489
- var _renderHook27 = (0, _react.renderHook)(function () {
1490
- return (0, _.useUseCase)(mockUseCase);
1491
- }),
1492
- rerender = _renderHook27.rerender;
1493
- (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1494
- rerender();
1495
- (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1496
- });
1497
- (0, _globals.test)('`usecase` should be called only once if deps has not changed', function () {
1498
- var mockUseCase = _globals.jest.fn(mathUseCase);
1499
- var _renderHook28 = (0, _react.renderHook)(function () {
1500
- return (0, _.useUseCase)(mockUseCase, {}, [1, 'x']);
1501
- }),
1502
- rerender = _renderHook28.rerender;
1503
- (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1504
- rerender();
1505
- (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1506
- });
1507
- (0, _globals.test)('`usecase` should be called if deps has changed', function () {
1508
- var i = 0;
1509
- var mockUseCase = _globals.jest.fn(mathUseCase);
1510
- var _renderHook29 = (0, _react.renderHook)(function () {
1511
- return (0, _.useUseCase)(mockUseCase, {}, [i++, 'x']);
1512
- }),
1513
- rerender = _renderHook29.rerender;
1514
- (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1515
- rerender();
1516
- (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(2);
1517
- });
1518
- (0, _globals.test)('reducer call should not be cached if component is at rendering phase', function () {
1519
- var buttonText = 'button';
1520
- var CacheTestComponent = function CacheTestComponent() {
1521
- var _useUseCase16 = (0, _.useUseCase)(mathUseCase),
1522
- subtraction = _useUseCase16.subtraction;
1523
- var update = (0, _ahooks.useUpdate)();
1524
- var onClick = function onClick() {
1525
- update();
1526
- };
1527
- subtraction(5, 3);
1528
- return (0, _jsxRuntime.jsx)("button", {
1529
- onClick: onClick,
1530
- children: buttonText
1531
- });
1464
+ (0, _globals.test)('multiple `Provider` should work', function () {
1465
+ var onNumberMount = _globals.jest.fn();
1466
+ var onStringMount = _globals.jest.fn();
1467
+ var onBooleanMount = _globals.jest.fn();
1468
+ var numberUseCase = function numberUseCase() {
1469
+ return (0, _usecases.objectUseCase)();
1532
1470
  };
1533
- (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
1534
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(1);
1535
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 3);
1536
- (0, _globals.expect)(subtractionReducer).toHaveReturnedWith(2);
1537
- _react.fireEvent.click(_react.screen.getByText(buttonText));
1538
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(2);
1539
- _react.fireEvent.click(_react.screen.getByText(buttonText));
1540
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(3);
1541
- });
1542
- (0, _globals.test)('reducer call should not be cached if component is not at rendering phase', function () {
1543
- var buttonText = 'button';
1544
- var CacheTestComponent = function CacheTestComponent() {
1545
- var _useUseCase17 = (0, _.useUseCase)(mathUseCase),
1546
- subtraction = _useUseCase17.subtraction;
1547
- var onClick = function onClick() {
1548
- subtraction(5, 3);
1549
- };
1471
+ var stringUseCase = function stringUseCase() {
1472
+ return (0, _usecases.objectUseCase)();
1473
+ };
1474
+ var booleanUseCase = function booleanUseCase() {
1475
+ return (0, _usecases.objectUseCase)();
1476
+ };
1477
+ var TestChildComponent = function TestChildComponent() {
1478
+ var _useUseCase16 = (0, _.useUseCase)(numberUseCase),
1479
+ _useUseCase17 = (0, _slicedToArray2["default"])(_useUseCase16, 1),
1480
+ numberValue = _useUseCase17[0];
1481
+ var _useUseCase18 = (0, _.useUseCase)(stringUseCase),
1482
+ _useUseCase19 = (0, _slicedToArray2["default"])(_useUseCase18, 1),
1483
+ stringValue = _useUseCase19[0];
1484
+ var _useUseCase20 = (0, _.useUseCase)(booleanUseCase),
1485
+ _useUseCase21 = (0, _slicedToArray2["default"])(_useUseCase20, 1),
1486
+ booleanValue = _useUseCase21[0];
1550
1487
  (0, _ahooks.useMount)(function () {
1551
- subtraction(5, 3);
1552
- subtraction(5, 3);
1553
- });
1554
- return (0, _jsxRuntime.jsx)("button", {
1555
- onClick: onClick,
1556
- children: buttonText
1488
+ onNumberMount(numberValue);
1489
+ onStringMount(stringValue);
1490
+ onBooleanMount(booleanValue);
1557
1491
  });
1492
+ return null;
1558
1493
  };
1559
- (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
1560
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(2);
1561
- (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(1, 5, 3);
1562
- (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(1, 2);
1563
- (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(2, 5, 3);
1564
- (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(2, 2);
1565
- _react.fireEvent.click(_react.screen.getByText(buttonText));
1566
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(3);
1567
- (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(3, 5, 3);
1568
- (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(3, 2);
1569
- });
1570
- (0, _globals.test)('reducer call should not be cached if parameters have changed', function () {
1571
- var count = 0;
1572
- var buttonText = 'button';
1573
- var StringUseCaseTestComponent = function StringUseCaseTestComponent() {
1574
- var _useUseCase18 = (0, _.useUseCase)(mathUseCase),
1575
- subtraction = _useUseCase18.subtraction;
1576
- var update = (0, _ahooks.useUpdate)();
1577
- subtraction(5, count++);
1578
- var onUpdate = function onUpdate() {
1579
- update();
1580
- };
1581
- return (0, _jsxRuntime.jsx)("div", {
1582
- children: (0, _jsxRuntime.jsx)("button", {
1583
- onClick: onUpdate,
1584
- children: buttonText
1585
- })
1494
+ var TestParentComponent = function TestParentComponent() {
1495
+ var _useUseCase22 = (0, _.useUseCase)(11, numberUseCase),
1496
+ _useUseCase23 = (0, _slicedToArray2["default"])(_useUseCase22, 3),
1497
+ NumberProvider = _useUseCase23[2];
1498
+ var _useUseCase24 = (0, _.useUseCase)('hello', stringUseCase),
1499
+ _useUseCase25 = (0, _slicedToArray2["default"])(_useUseCase24, 3),
1500
+ StringProvider = _useUseCase25[2];
1501
+ var _useUseCase26 = (0, _.useUseCase)(true, booleanUseCase),
1502
+ _useUseCase27 = (0, _slicedToArray2["default"])(_useUseCase26, 3),
1503
+ BooleanProvider = _useUseCase27[2];
1504
+ return (0, _jsxRuntime.jsx)(NumberProvider, {
1505
+ "with": [StringProvider, BooleanProvider],
1506
+ children: (0, _jsxRuntime.jsx)(TestChildComponent, {})
1586
1507
  });
1587
1508
  };
1588
- (0, _react.render)((0, _jsxRuntime.jsx)(StringUseCaseTestComponent, {}));
1589
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(1);
1590
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 0);
1591
- _react.fireEvent.click(_react.screen.getByText(buttonText));
1592
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(2);
1593
- (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 1);
1594
- (0, _globals.expect)(subtractionReducer).toHaveReturnedWith(4);
1595
- });
1596
- (0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
1597
- var _renderHook30 = (0, _react.renderHook)(function () {
1598
- return (0, _.useUseCase)(mathUseCase, {
1599
- extraValue: 5
1600
- });
1601
- }),
1602
- result = _renderHook30.result;
1603
- var reducers = result.current;
1604
- var add = reducers.add;
1605
- (0, _globals.expect)(add(1, 2)).toBe(8);
1606
- });
1607
- (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
1608
- var onUpdate = _globals.jest.fn();
1609
- var onDeepUpdate = _globals.jest.fn();
1610
- var _renderHook31 = (0, _react.renderHook)(function () {
1611
- var _useState7 = (0, _react2.useState)(0),
1612
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
1613
- extraValue = _useState8[0],
1614
- setExtraValue = _useState8[1];
1615
- var reducers = (0, _.useUseCase)(mathUseCase, {
1616
- extraValue: extraValue
1617
- });
1618
- (0, _ahooks.useUpdateEffect)(function () {
1619
- onUpdate();
1620
- }, [reducers]);
1621
- useDeepCompareUpdate(function () {
1622
- onDeepUpdate();
1623
- }, [reducers]);
1624
- return setExtraValue;
1625
- }),
1626
- result = _renderHook31.result;
1627
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1628
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1629
- (0, _react.act)(function () {
1630
- result.current(3);
1631
- });
1632
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1633
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1634
- });
1635
- (0, _globals.test)('when `deps` change, it should update reducers', function () {
1636
- var onUpdate = _globals.jest.fn();
1637
- var onDeepUpdate = _globals.jest.fn();
1638
- var _renderHook32 = (0, _react.renderHook)(function () {
1639
- var _useState9 = (0, _react2.useState)(0),
1640
- _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
1641
- extraValue = _useState10[0],
1642
- setExtraValue = _useState10[1];
1643
- var reducers = (0, _.useUseCase)(mathUseCase, {
1644
- extraValue: extraValue
1645
- }, [extraValue]);
1646
- (0, _ahooks.useUpdateEffect)(function () {
1647
- onUpdate();
1648
- }, [reducers]);
1649
- useDeepCompareUpdate(function () {
1650
- onDeepUpdate();
1651
- }, [reducers]);
1652
- return setExtraValue;
1653
- }),
1654
- result = _renderHook32.result;
1655
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1656
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1657
- (0, _react.act)(function () {
1658
- result.current(3);
1659
- });
1660
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
1661
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(1);
1662
- });
1663
- (0, _globals.test)('empty `deps` should not update reducers', function () {
1664
- var onUpdate = _globals.jest.fn();
1665
- var onDeepUpdate = _globals.jest.fn();
1666
- var _renderHook33 = (0, _react.renderHook)(function () {
1667
- var _useState11 = (0, _react2.useState)(0),
1668
- _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
1669
- extraValue = _useState12[0],
1670
- setExtraValue = _useState12[1];
1671
- var reducers = (0, _.useUseCase)(mathUseCase, {
1672
- extraValue: extraValue
1673
- }, []);
1674
- (0, _ahooks.useUpdateEffect)(function () {
1675
- onUpdate();
1676
- }, [reducers]);
1677
- useDeepCompareUpdate(function () {
1678
- onDeepUpdate();
1679
- }, [reducers]);
1680
- return setExtraValue;
1681
- }),
1682
- result = _renderHook33.result;
1683
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1684
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1685
- (0, _react.act)(function () {
1686
- result.current(3);
1687
- });
1688
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1689
- (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
1690
- });
1691
- (0, _globals.test)('should not trigger update', function () {
1692
- var onUpdate = _globals.jest.fn();
1693
- (0, _react.render)((0, _jsxRuntime.jsx)(MathParent, {
1694
- onUpdate: onUpdate
1695
- }));
1696
- _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
1697
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
1509
+ (0, _react.render)((0, _jsxRuntime.jsx)(TestParentComponent, {}));
1510
+ (0, _globals.expect)(onNumberMount).toHaveBeenCalledWith(11);
1511
+ (0, _globals.expect)(onStringMount).toHaveBeenCalledWith('hello');
1512
+ (0, _globals.expect)(onBooleanMount).toHaveBeenCalledWith(true);
1698
1513
  });
1699
1514
  });
1700
- (0, _globals.describe)('`useUseCase` should work with 1+ arguments on context mode', function () {
1701
- (0, _globals.test)('should work within <Child /> which it is under <Parent />', function () {
1702
- var textPrefix = '>>';
1703
- var onUpdate = _globals.jest.fn();
1515
+ (0, _globals.describe)('`useUseCase` should work the same as useContextualCoreCollection', function () {
1516
+ _globals.test.each([void 0, _UseCaseModes.UseCaseModes.Normal])('[mode=%s]: normal mode should trigger Parent & Child to update', function (mode) {
1517
+ var onParentUpdate = _globals.jest.fn();
1518
+ var onChildUpdate = _globals.jest.fn();
1704
1519
  var onPathChange = _globals.jest.fn();
1705
1520
  var onUndefinedEntity = _globals.jest.fn();
1706
1521
  var onSetPath = _globals.jest.fn(function () {
@@ -1708,10 +1523,11 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1708
1523
  });
1709
1524
  (0, _react.render)((0, _jsxRuntime.jsx)("div", {
1710
1525
  children: (0, _jsxRuntime.jsx)(Parent, {
1526
+ mode: mode,
1711
1527
  onSetPath: onSetPath,
1528
+ onUpdate: onParentUpdate,
1712
1529
  children: (0, _jsxRuntime.jsx)(Child, {
1713
- textPrefix: textPrefix,
1714
- onUpdate: onUpdate,
1530
+ onUpdate: onChildUpdate,
1715
1531
  onPathChange: onPathChange,
1716
1532
  onUndefinedEntity: onUndefinedEntity
1717
1533
  })
@@ -1719,14 +1535,66 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1719
1535
  }));
1720
1536
  _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
1721
1537
  (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1722
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
1538
+ (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(1);
1539
+ (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(1);
1723
1540
  (0, _globals.expect)(onPathChange).toHaveBeenCalledWith(PATH_1);
1724
- _react.fireEvent.click(_react.screen.getByText(textPrefix + CHILD_BUTTON_TEXT));
1541
+ _react.fireEvent.click(_react.screen.getByText(CHILD_BUTTON_TEXT));
1725
1542
  (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1726
- (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(2);
1727
- (0, _globals.expect)(onPathChange).toHaveBeenCalledWith('');
1543
+ (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(2);
1544
+ (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(2);
1545
+ (0, _globals.expect)(onPathChange).toHaveBeenCalledWith(PATH_2);
1728
1546
  (0, _globals.expect)(onUndefinedEntity).toHaveBeenCalledTimes(0);
1729
1547
  });
1548
+ _globals.test.each([_UseCaseModes.UseCaseModes.Stateless, _UseCaseModes.UseCaseModes.StatelessGlobal])('[mode=%s]: stateless mode should not trigger Parent & Child to update', function () {
1549
+ var onParentUpdate = _globals.jest.fn();
1550
+ var onChildUpdate = _globals.jest.fn();
1551
+ var onSetPath = _globals.jest.fn(function () {
1552
+ return PATH_1;
1553
+ });
1554
+ (0, _react.render)((0, _jsxRuntime.jsx)("div", {
1555
+ children: (0, _jsxRuntime.jsx)(Parent, {
1556
+ mode: _UseCaseModes.UseCaseModes.Stateless,
1557
+ onSetPath: onSetPath,
1558
+ onUpdate: onParentUpdate,
1559
+ children: (0, _jsxRuntime.jsx)(Child, {
1560
+ onUpdate: onChildUpdate
1561
+ })
1562
+ })
1563
+ }));
1564
+ _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
1565
+ (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1566
+ (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(0);
1567
+ (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1568
+ _react.fireEvent.click(_react.screen.getByText(CHILD_BUTTON_TEXT));
1569
+ (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1570
+ (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(0);
1571
+ (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1572
+ });
1573
+ (0, _globals.test)('global mode should trigger Parent to update, but Child shoud not be updated', function () {
1574
+ var onParentUpdate = _globals.jest.fn();
1575
+ var onChildUpdate = _globals.jest.fn();
1576
+ var onSetPath = _globals.jest.fn(function () {
1577
+ return PATH_1;
1578
+ });
1579
+ (0, _react.render)((0, _jsxRuntime.jsx)("div", {
1580
+ children: (0, _jsxRuntime.jsx)(Parent, {
1581
+ mode: _UseCaseModes.UseCaseModes.Global,
1582
+ onSetPath: onSetPath,
1583
+ onUpdate: onParentUpdate,
1584
+ children: (0, _jsxRuntime.jsx)(Child, {
1585
+ onUpdate: onChildUpdate
1586
+ })
1587
+ })
1588
+ }));
1589
+ _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
1590
+ (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1591
+ (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(1);
1592
+ (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1593
+ _react.fireEvent.click(_react.screen.getByText(CHILD_BUTTON_TEXT));
1594
+ (0, _globals.expect)(onSetPath).toHaveBeenCalledTimes(1);
1595
+ (0, _globals.expect)(onParentUpdate).toHaveBeenCalledTimes(2);
1596
+ (0, _globals.expect)(onChildUpdate).toHaveBeenCalledTimes(0);
1597
+ });
1730
1598
  (0, _globals.test)('`usecase` should not be called at child component', function () {
1731
1599
  var mockUseCase = _globals.jest.fn(fileUseCase);
1732
1600
  var A = function A() {
@@ -1734,9 +1602,9 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1734
1602
  return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1735
1603
  };
1736
1604
  var B = function B() {
1737
- var _useUseCase19 = (0, _.useUseCase)(defaultFile, mockUseCase),
1738
- _useUseCase20 = (0, _slicedToArray2["default"])(_useUseCase19, 3),
1739
- Provider = _useUseCase20[2];
1605
+ var _useUseCase28 = (0, _.useUseCase)(defaultFile, mockUseCase),
1606
+ _useUseCase29 = (0, _slicedToArray2["default"])(_useUseCase28, 3),
1607
+ Provider = _useUseCase29[2];
1740
1608
  return (0, _jsxRuntime.jsx)(Provider, {
1741
1609
  children: (0, _jsxRuntime.jsx)(A, {})
1742
1610
  });
@@ -1756,9 +1624,9 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1756
1624
  });
1757
1625
  };
1758
1626
  var A = function A() {
1759
- var _useUseCase21 = (0, _.useUseCase)(stringUseCase),
1760
- _useUseCase22 = (0, _slicedToArray2["default"])(_useUseCase21, 2),
1761
- add = _useUseCase22[1].add;
1627
+ var _useUseCase30 = (0, _.useUseCase)(stringUseCase),
1628
+ _useUseCase31 = (0, _slicedToArray2["default"])(_useUseCase30, 2),
1629
+ add = _useUseCase31[1].add;
1762
1630
  var update = (0, _ahooks.useUpdate)();
1763
1631
  var onClick = function onClick() {
1764
1632
  update();
@@ -1770,9 +1638,9 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1770
1638
  });
1771
1639
  };
1772
1640
  var B = function B() {
1773
- var _useUseCase23 = (0, _.useUseCase)('', stringUseCase),
1774
- _useUseCase24 = (0, _slicedToArray2["default"])(_useUseCase23, 3),
1775
- Provider = _useUseCase24[2];
1641
+ var _useUseCase32 = (0, _.useUseCase)('', stringUseCase),
1642
+ _useUseCase33 = (0, _slicedToArray2["default"])(_useUseCase32, 3),
1643
+ Provider = _useUseCase33[2];
1776
1644
  return (0, _jsxRuntime.jsx)(Provider, {
1777
1645
  children: (0, _jsxRuntime.jsx)(A, {})
1778
1646
  });
@@ -1796,9 +1664,9 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1796
1664
  });
1797
1665
  };
1798
1666
  var A = function A() {
1799
- var _useUseCase25 = (0, _.useUseCase)(stringUseCase),
1800
- _useUseCase26 = (0, _slicedToArray2["default"])(_useUseCase25, 2),
1801
- add = _useUseCase26[1].add;
1667
+ var _useUseCase34 = (0, _.useUseCase)(stringUseCase),
1668
+ _useUseCase35 = (0, _slicedToArray2["default"])(_useUseCase34, 2),
1669
+ add = _useUseCase35[1].add;
1802
1670
  var onClick = function onClick() {
1803
1671
  add('x');
1804
1672
  };
@@ -1812,9 +1680,9 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1812
1680
  });
1813
1681
  };
1814
1682
  var B = function B() {
1815
- var _useUseCase27 = (0, _.useUseCase)('', stringUseCase),
1816
- _useUseCase28 = (0, _slicedToArray2["default"])(_useUseCase27, 3),
1817
- Provider = _useUseCase28[2];
1683
+ var _useUseCase36 = (0, _.useUseCase)('', stringUseCase),
1684
+ _useUseCase37 = (0, _slicedToArray2["default"])(_useUseCase36, 3),
1685
+ Provider = _useUseCase37[2];
1818
1686
  return (0, _jsxRuntime.jsx)(Provider, {
1819
1687
  children: (0, _jsxRuntime.jsx)(A, {})
1820
1688
  });
@@ -1842,11 +1710,11 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1842
1710
  });
1843
1711
  };
1844
1712
  var A = function A() {
1845
- var _useUseCase29 = (0, _.useUseCase)(stringUseCase),
1846
- _useUseCase30 = (0, _slicedToArray2["default"])(_useUseCase29, 2),
1847
- _useUseCase30$ = _useUseCase30[1],
1848
- add = _useUseCase30$.add,
1849
- setEntity = _useUseCase30$.setEntity;
1713
+ var _useUseCase38 = (0, _.useUseCase)(stringUseCase),
1714
+ _useUseCase39 = (0, _slicedToArray2["default"])(_useUseCase38, 2),
1715
+ _useUseCase39$ = _useUseCase39[1],
1716
+ add = _useUseCase39$.add,
1717
+ setEntity = _useUseCase39$.setEntity;
1850
1718
  var update = (0, _ahooks.useUpdate)();
1851
1719
  add(addedText);
1852
1720
  var onSet = function onSet() {
@@ -1866,9 +1734,9 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1866
1734
  });
1867
1735
  };
1868
1736
  var B = function B() {
1869
- var _useUseCase31 = (0, _.useUseCase)('', stringUseCase),
1870
- _useUseCase32 = (0, _slicedToArray2["default"])(_useUseCase31, 3),
1871
- Provider = _useUseCase32[2];
1737
+ var _useUseCase40 = (0, _.useUseCase)('', stringUseCase),
1738
+ _useUseCase41 = (0, _slicedToArray2["default"])(_useUseCase40, 3),
1739
+ Provider = _useUseCase41[2];
1872
1740
  return (0, _jsxRuntime.jsx)(Provider, {
1873
1741
  children: (0, _jsxRuntime.jsx)(A, {})
1874
1742
  });
@@ -1902,12 +1770,12 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1902
1770
  return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1903
1771
  };
1904
1772
  var B = function B() {
1905
- var _useUseCase33 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1773
+ var _useUseCase42 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1906
1774
  onChange: onParentPathChange
1907
1775
  }),
1908
- _useUseCase34 = (0, _slicedToArray2["default"])(_useUseCase33, 3),
1909
- setPath = _useUseCase34[1].setPath,
1910
- Provider = _useUseCase34[2];
1776
+ _useUseCase43 = (0, _slicedToArray2["default"])(_useUseCase42, 3),
1777
+ setPath = _useUseCase43[1].setPath,
1778
+ Provider = _useUseCase43[2];
1911
1779
  var onFirstClick = function onFirstClick() {
1912
1780
  setPath(PATH_1);
1913
1781
  onChange = onSecondChange;
@@ -1969,12 +1837,12 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1969
1837
  return (0, _jsxRuntime.jsx)(_react2.Fragment, {});
1970
1838
  };
1971
1839
  var C = function C() {
1972
- var _useUseCase35 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1840
+ var _useUseCase44 = (0, _.useUseCase)(defaultFile, fileUseCase, {
1973
1841
  onChange: onChangeC
1974
1842
  }),
1975
- _useUseCase36 = (0, _slicedToArray2["default"])(_useUseCase35, 3),
1976
- setPath = _useUseCase36[1].setPath,
1977
- Provider = _useUseCase36[2];
1843
+ _useUseCase45 = (0, _slicedToArray2["default"])(_useUseCase44, 3),
1844
+ setPath = _useUseCase45[1].setPath,
1845
+ Provider = _useUseCase45[2];
1978
1846
  var onFirstClick = function onFirstClick() {
1979
1847
  setPath(PATH_1);
1980
1848
  };
@@ -1995,4 +1863,235 @@ var useDeepCompareUpdate = function useDeepCompareUpdate(callback, deps) {
1995
1863
  (0, _globals.expect)(onChangeC).toHaveReturnedWith(3);
1996
1864
  });
1997
1865
  });
1866
+ (0, _globals.describe)('`useUseCase` should work the same as `useReducers`', function () {
1867
+ (0, _globals.test)('`entity` should equal `defaultFile`', function () {
1868
+ var _renderHook25 = (0, _react.renderHook)(function () {
1869
+ return (0, _.useUseCase)(mathUseCase);
1870
+ }),
1871
+ result = _renderHook25.result;
1872
+ var reducers = result.current;
1873
+ (0, _globals.expect)(Array.isArray(reducers)).toBe(false);
1874
+ });
1875
+ (0, _globals.test)('returned reducer should work', function () {
1876
+ var _renderHook26 = (0, _react.renderHook)(function () {
1877
+ return (0, _.useUseCase)(mathUseCase);
1878
+ }),
1879
+ result = _renderHook26.result;
1880
+ var reducers = result.current;
1881
+ var add = reducers.add;
1882
+ (0, _globals.expect)(add(1, 2)).toBe(3);
1883
+ });
1884
+ (0, _globals.test)('`usecase` should be called only once if deps has not provided', function () {
1885
+ var mockUseCase = _globals.jest.fn(mathUseCase);
1886
+ var _renderHook27 = (0, _react.renderHook)(function () {
1887
+ return (0, _.useUseCase)(mockUseCase);
1888
+ }),
1889
+ rerender = _renderHook27.rerender;
1890
+ (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1891
+ rerender();
1892
+ (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1893
+ });
1894
+ (0, _globals.test)('`usecase` should be called only once if deps has not changed', function () {
1895
+ var mockUseCase = _globals.jest.fn(mathUseCase);
1896
+ var _renderHook28 = (0, _react.renderHook)(function () {
1897
+ return (0, _.useUseCase)(mockUseCase, {}, [1, 'x']);
1898
+ }),
1899
+ rerender = _renderHook28.rerender;
1900
+ (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1901
+ rerender();
1902
+ (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1903
+ });
1904
+ (0, _globals.test)('`usecase` should be called if deps has changed', function () {
1905
+ var i = 0;
1906
+ var mockUseCase = _globals.jest.fn(mathUseCase);
1907
+ var _renderHook29 = (0, _react.renderHook)(function () {
1908
+ return (0, _.useUseCase)(mockUseCase, {}, [i++, 'x']);
1909
+ }),
1910
+ rerender = _renderHook29.rerender;
1911
+ (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(1);
1912
+ rerender();
1913
+ (0, _globals.expect)(mockUseCase).toHaveBeenCalledTimes(2);
1914
+ });
1915
+ (0, _globals.test)('reducer call should not be cached if component is at rendering phase', function () {
1916
+ var buttonText = 'button';
1917
+ var CacheTestComponent = function CacheTestComponent() {
1918
+ var _useUseCase46 = (0, _.useUseCase)(mathUseCase),
1919
+ subtraction = _useUseCase46.subtraction;
1920
+ var update = (0, _ahooks.useUpdate)();
1921
+ var onClick = function onClick() {
1922
+ update();
1923
+ };
1924
+ subtraction(5, 3);
1925
+ return (0, _jsxRuntime.jsx)("button", {
1926
+ onClick: onClick,
1927
+ children: buttonText
1928
+ });
1929
+ };
1930
+ (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
1931
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(1);
1932
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 3);
1933
+ (0, _globals.expect)(subtractionReducer).toHaveReturnedWith(2);
1934
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1935
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(2);
1936
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1937
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(3);
1938
+ });
1939
+ (0, _globals.test)('reducer call should not be cached if component is not at rendering phase', function () {
1940
+ var buttonText = 'button';
1941
+ var CacheTestComponent = function CacheTestComponent() {
1942
+ var _useUseCase47 = (0, _.useUseCase)(mathUseCase),
1943
+ subtraction = _useUseCase47.subtraction;
1944
+ var onClick = function onClick() {
1945
+ subtraction(5, 3);
1946
+ };
1947
+ (0, _ahooks.useMount)(function () {
1948
+ subtraction(5, 3);
1949
+ subtraction(5, 3);
1950
+ });
1951
+ return (0, _jsxRuntime.jsx)("button", {
1952
+ onClick: onClick,
1953
+ children: buttonText
1954
+ });
1955
+ };
1956
+ (0, _react.render)((0, _jsxRuntime.jsx)(CacheTestComponent, {}));
1957
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(2);
1958
+ (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(1, 5, 3);
1959
+ (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(1, 2);
1960
+ (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(2, 5, 3);
1961
+ (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(2, 2);
1962
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1963
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(3);
1964
+ (0, _globals.expect)(subtractionReducer).toHaveBeenNthCalledWith(3, 5, 3);
1965
+ (0, _globals.expect)(subtractionReducer).toHaveNthReturnedWith(3, 2);
1966
+ });
1967
+ (0, _globals.test)('reducer call should not be cached if parameters have changed', function () {
1968
+ var count = 0;
1969
+ var buttonText = 'button';
1970
+ var StringUseCaseTestComponent = function StringUseCaseTestComponent() {
1971
+ var _useUseCase48 = (0, _.useUseCase)(mathUseCase),
1972
+ subtraction = _useUseCase48.subtraction;
1973
+ var update = (0, _ahooks.useUpdate)();
1974
+ subtraction(5, count++);
1975
+ var onUpdate = function onUpdate() {
1976
+ update();
1977
+ };
1978
+ return (0, _jsxRuntime.jsx)("div", {
1979
+ children: (0, _jsxRuntime.jsx)("button", {
1980
+ onClick: onUpdate,
1981
+ children: buttonText
1982
+ })
1983
+ });
1984
+ };
1985
+ (0, _react.render)((0, _jsxRuntime.jsx)(StringUseCaseTestComponent, {}));
1986
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(1);
1987
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 0);
1988
+ _react.fireEvent.click(_react.screen.getByText(buttonText));
1989
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledTimes(2);
1990
+ (0, _globals.expect)(subtractionReducer).toHaveBeenCalledWith(5, 1);
1991
+ (0, _globals.expect)(subtractionReducer).toHaveReturnedWith(4);
1992
+ });
1993
+ (0, _globals.test)('`options.extraValue` should be added after call `add` method', function () {
1994
+ var _renderHook30 = (0, _react.renderHook)(function () {
1995
+ return (0, _.useUseCase)(mathUseCase, {
1996
+ extraValue: 5
1997
+ });
1998
+ }),
1999
+ result = _renderHook30.result;
2000
+ var reducers = result.current;
2001
+ var add = reducers.add;
2002
+ (0, _globals.expect)(add(1, 2)).toBe(8);
2003
+ });
2004
+ (0, _globals.test)('when `options` has changed, it should not trigger update', function () {
2005
+ var onUpdate = _globals.jest.fn();
2006
+ var onDeepUpdate = _globals.jest.fn();
2007
+ var _renderHook31 = (0, _react.renderHook)(function () {
2008
+ var _useState7 = (0, _react2.useState)(0),
2009
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
2010
+ extraValue = _useState8[0],
2011
+ setExtraValue = _useState8[1];
2012
+ var reducers = (0, _.useUseCase)(mathUseCase, {
2013
+ extraValue: extraValue
2014
+ });
2015
+ (0, _ahooks.useUpdateEffect)(function () {
2016
+ onUpdate();
2017
+ }, [reducers]);
2018
+ useDeepCompareUpdate(function () {
2019
+ onDeepUpdate();
2020
+ }, [reducers]);
2021
+ return setExtraValue;
2022
+ }),
2023
+ result = _renderHook31.result;
2024
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2025
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2026
+ (0, _react.act)(function () {
2027
+ result.current(3);
2028
+ });
2029
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2030
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2031
+ });
2032
+ (0, _globals.test)('when `deps` change, it should update reducers', function () {
2033
+ var onUpdate = _globals.jest.fn();
2034
+ var onDeepUpdate = _globals.jest.fn();
2035
+ var _renderHook32 = (0, _react.renderHook)(function () {
2036
+ var _useState9 = (0, _react2.useState)(0),
2037
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
2038
+ extraValue = _useState10[0],
2039
+ setExtraValue = _useState10[1];
2040
+ var reducers = (0, _.useUseCase)(mathUseCase, {
2041
+ extraValue: extraValue
2042
+ }, [extraValue]);
2043
+ (0, _ahooks.useUpdateEffect)(function () {
2044
+ onUpdate();
2045
+ }, [reducers]);
2046
+ useDeepCompareUpdate(function () {
2047
+ onDeepUpdate();
2048
+ }, [reducers]);
2049
+ return setExtraValue;
2050
+ }),
2051
+ result = _renderHook32.result;
2052
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2053
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2054
+ (0, _react.act)(function () {
2055
+ result.current(3);
2056
+ });
2057
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(1);
2058
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(1);
2059
+ });
2060
+ (0, _globals.test)('empty `deps` should not update reducers', function () {
2061
+ var onUpdate = _globals.jest.fn();
2062
+ var onDeepUpdate = _globals.jest.fn();
2063
+ var _renderHook33 = (0, _react.renderHook)(function () {
2064
+ var _useState11 = (0, _react2.useState)(0),
2065
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
2066
+ extraValue = _useState12[0],
2067
+ setExtraValue = _useState12[1];
2068
+ var reducers = (0, _.useUseCase)(mathUseCase, {
2069
+ extraValue: extraValue
2070
+ }, []);
2071
+ (0, _ahooks.useUpdateEffect)(function () {
2072
+ onUpdate();
2073
+ }, [reducers]);
2074
+ useDeepCompareUpdate(function () {
2075
+ onDeepUpdate();
2076
+ }, [reducers]);
2077
+ return setExtraValue;
2078
+ }),
2079
+ result = _renderHook33.result;
2080
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2081
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2082
+ (0, _react.act)(function () {
2083
+ result.current(3);
2084
+ });
2085
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2086
+ (0, _globals.expect)(onDeepUpdate).toHaveBeenCalledTimes(0);
2087
+ });
2088
+ (0, _globals.test)('should not trigger update', function () {
2089
+ var onUpdate = _globals.jest.fn();
2090
+ (0, _react.render)((0, _jsxRuntime.jsx)(MathParent, {
2091
+ onUpdate: onUpdate
2092
+ }));
2093
+ _react.fireEvent.click(_react.screen.getByText(PARENT_BUTTON_TEXT));
2094
+ (0, _globals.expect)(onUpdate).toHaveBeenCalledTimes(0);
2095
+ });
2096
+ });
1998
2097
  });