@mic-rexjs/usecases-react 4.0.0-beta.0 → 4.0.0-beta.4

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 (150) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/index.min.js.LICENSE.txt +2 -0
  3. package/es/components/UseCaseFragment/index.js +2 -2
  4. package/es/enums/Statuses/index.d.ts +86 -10
  5. package/es/enums/Statuses/index.js +86 -10
  6. package/es/hooks/useAlternateStatuses/index.d.ts +2 -0
  7. package/es/hooks/useAlternateStatuses/index.js +16 -0
  8. package/es/hooks/useChanged/index.d.ts +2 -0
  9. package/es/hooks/useChanged/index.js +17 -0
  10. package/es/hooks/useChanged/types.d.ts +3 -0
  11. package/es/hooks/useContext/index.d.ts +3 -4
  12. package/es/hooks/useContext/index.js +17 -15
  13. package/es/hooks/useContext/index.test.js +13 -24
  14. package/es/hooks/useContextValue/index.d.ts +3 -4
  15. package/es/hooks/useContextValue/index.js +9 -16
  16. package/es/hooks/useDepsKey/index.js +11 -9
  17. package/es/hooks/useEntity/index.d.ts +3 -2
  18. package/es/hooks/useEntity/index.js +62 -59
  19. package/es/hooks/useEntityReturn/index.d.ts +5 -0
  20. package/es/hooks/useEntityReturn/index.js +15 -0
  21. package/es/hooks/useEntityReturn/types.d.ts +7 -0
  22. package/es/hooks/useEntityRootExec/index.d.ts +5 -0
  23. package/es/hooks/useEntityRootExec/index.js +7 -0
  24. package/es/hooks/useEntityRootExec/types.d.ts +7 -0
  25. package/es/hooks/useEntityRootReturn/index.d.ts +5 -0
  26. package/es/hooks/useEntityRootReturn/index.js +14 -0
  27. package/es/hooks/useEntityRootReturn/types.d.ts +7 -0
  28. package/es/hooks/useEntityRootReturn/types.js +1 -0
  29. package/es/hooks/useExec/index.d.ts +2 -3
  30. package/es/hooks/useExec/index.js +3 -25
  31. package/es/hooks/useExec/types.d.ts +7 -2
  32. package/es/hooks/useFullArguments/index.d.ts +2 -3
  33. package/es/hooks/useFullArguments/index.js +4 -6
  34. package/es/hooks/useIfExec/index.d.ts +2 -0
  35. package/es/hooks/useIfExec/index.js +20 -0
  36. package/es/hooks/useIfExec/types.d.ts +6 -0
  37. package/es/hooks/useIfExec/types.js +1 -0
  38. package/es/hooks/useIfReturn/index.d.ts +2 -0
  39. package/es/hooks/useIfReturn/index.js +22 -0
  40. package/es/hooks/useIfReturn/types.d.ts +6 -0
  41. package/es/hooks/useIfReturn/types.js +1 -0
  42. package/es/hooks/useProvider/index.d.ts +3 -3
  43. package/es/hooks/useProvider/index.js +15 -13
  44. package/es/hooks/useProviders/index.js +4 -4
  45. package/es/hooks/useReducers/index.d.ts +5 -4
  46. package/es/hooks/useReducers/index.js +47 -10
  47. package/es/hooks/useReturn/index.d.ts +2 -0
  48. package/es/hooks/useReturn/index.js +33 -0
  49. package/es/hooks/useReturn/types.d.ts +11 -0
  50. package/es/hooks/useReturn/types.js +1 -0
  51. package/es/hooks/useRootInitializing/index.d.ts +2 -0
  52. package/es/hooks/useRootInitializing/index.js +14 -0
  53. package/es/hooks/useRootReturn/index.d.ts +5 -0
  54. package/es/hooks/useRootReturn/index.js +22 -0
  55. package/es/hooks/useRootReturn/types.d.ts +14 -0
  56. package/es/hooks/useRootReturn/types.js +1 -0
  57. package/es/hooks/useStatuses/index.d.ts +4 -4
  58. package/es/hooks/useStatuses/index.js +46 -21
  59. package/es/hooks/useStore/index.d.ts +3 -3
  60. package/es/hooks/useStore/index.js +24 -47
  61. package/es/hooks/useThrottleUpdate/index.d.ts +2 -0
  62. package/es/hooks/useThrottleUpdate/index.js +31 -0
  63. package/es/hooks/useThrottleUpdate/types.d.ts +3 -0
  64. package/es/hooks/useThrottleUpdate/types.js +1 -0
  65. package/es/hooks/useUseCase/index.js +18 -27
  66. package/es/hooks/useUseCase/index.test.js +415 -236
  67. package/es/hooks/useUseCase/types.d.ts +13 -2
  68. package/es/types.d.ts +2 -1
  69. package/es/usecases/contextUseCase/index.js +21 -38
  70. package/es/usecases/contextUseCase/types.d.ts +6 -9
  71. package/es/usecases/lifecycleEventUseCase/index.js +37 -9
  72. package/es/usecases/lifecycleEventUseCase/types.d.ts +11 -8
  73. package/lib/components/UseCaseFragment/index.js +2 -2
  74. package/lib/enums/Statuses/index.js +86 -10
  75. package/lib/hooks/useAlternateStatuses/index.js +22 -0
  76. package/lib/hooks/useChanged/index.js +23 -0
  77. package/lib/hooks/useContext/index.js +19 -17
  78. package/lib/hooks/useContext/index.test.js +13 -24
  79. package/lib/hooks/useContextValue/index.js +8 -15
  80. package/lib/hooks/useDepsKey/index.js +10 -8
  81. package/lib/hooks/useEntity/index.js +93 -62
  82. package/lib/hooks/useEntityReturn/index.js +22 -0
  83. package/lib/hooks/useEntityRootExec/index.js +13 -0
  84. package/lib/hooks/useEntityRootReturn/index.js +21 -0
  85. package/lib/hooks/useEntityRootReturn/types.js +5 -0
  86. package/lib/hooks/useExec/index.js +3 -25
  87. package/lib/hooks/useFullArguments/index.js +4 -6
  88. package/lib/hooks/useIfExec/index.js +27 -0
  89. package/lib/hooks/useIfExec/types.js +5 -0
  90. package/lib/hooks/useIfReturn/index.js +29 -0
  91. package/lib/hooks/useIfReturn/types.js +5 -0
  92. package/lib/hooks/useProvider/index.js +15 -13
  93. package/lib/hooks/useProviders/index.js +3 -3
  94. package/lib/hooks/useReducers/index.js +50 -10
  95. package/lib/hooks/useReturn/index.js +40 -0
  96. package/lib/hooks/useReturn/types.js +5 -0
  97. package/lib/hooks/useRootInitializing/index.js +20 -0
  98. package/lib/hooks/useRootReturn/index.js +30 -0
  99. package/lib/hooks/useRootReturn/types.js +5 -0
  100. package/lib/hooks/useStatuses/index.js +47 -21
  101. package/lib/hooks/useStore/index.js +22 -46
  102. package/lib/hooks/useThrottleUpdate/index.js +37 -0
  103. package/lib/hooks/useThrottleUpdate/types.js +5 -0
  104. package/lib/hooks/useUseCase/index.js +18 -27
  105. package/lib/hooks/useUseCase/index.test.js +458 -280
  106. package/lib/usecases/contextUseCase/index.js +21 -38
  107. package/lib/usecases/lifecycleEventUseCase/index.js +48 -8
  108. package/package.json +1 -1
  109. package/es/classes/OptionsSet/index.d.ts +0 -6
  110. package/es/classes/OptionsSet/index.js +0 -44
  111. package/es/classes/OptionsSet/types.d.ts +0 -8
  112. package/es/enums/ArgumentTypes/index.d.ts +0 -4
  113. package/es/enums/ArgumentTypes/index.js +0 -5
  114. package/es/hooks/useArgumentTypes/index.d.ts +0 -3
  115. package/es/hooks/useArgumentTypes/index.js +0 -14
  116. package/es/hooks/useConstantEntityReducers/index.d.ts +0 -3
  117. package/es/hooks/useConstantEntityReducers/index.js +0 -7
  118. package/es/hooks/useConstantFn/index.d.ts +0 -1
  119. package/es/hooks/useConstantFn/index.js +0 -10
  120. package/es/hooks/useConstantReducers/index.d.ts +0 -3
  121. package/es/hooks/useConstantReducers/index.js +0 -6
  122. package/es/hooks/useContextualItem/index.d.ts +0 -4
  123. package/es/hooks/useContextualItem/index.js +0 -11
  124. package/es/hooks/useEntityInitializing/index.d.ts +0 -2
  125. package/es/hooks/useEntityInitializing/index.js +0 -16
  126. package/es/hooks/useOptions/index.d.ts +0 -5
  127. package/es/hooks/useOptions/index.js +0 -54
  128. package/es/hooks/useOptions/types.d.ts +0 -5
  129. package/es/hooks/useOptionsSet/index.d.ts +0 -5
  130. package/es/hooks/useOptionsSet/index.js +0 -16
  131. package/es/hooks/useRootCreation/index.d.ts +0 -4
  132. package/es/hooks/useRootCreation/index.js +0 -20
  133. package/es/hooks/useRootCreation/types.d.ts +0 -3
  134. package/lib/classes/OptionsSet/index.js +0 -94
  135. package/lib/enums/ArgumentTypes/index.js +0 -11
  136. package/lib/hooks/useArgumentTypes/index.js +0 -22
  137. package/lib/hooks/useConstantEntityReducers/index.js +0 -13
  138. package/lib/hooks/useConstantFn/index.js +0 -17
  139. package/lib/hooks/useConstantReducers/index.js +0 -12
  140. package/lib/hooks/useContextualItem/index.js +0 -17
  141. package/lib/hooks/useEntityInitializing/index.js +0 -22
  142. package/lib/hooks/useOptions/index.js +0 -61
  143. package/lib/hooks/useOptionsSet/index.js +0 -22
  144. package/lib/hooks/useRootCreation/index.js +0 -26
  145. /package/es/{classes/OptionsSet → hooks/useChanged}/types.js +0 -0
  146. /package/es/hooks/{useOptions → useEntityReturn}/types.js +0 -0
  147. /package/es/hooks/{useRootCreation → useEntityRootExec}/types.js +0 -0
  148. /package/lib/{classes/OptionsSet → hooks/useChanged}/types.js +0 -0
  149. /package/lib/hooks/{useOptions → useEntityReturn}/types.js +0 -0
  150. /package/lib/hooks/{useRootCreation → useEntityRootExec}/types.js +0 -0
@@ -1137,44 +1137,6 @@ describe('useUseCase', () => {
1137
1137
  expect(onUpdate).toHaveBeenCalledTimes(0);
1138
1138
  expect(onDeepUpdate).toHaveBeenCalledTimes(0);
1139
1139
  });
1140
- test('event options should be triggered', async () => {
1141
- let readFilePromise = null;
1142
- const buttonText = 'my button';
1143
- const onReadFile = jest.fn(path => {
1144
- void path;
1145
- return 1024;
1146
- });
1147
- const onSizeChange = jest.fn();
1148
- const TestComponent = () => {
1149
- const _useUseCase10 = useUseCase(defaultFile, fileUseCase, {
1150
- onReadFile
1151
- }),
1152
- _useUseCase11 = _slicedToArray(_useUseCase10, 2),
1153
- size = _useUseCase11[0].size,
1154
- readFile = _useUseCase11[1].readFile;
1155
- const onClick = () => {
1156
- readFilePromise = readFile(PATH_1);
1157
- };
1158
- useUpdateEffect(() => {
1159
- onSizeChange(size);
1160
- }, [size]);
1161
- return _jsx("button", {
1162
- onClick: onClick,
1163
- children: buttonText
1164
- });
1165
- };
1166
- render(_jsx(TestComponent, {}));
1167
- expect(onReadFile).toHaveBeenCalledTimes(0);
1168
- expect(onSizeChange).toHaveBeenCalledTimes(0);
1169
- await act(async () => {
1170
- fireEvent.click(screen.getByText(buttonText));
1171
- await readFilePromise;
1172
- });
1173
- expect(onReadFile).toHaveBeenCalledTimes(1);
1174
- expect(onReadFile).toHaveBeenCalledWith(PATH_1);
1175
- expect(onSizeChange).toHaveBeenCalledTimes(1);
1176
- expect(onSizeChange).toHaveBeenCalledWith(1024);
1177
- });
1178
1140
  test(`should call latest functions of usecase options even deps has not change`, () => {
1179
1141
  const onPathChange1 = jest.fn();
1180
1142
  const onPathChange2 = jest.fn();
@@ -1297,15 +1259,15 @@ describe('useUseCase', () => {
1297
1259
  const TestParent = _ref5 => {
1298
1260
  let file = _ref5.file;
1299
1261
  const path = file.path;
1300
- const _useUseCase12 = useUseCase(function () {
1262
+ const _useUseCase10 = useUseCase(function () {
1301
1263
  let currentFile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultFile;
1302
1264
  return {
1303
1265
  ...currentFile,
1304
1266
  path
1305
1267
  };
1306
1268
  }, fileUseCase, {}, [path]),
1307
- _useUseCase13 = _slicedToArray(_useUseCase12, 3),
1308
- Provider = _useUseCase13[2];
1269
+ _useUseCase11 = _slicedToArray(_useUseCase10, 3),
1270
+ Provider = _useUseCase11[2];
1309
1271
  return _jsx(Provider, {
1310
1272
  children: _jsx(TestChild, {})
1311
1273
  });
@@ -1989,6 +1951,55 @@ describe('useUseCase', () => {
1989
1951
  oldValue: EXT_1
1990
1952
  });
1991
1953
  });
1954
+ test.only('`options.watch` should not trigger when entity changes between render and effect phase', async () => {
1955
+ let currentPath = '';
1956
+ let currentSetPath = path => {
1957
+ void path;
1958
+ };
1959
+ const onPathChange = jest.fn();
1960
+ const _renderHook37 = renderHook(() => {
1961
+ const cp = currentPath;
1962
+ const onEffect = useMemoizedFn(() => {
1963
+ if (cp !== PATH_1) {
1964
+ return;
1965
+ }
1966
+ currentSetPath(PATH_2);
1967
+ });
1968
+ /**
1969
+ * 这里一定要在 `useUseCase` 前面,因为 `jest` 的测试环境,`useEffect` 会在 `setTimeout(fn, 0)` 之前执行,
1970
+ * 也就是 `useEffect` 不会存在异步的情况,但实际环境却存在 `useEffect` 是异步的情况,
1971
+ * 比如在 `render` 阶段与 `useEffect` 阶段之间,`touchmove` 等事件会触发修改状态。
1972
+ *
1973
+ * 所以,我们在 `useUseCase` 之前使用 `useUpdateEffect`,
1974
+ * 来模拟在 `useUseCase` 的 `render` 阶段与 `useEffect` 阶段之间运行的异步。
1975
+ */
1976
+ useUpdateEffect(() => {
1977
+ if (cp !== PATH_1) {
1978
+ return;
1979
+ }
1980
+ onEffect();
1981
+ }, [cp, onEffect]);
1982
+ const core = useUseCase(defaultFile, fileUseCase, {
1983
+ watch: {
1984
+ path(_ref6) {
1985
+ let newValue = _ref6.newValue;
1986
+ currentPath = newValue;
1987
+ onPathChange(newValue);
1988
+ }
1989
+ }
1990
+ });
1991
+ return core;
1992
+ }),
1993
+ result = _renderHook37.result;
1994
+ const current = result.current;
1995
+ const _current8 = _slicedToArray(current, 2),
1996
+ setPath = _current8[1].setPath;
1997
+ currentSetPath = setPath;
1998
+ act(() => {
1999
+ setPath(PATH_1);
2000
+ });
2001
+ expect(onPathChange).toHaveBeenCalledTimes(2);
2002
+ });
1992
2003
  test('multiple `Provider` should work', () => {
1993
2004
  const onNumberMount = jest.fn();
1994
2005
  const onStringMount = jest.fn();
@@ -2003,15 +2014,15 @@ describe('useUseCase', () => {
2003
2014
  return entityUseCase();
2004
2015
  };
2005
2016
  const TestChildComponent = () => {
2006
- const _useUseCase14 = useUseCase(numberUseCase),
2017
+ const _useUseCase12 = useUseCase(numberUseCase),
2018
+ _useUseCase13 = _slicedToArray(_useUseCase12, 1),
2019
+ numberValue = _useUseCase13[0];
2020
+ const _useUseCase14 = useUseCase(stringUseCase),
2007
2021
  _useUseCase15 = _slicedToArray(_useUseCase14, 1),
2008
- numberValue = _useUseCase15[0];
2009
- const _useUseCase16 = useUseCase(stringUseCase),
2022
+ stringValue = _useUseCase15[0];
2023
+ const _useUseCase16 = useUseCase(booleanUseCase),
2010
2024
  _useUseCase17 = _slicedToArray(_useUseCase16, 1),
2011
- stringValue = _useUseCase17[0];
2012
- const _useUseCase18 = useUseCase(booleanUseCase),
2013
- _useUseCase19 = _slicedToArray(_useUseCase18, 1),
2014
- booleanValue = _useUseCase19[0];
2025
+ booleanValue = _useUseCase17[0];
2015
2026
  useMount(() => {
2016
2027
  onNumberMount(numberValue);
2017
2028
  onStringMount(stringValue);
@@ -2020,15 +2031,15 @@ describe('useUseCase', () => {
2020
2031
  return null;
2021
2032
  };
2022
2033
  const TestParentComponent = () => {
2023
- const _useUseCase20 = useUseCase(11, numberUseCase),
2034
+ const _useUseCase18 = useUseCase(11, numberUseCase),
2035
+ _useUseCase19 = _slicedToArray(_useUseCase18, 3),
2036
+ NumberProvider = _useUseCase19[2];
2037
+ const _useUseCase20 = useUseCase('hello', stringUseCase),
2024
2038
  _useUseCase21 = _slicedToArray(_useUseCase20, 3),
2025
- NumberProvider = _useUseCase21[2];
2026
- const _useUseCase22 = useUseCase('hello', stringUseCase),
2039
+ StringProvider = _useUseCase21[2];
2040
+ const _useUseCase22 = useUseCase(true, booleanUseCase),
2027
2041
  _useUseCase23 = _slicedToArray(_useUseCase22, 3),
2028
- StringProvider = _useUseCase23[2];
2029
- const _useUseCase24 = useUseCase(true, booleanUseCase),
2030
- _useUseCase25 = _slicedToArray(_useUseCase24, 3),
2031
- BooleanProvider = _useUseCase25[2];
2042
+ BooleanProvider = _useUseCase23[2];
2032
2043
  return _jsx(NumberProvider, {
2033
2044
  with: [StringProvider, BooleanProvider],
2034
2045
  children: _jsx(TestChildComponent, {})
@@ -2039,7 +2050,7 @@ describe('useUseCase', () => {
2039
2050
  expect(onStringMount).toHaveBeenCalledWith('hello');
2040
2051
  expect(onBooleanMount).toHaveBeenCalledWith(true);
2041
2052
  });
2042
- test('`onBind` event should be called when component mount', () => {
2053
+ test('Lifecycle `onBind` event should be called when component mount', () => {
2043
2054
  const onBind = jest.fn(entity => {
2044
2055
  void entity;
2045
2056
  });
@@ -2053,9 +2064,9 @@ describe('useUseCase', () => {
2053
2064
  };
2054
2065
  };
2055
2066
  renderHook(() => {
2056
- const _useUseCase26 = useUseCase(5, testUseCase),
2057
- _useUseCase27 = _slicedToArray(_useUseCase26, 2),
2058
- setEntity = _useUseCase27[1].setEntity;
2067
+ const _useUseCase24 = useUseCase(5, testUseCase),
2068
+ _useUseCase25 = _slicedToArray(_useUseCase24, 2),
2069
+ setEntity = _useUseCase25[1].setEntity;
2059
2070
  useMount(() => {
2060
2071
  setEntity(100);
2061
2072
  });
@@ -2063,7 +2074,7 @@ describe('useUseCase', () => {
2063
2074
  expect(onBind).toHaveBeenCalledTimes(1);
2064
2075
  expect(onBind).toHaveBeenCalledWith(5);
2065
2076
  });
2066
- test('`onChange` event should be called when entity change', () => {
2077
+ test('Lifecycle `onChange` event should be called when entity change', () => {
2067
2078
  const onChange = jest.fn((newEntity, oldEntity) => {
2068
2079
  void newEntity;
2069
2080
  void oldEntity;
@@ -2077,13 +2088,13 @@ describe('useUseCase', () => {
2077
2088
  ...entityReducers
2078
2089
  };
2079
2090
  };
2080
- const _renderHook37 = renderHook(() => {
2091
+ const _renderHook38 = renderHook(() => {
2081
2092
  return useUseCase(5, testUseCase);
2082
2093
  }),
2083
- result = _renderHook37.result;
2094
+ result = _renderHook38.result;
2084
2095
  const current = result.current;
2085
- const _current8 = _slicedToArray(current, 2),
2086
- setEntity = _current8[1].setEntity;
2096
+ const _current9 = _slicedToArray(current, 2),
2097
+ setEntity = _current9[1].setEntity;
2087
2098
  expect(onChange).toHaveBeenCalledTimes(0);
2088
2099
  act(() => {
2089
2100
  setEntity(100);
@@ -2091,7 +2102,157 @@ describe('useUseCase', () => {
2091
2102
  expect(onChange).toHaveBeenCalledTimes(1);
2092
2103
  expect(onChange).toHaveBeenCalledWith(100, 5);
2093
2104
  });
2094
- test('`onUpdate` event should be called when entity change', () => {
2105
+ test('Lifecycle `onChange` event should support returning a boolean to control whether the component updates', () => {
2106
+ let i = 0;
2107
+ const onChange = jest.fn((newEntity, oldEntity) => {
2108
+ void newEntity;
2109
+ void oldEntity;
2110
+ return i++ === 0;
2111
+ });
2112
+ const onRenderHook = jest.fn();
2113
+ const testUseCase = () => {
2114
+ const entityReducers = entityUseCase();
2115
+ lifecycleUseCase({
2116
+ onChange
2117
+ });
2118
+ return {
2119
+ ...entityReducers
2120
+ };
2121
+ };
2122
+ const _renderHook39 = renderHook(() => {
2123
+ const core = useUseCase(5, testUseCase);
2124
+ const _core = _slicedToArray(core, 1),
2125
+ value = _core[0];
2126
+ onRenderHook(value);
2127
+ return core;
2128
+ }),
2129
+ result = _renderHook39.result;
2130
+ const current = result.current;
2131
+ const _current0 = _slicedToArray(current, 2),
2132
+ setEntity = _current0[1].setEntity;
2133
+ expect(onRenderHook).toHaveBeenCalledTimes(1);
2134
+ expect(onRenderHook).toHaveBeenLastCalledWith(5);
2135
+ act(() => {
2136
+ setEntity(100);
2137
+ });
2138
+ expect(onRenderHook).toHaveBeenCalledTimes(1);
2139
+ act(() => {
2140
+ setEntity(200);
2141
+ });
2142
+ expect(onRenderHook).toHaveBeenCalledTimes(2);
2143
+ expect(onRenderHook).toHaveBeenLastCalledWith(200);
2144
+ });
2145
+ test('Lifecycle `onChange` event should support returning a Promise<boolean> to control whether the component updates', async () => {
2146
+ let i = 0;
2147
+ let promise = null;
2148
+ const onChange = jest.fn((newEntity, oldEntity) => {
2149
+ void newEntity;
2150
+ void oldEntity;
2151
+ promise = new Promise(res => {
2152
+ setTimeout(() => {
2153
+ res(i++ === 0);
2154
+ }, 500);
2155
+ });
2156
+ return promise;
2157
+ });
2158
+ const onRenderHook = jest.fn();
2159
+ const testUseCase = () => {
2160
+ const entityReducers = entityUseCase();
2161
+ lifecycleUseCase({
2162
+ onChange
2163
+ });
2164
+ return {
2165
+ ...entityReducers
2166
+ };
2167
+ };
2168
+ const _renderHook40 = renderHook(() => {
2169
+ const core = useUseCase(5, testUseCase);
2170
+ const _core2 = _slicedToArray(core, 1),
2171
+ value = _core2[0];
2172
+ onRenderHook(value);
2173
+ return core;
2174
+ }),
2175
+ result = _renderHook40.result;
2176
+ const current = result.current;
2177
+ const _current1 = _slicedToArray(current, 2),
2178
+ setEntity = _current1[1].setEntity;
2179
+ expect(onRenderHook).toHaveBeenCalledTimes(1);
2180
+ expect(onRenderHook).toHaveBeenLastCalledWith(5);
2181
+ act(() => {
2182
+ setEntity(100);
2183
+ });
2184
+ expect(onRenderHook).toHaveBeenCalledTimes(1);
2185
+ await act(async () => {
2186
+ await Promise.resolve(promise);
2187
+ });
2188
+ expect(onRenderHook).toHaveBeenCalledTimes(1);
2189
+ act(() => {
2190
+ setEntity(200);
2191
+ });
2192
+ expect(onRenderHook).toHaveBeenCalledTimes(1);
2193
+ await act(async () => {
2194
+ await Promise.resolve(promise);
2195
+ });
2196
+ expect(onRenderHook).toHaveBeenCalledTimes(2);
2197
+ expect(onRenderHook).toHaveBeenLastCalledWith(200);
2198
+ });
2199
+ test('Lifecycle `onChange` event should support returning a number to control whether the component updates', async () => {
2200
+ const onChange = jest.fn((newEntity, oldEntity) => {
2201
+ void newEntity;
2202
+ void oldEntity;
2203
+ return 500;
2204
+ });
2205
+ const onRenderHook = jest.fn();
2206
+ const testUseCase = () => {
2207
+ const entityReducers = entityUseCase();
2208
+ lifecycleUseCase({
2209
+ onChange
2210
+ });
2211
+ return {
2212
+ ...entityReducers
2213
+ };
2214
+ };
2215
+ const _renderHook41 = renderHook(() => {
2216
+ const core = useUseCase(5, testUseCase);
2217
+ const _core3 = _slicedToArray(core, 1),
2218
+ value = _core3[0];
2219
+ onRenderHook(value);
2220
+ return core;
2221
+ }),
2222
+ result = _renderHook41.result;
2223
+ const current = result.current;
2224
+ const _current10 = _slicedToArray(current, 2),
2225
+ setEntity = _current10[1].setEntity;
2226
+ expect(onRenderHook).toHaveBeenCalledTimes(1);
2227
+ expect(onRenderHook).toHaveBeenLastCalledWith(5);
2228
+ act(() => {
2229
+ setEntity(100);
2230
+ });
2231
+ expect(onRenderHook).toHaveBeenCalledTimes(2);
2232
+ expect(onRenderHook).toHaveBeenLastCalledWith(100);
2233
+ await act(() => {
2234
+ return new Promise(res => {
2235
+ setEntity(200);
2236
+ setTimeout(res, 100);
2237
+ });
2238
+ });
2239
+ expect(onRenderHook).toHaveBeenCalledTimes(2);
2240
+ await act(() => {
2241
+ return new Promise(res => {
2242
+ setEntity(300);
2243
+ setTimeout(res, 100);
2244
+ });
2245
+ });
2246
+ expect(onRenderHook).toHaveBeenCalledTimes(2);
2247
+ await act(() => {
2248
+ return new Promise(res => {
2249
+ setTimeout(res, 500);
2250
+ });
2251
+ });
2252
+ expect(onRenderHook).toHaveBeenCalledTimes(3);
2253
+ expect(onRenderHook).toHaveBeenLastCalledWith(300);
2254
+ });
2255
+ test('Lifecycle `onUpdate` event should be called when entity change', () => {
2095
2256
  const onUpdate = jest.fn((newEntity, oldEntity) => {
2096
2257
  void newEntity;
2097
2258
  void oldEntity;
@@ -2105,13 +2266,13 @@ describe('useUseCase', () => {
2105
2266
  ...entityReducers
2106
2267
  };
2107
2268
  };
2108
- const _renderHook38 = renderHook(() => {
2269
+ const _renderHook42 = renderHook(() => {
2109
2270
  return useUseCase(5, testUseCase);
2110
2271
  }),
2111
- result = _renderHook38.result;
2272
+ result = _renderHook42.result;
2112
2273
  const current = result.current;
2113
- const _current9 = _slicedToArray(current, 2),
2114
- setEntity = _current9[1].setEntity;
2274
+ const _current11 = _slicedToArray(current, 2),
2275
+ setEntity = _current11[1].setEntity;
2115
2276
  expect(onUpdate).toHaveBeenCalledTimes(0);
2116
2277
  act(() => {
2117
2278
  setEntity(100);
@@ -2119,7 +2280,7 @@ describe('useUseCase', () => {
2119
2280
  expect(onUpdate).toHaveBeenCalledTimes(1);
2120
2281
  expect(onUpdate).toHaveBeenCalledWith(100, 5);
2121
2282
  });
2122
- test('`onUnbind` event should be called when component unmount', () => {
2283
+ test('Lifecycle `onUnbind` event should be called when component unmount', () => {
2123
2284
  const onUnbind = jest.fn(entity => {
2124
2285
  void entity;
2125
2286
  });
@@ -2132,21 +2293,21 @@ describe('useUseCase', () => {
2132
2293
  ...entityReducers
2133
2294
  };
2134
2295
  };
2135
- const _renderHook39 = renderHook(() => {
2136
- const _useUseCase28 = useUseCase(5, testUseCase),
2137
- _useUseCase29 = _slicedToArray(_useUseCase28, 2),
2138
- setEntity = _useUseCase29[1].setEntity;
2296
+ const _renderHook43 = renderHook(() => {
2297
+ const _useUseCase26 = useUseCase(5, testUseCase),
2298
+ _useUseCase27 = _slicedToArray(_useUseCase26, 2),
2299
+ setEntity = _useUseCase27[1].setEntity;
2139
2300
  useMount(() => {
2140
2301
  setEntity(100);
2141
2302
  });
2142
2303
  }),
2143
- unmount = _renderHook39.unmount;
2304
+ unmount = _renderHook43.unmount;
2144
2305
  expect(onUnbind).toHaveBeenCalledTimes(0);
2145
2306
  unmount();
2146
2307
  expect(onUnbind).toHaveBeenCalledTimes(1);
2147
2308
  expect(onUnbind).toHaveBeenCalledWith(100);
2148
2309
  });
2149
- test('`onAdopt` event should be called when entity change', () => {
2310
+ test('Lifecycle `onAdopt` event should be called when entity change', () => {
2150
2311
  const onAdopt = jest.fn((newEntity, oldeEntity) => {
2151
2312
  void newEntity;
2152
2313
  void oldeEntity;
@@ -2160,13 +2321,13 @@ describe('useUseCase', () => {
2160
2321
  ...entityReducers
2161
2322
  };
2162
2323
  };
2163
- const _renderHook40 = renderHook(() => {
2324
+ const _renderHook44 = renderHook(() => {
2164
2325
  return useUseCase(5, testUseCase);
2165
2326
  }),
2166
- result = _renderHook40.result;
2327
+ result = _renderHook44.result;
2167
2328
  const current = result.current;
2168
- const _current0 = _slicedToArray(current, 2),
2169
- setEntity = _current0[1].setEntity;
2329
+ const _current12 = _slicedToArray(current, 2),
2330
+ setEntity = _current12[1].setEntity;
2170
2331
  expect(onAdopt).toHaveBeenCalledTimes(1);
2171
2332
  expect(onAdopt).toHaveBeenCalledWith(5);
2172
2333
  act(() => {
@@ -2175,7 +2336,7 @@ describe('useUseCase', () => {
2175
2336
  expect(onAdopt).toHaveBeenCalledTimes(2);
2176
2337
  expect(onAdopt).toHaveBeenCalledWith(100, 5);
2177
2338
  });
2178
- test('`onDiscard` event should be called when component unmount', () => {
2339
+ test('Lifecycle `onDiscard` event should be called when component unmount', () => {
2179
2340
  const onDiscard = jest.fn(entity => {
2180
2341
  void entity;
2181
2342
  });
@@ -2188,14 +2349,14 @@ describe('useUseCase', () => {
2188
2349
  ...entityReducers
2189
2350
  };
2190
2351
  };
2191
- const _renderHook41 = renderHook(() => {
2352
+ const _renderHook45 = renderHook(() => {
2192
2353
  return useUseCase(5, testUseCase);
2193
2354
  }),
2194
- result = _renderHook41.result,
2195
- unmount = _renderHook41.unmount;
2355
+ result = _renderHook45.result,
2356
+ unmount = _renderHook45.unmount;
2196
2357
  const current = result.current;
2197
- const _current1 = _slicedToArray(current, 2),
2198
- setEntity = _current1[1].setEntity;
2358
+ const _current13 = _slicedToArray(current, 2),
2359
+ setEntity = _current13[1].setEntity;
2199
2360
  expect(onDiscard).toHaveBeenCalledTimes(0);
2200
2361
  act(() => {
2201
2362
  setEntity(100);
@@ -2206,6 +2367,80 @@ describe('useUseCase', () => {
2206
2367
  expect(onDiscard).toHaveBeenCalledTimes(2);
2207
2368
  expect(onDiscard).toHaveBeenCalledWith(100);
2208
2369
  });
2370
+ test('Should support call lifecycleUseCase at parent usecase and child usecase', () => {
2371
+ const onParentBind = jest.fn(entity => {
2372
+ void entity;
2373
+ });
2374
+ const onParentChange = jest.fn((newEntity, oldEntity) => {
2375
+ void newEntity;
2376
+ void oldEntity;
2377
+ });
2378
+ const onParentUnbind = jest.fn(entity => {
2379
+ void entity;
2380
+ });
2381
+ const onChildBind = jest.fn(entity => {
2382
+ void entity;
2383
+ });
2384
+ const onChildChange = jest.fn((newEntity, oldEntity) => {
2385
+ void newEntity;
2386
+ void oldEntity;
2387
+ });
2388
+ const onChildUnbind = jest.fn(entity => {
2389
+ void entity;
2390
+ });
2391
+ const parentUseCase = () => {
2392
+ const entityReducers = entityUseCase();
2393
+ lifecycleUseCase({
2394
+ onBind: onParentBind,
2395
+ onUnbind: onParentUnbind,
2396
+ onChange: onParentChange
2397
+ });
2398
+ return {
2399
+ ...entityReducers
2400
+ };
2401
+ };
2402
+ const childUseCase = () => {
2403
+ const parentReducers = parentUseCase();
2404
+ lifecycleUseCase({
2405
+ onBind: onChildBind,
2406
+ onUnbind: onChildUnbind,
2407
+ onChange: onChildChange
2408
+ });
2409
+ return {
2410
+ ...parentReducers
2411
+ };
2412
+ };
2413
+ const _renderHook46 = renderHook(() => {
2414
+ return useUseCase(5, childUseCase);
2415
+ }),
2416
+ result = _renderHook46.result,
2417
+ unmount = _renderHook46.unmount;
2418
+ const current = result.current;
2419
+ const _current14 = _slicedToArray(current, 2),
2420
+ setEntity = _current14[1].setEntity;
2421
+ expect(onParentBind).toHaveBeenCalledTimes(1);
2422
+ expect(onParentBind).toHaveBeenCalledWith(5);
2423
+ expect(onParentChange).toHaveBeenCalledTimes(0);
2424
+ expect(onChildBind).toHaveBeenCalledTimes(1);
2425
+ expect(onChildBind).toHaveBeenCalledWith(5);
2426
+ expect(onChildChange).toHaveBeenCalledTimes(0);
2427
+ act(() => {
2428
+ setEntity(100);
2429
+ });
2430
+ expect(onParentBind).toHaveBeenCalledTimes(1);
2431
+ expect(onParentChange).toHaveBeenCalledTimes(1);
2432
+ expect(onParentChange).toHaveBeenCalledWith(100, 5);
2433
+ expect(onChildBind).toHaveBeenCalledTimes(1);
2434
+ expect(onChildChange).toHaveBeenCalledTimes(1);
2435
+ expect(onChildChange).toHaveBeenCalledWith(100, 5);
2436
+ expect(onParentUnbind).toHaveBeenCalledTimes(0);
2437
+ expect(onChildUnbind).toHaveBeenCalledTimes(0);
2438
+ unmount();
2439
+ expect(onParentUnbind).toHaveBeenCalledTimes(1);
2440
+ expect(onParentUnbind).toHaveBeenCalledWith(100);
2441
+ expect(onChildUnbind).toHaveBeenCalledTimes(1);
2442
+ expect(onChildUnbind).toHaveBeenCalledWith(100);
2443
+ });
2209
2444
  });
2210
2445
  describe('`useUseCase` should work the same as `useContextualCoreCollection`', () => {
2211
2446
  test('Provider should be returned in child component', () => {
@@ -2213,23 +2448,23 @@ describe('useUseCase', () => {
2213
2448
  const TestChild = () => {
2214
2449
  const core = useUseCase(fileUseCase);
2215
2450
  const length = core.length;
2216
- const _core = _slicedToArray(core, 3),
2217
- file = _core[0],
2218
- Provider = _core[2];
2451
+ const _core4 = _slicedToArray(core, 3),
2452
+ file = _core4[0],
2453
+ Provider = _core4[2];
2219
2454
  useEffect(() => {
2220
2455
  onCore(file, length, typeof Provider);
2221
2456
  });
2222
2457
  return _jsx(Fragment, {});
2223
2458
  };
2224
2459
  const TestParent = () => {
2225
- const _useUseCase30 = useUseCase(() => {
2460
+ const _useUseCase28 = useUseCase(() => {
2226
2461
  return {
2227
2462
  ...defaultFile,
2228
2463
  ext: EXT_1
2229
2464
  };
2230
2465
  }, fileUseCase),
2231
- _useUseCase31 = _slicedToArray(_useUseCase30, 3),
2232
- Provider = _useUseCase31[2];
2466
+ _useUseCase29 = _slicedToArray(_useUseCase28, 3),
2467
+ Provider = _useUseCase29[2];
2233
2468
  return _jsx(Provider, {
2234
2469
  children: _jsx(TestChild, {})
2235
2470
  });
@@ -2246,10 +2481,10 @@ describe('useUseCase', () => {
2246
2481
  const onPopupFile = jest.fn();
2247
2482
  const buttonText = 'button';
2248
2483
  const Popup = () => {
2249
- const _useUseCase32 = useUseCase(fileUseCase),
2250
- _useUseCase33 = _slicedToArray(_useUseCase32, 2),
2251
- file = _useUseCase33[0],
2252
- setEntity = _useUseCase33[1].setEntity;
2484
+ const _useUseCase30 = useUseCase(fileUseCase),
2485
+ _useUseCase31 = _slicedToArray(_useUseCase30, 2),
2486
+ file = _useUseCase31[0],
2487
+ setEntity = _useUseCase31[1].setEntity;
2253
2488
  const onClick = () => {
2254
2489
  setEntity({
2255
2490
  ext: EXT_2
@@ -2264,15 +2499,15 @@ describe('useUseCase', () => {
2264
2499
  });
2265
2500
  };
2266
2501
  const TestChild = () => {
2267
- const _useUseCase34 = useUseCase(fileUseCase),
2268
- _useUseCase35 = _slicedToArray(_useUseCase34, 3),
2269
- Provider = _useUseCase35[2];
2502
+ const _useUseCase32 = useUseCase(fileUseCase),
2503
+ _useUseCase33 = _slicedToArray(_useUseCase32, 3),
2504
+ Provider = _useUseCase33[2];
2270
2505
  return createPortal(_jsx(Provider, {
2271
2506
  children: _jsx(Popup, {})
2272
2507
  }), document.body);
2273
2508
  };
2274
2509
  const TestParent = () => {
2275
- const _useUseCase36 = useUseCase(() => {
2510
+ const _useUseCase34 = useUseCase(() => {
2276
2511
  return {
2277
2512
  ...defaultFile,
2278
2513
  ext: EXT_1
@@ -2280,9 +2515,9 @@ describe('useUseCase', () => {
2280
2515
  }, fileUseCase, {
2281
2516
  onChange
2282
2517
  }),
2283
- _useUseCase37 = _slicedToArray(_useUseCase36, 3),
2284
- file = _useUseCase37[0],
2285
- Provider = _useUseCase37[2];
2518
+ _useUseCase35 = _slicedToArray(_useUseCase34, 3),
2519
+ file = _useUseCase35[0],
2520
+ Provider = _useUseCase35[2];
2286
2521
  useEffect(() => {
2287
2522
  onRootFile(file);
2288
2523
  }, [file]);
@@ -2347,9 +2582,9 @@ describe('useUseCase', () => {
2347
2582
  return _jsx(Fragment, {});
2348
2583
  };
2349
2584
  const B = () => {
2350
- const _useUseCase38 = useUseCase(defaultFile, mockUseCase),
2351
- _useUseCase39 = _slicedToArray(_useUseCase38, 3),
2352
- Provider = _useUseCase39[2];
2585
+ const _useUseCase36 = useUseCase(defaultFile, mockUseCase),
2586
+ _useUseCase37 = _slicedToArray(_useUseCase36, 3),
2587
+ Provider = _useUseCase37[2];
2353
2588
  return _jsx(Provider, {
2354
2589
  children: _jsx(A, {})
2355
2590
  });
@@ -2370,9 +2605,9 @@ describe('useUseCase', () => {
2370
2605
  };
2371
2606
  };
2372
2607
  const A = () => {
2373
- const _useUseCase40 = useUseCase(stringUseCase),
2374
- _useUseCase41 = _slicedToArray(_useUseCase40, 2),
2375
- add = _useUseCase41[1].add;
2608
+ const _useUseCase38 = useUseCase(stringUseCase),
2609
+ _useUseCase39 = _slicedToArray(_useUseCase38, 2),
2610
+ add = _useUseCase39[1].add;
2376
2611
  const update = useUpdate();
2377
2612
  const onClick = () => {
2378
2613
  update();
@@ -2384,9 +2619,9 @@ describe('useUseCase', () => {
2384
2619
  });
2385
2620
  };
2386
2621
  const B = () => {
2387
- const _useUseCase42 = useUseCase('', stringUseCase),
2388
- _useUseCase43 = _slicedToArray(_useUseCase42, 3),
2389
- Provider = _useUseCase43[2];
2622
+ const _useUseCase40 = useUseCase('', stringUseCase),
2623
+ _useUseCase41 = _slicedToArray(_useUseCase40, 3),
2624
+ Provider = _useUseCase41[2];
2390
2625
  return _jsx(Provider, {
2391
2626
  children: _jsx(A, {})
2392
2627
  });
@@ -2411,9 +2646,9 @@ describe('useUseCase', () => {
2411
2646
  };
2412
2647
  };
2413
2648
  const A = () => {
2414
- const _useUseCase44 = useUseCase(stringUseCase),
2415
- _useUseCase45 = _slicedToArray(_useUseCase44, 2),
2416
- add = _useUseCase45[1].add;
2649
+ const _useUseCase42 = useUseCase(stringUseCase),
2650
+ _useUseCase43 = _slicedToArray(_useUseCase42, 2),
2651
+ add = _useUseCase43[1].add;
2417
2652
  const onClick = () => {
2418
2653
  add('x');
2419
2654
  };
@@ -2427,9 +2662,9 @@ describe('useUseCase', () => {
2427
2662
  });
2428
2663
  };
2429
2664
  const B = () => {
2430
- const _useUseCase46 = useUseCase('', stringUseCase),
2431
- _useUseCase47 = _slicedToArray(_useUseCase46, 3),
2432
- Provider = _useUseCase47[2];
2665
+ const _useUseCase44 = useUseCase('', stringUseCase),
2666
+ _useUseCase45 = _slicedToArray(_useUseCase44, 3),
2667
+ Provider = _useUseCase45[2];
2433
2668
  return _jsx(Provider, {
2434
2669
  children: _jsx(A, {})
2435
2670
  });
@@ -2458,11 +2693,11 @@ describe('useUseCase', () => {
2458
2693
  };
2459
2694
  };
2460
2695
  const A = () => {
2461
- const _useUseCase48 = useUseCase(stringUseCase),
2462
- _useUseCase49 = _slicedToArray(_useUseCase48, 2),
2463
- _useUseCase49$ = _useUseCase49[1],
2464
- add = _useUseCase49$.add,
2465
- setEntity = _useUseCase49$.setEntity;
2696
+ const _useUseCase46 = useUseCase(stringUseCase),
2697
+ _useUseCase47 = _slicedToArray(_useUseCase46, 2),
2698
+ _useUseCase47$ = _useUseCase47[1],
2699
+ add = _useUseCase47$.add,
2700
+ setEntity = _useUseCase47$.setEntity;
2466
2701
  const update = useUpdate();
2467
2702
  add(addedText);
2468
2703
  const onSet = () => {
@@ -2482,9 +2717,9 @@ describe('useUseCase', () => {
2482
2717
  });
2483
2718
  };
2484
2719
  const B = () => {
2485
- const _useUseCase50 = useUseCase('', stringUseCase),
2486
- _useUseCase51 = _slicedToArray(_useUseCase50, 3),
2487
- Provider = _useUseCase51[2];
2720
+ const _useUseCase48 = useUseCase('', stringUseCase),
2721
+ _useUseCase49 = _slicedToArray(_useUseCase48, 3),
2722
+ Provider = _useUseCase49[2];
2488
2723
  return _jsx(Provider, {
2489
2724
  children: _jsx(A, {})
2490
2725
  });
@@ -2513,8 +2748,8 @@ describe('useUseCase', () => {
2513
2748
  const onChangeB = jest.fn(updateChangeTimes);
2514
2749
  const onChangeC = jest.fn(updateChangeTimes);
2515
2750
  const buttonText = 'my button';
2516
- const A = _ref6 => {
2517
- let children = _ref6.children;
2751
+ const A = _ref7 => {
2752
+ let children = _ref7.children;
2518
2753
  useUseCase(fileUseCase, {
2519
2754
  onChange: onChangeA
2520
2755
  });
@@ -2529,12 +2764,12 @@ describe('useUseCase', () => {
2529
2764
  return _jsx(Fragment, {});
2530
2765
  };
2531
2766
  const C = () => {
2532
- const _useUseCase52 = useUseCase(defaultFile, fileUseCase, {
2767
+ const _useUseCase50 = useUseCase(defaultFile, fileUseCase, {
2533
2768
  onChange: onChangeC
2534
2769
  }),
2535
- _useUseCase53 = _slicedToArray(_useUseCase52, 3),
2536
- setPath = _useUseCase53[1].setPath,
2537
- Provider = _useUseCase53[2];
2770
+ _useUseCase51 = _slicedToArray(_useUseCase50, 3),
2771
+ setPath = _useUseCase51[1].setPath,
2772
+ Provider = _useUseCase51[2];
2538
2773
  const onFirstClick = () => {
2539
2774
  setPath(PATH_1);
2540
2775
  };
@@ -2561,11 +2796,11 @@ describe('useUseCase', () => {
2561
2796
  const firstButtonText = 'first button';
2562
2797
  const secondButtonText = 'second button';
2563
2798
  const A = () => {
2564
- const _useUseCase54 = useUseCase(fileUseCase, {
2799
+ const _useUseCase52 = useUseCase(fileUseCase, {
2565
2800
  onChange
2566
2801
  }),
2567
- _useUseCase55 = _slicedToArray(_useUseCase54, 2),
2568
- setPath = _useUseCase55[1].setPath;
2802
+ _useUseCase53 = _slicedToArray(_useUseCase52, 2),
2803
+ setPath = _useUseCase53[1].setPath;
2569
2804
  const onFirstClick = () => {
2570
2805
  setPath(PATH_1);
2571
2806
  onChange = onSecondChange;
@@ -2584,9 +2819,9 @@ describe('useUseCase', () => {
2584
2819
  });
2585
2820
  };
2586
2821
  const B = () => {
2587
- const _useUseCase56 = useUseCase(defaultFile, fileUseCase),
2588
- _useUseCase57 = _slicedToArray(_useUseCase56, 3),
2589
- Provider = _useUseCase57[2];
2822
+ const _useUseCase54 = useUseCase(defaultFile, fileUseCase),
2823
+ _useUseCase55 = _slicedToArray(_useUseCase54, 3),
2824
+ Provider = _useUseCase55[2];
2590
2825
  return _jsx(Provider, {
2591
2826
  children: _jsx(A, {})
2592
2827
  });
@@ -2605,73 +2840,17 @@ describe('useUseCase', () => {
2605
2840
  path: PATH_1
2606
2841
  });
2607
2842
  });
2608
- test('event options should be triggered at child components', async () => {
2609
- let readFilePromise = null;
2610
- const buttonText = 'my button';
2611
- const onReadFile1 = jest.fn(path => {
2612
- void path;
2613
- return 512;
2614
- });
2615
- const onReadFile2 = jest.fn(path => {
2616
- void path;
2617
- return 1024;
2618
- });
2619
- const onSizeChange = jest.fn();
2620
- const A = () => {
2621
- const _useUseCase58 = useUseCase(fileUseCase, {
2622
- onReadFile: onReadFile1
2623
- }),
2624
- _useUseCase59 = _slicedToArray(_useUseCase58, 2),
2625
- size = _useUseCase59[0].size,
2626
- readFile = _useUseCase59[1].readFile;
2627
- const onClick = () => {
2628
- readFilePromise = readFile(PATH_1);
2629
- };
2630
- useUpdateEffect(() => {
2631
- onSizeChange(size);
2632
- }, [size]);
2633
- return _jsx(Fragment, {
2634
- children: _jsx("button", {
2635
- onClick: onClick,
2636
- children: buttonText
2637
- })
2638
- });
2639
- };
2640
- const B = () => {
2641
- const _useUseCase60 = useUseCase(defaultFile, fileUseCase, {
2642
- onReadFile: onReadFile2
2643
- }),
2644
- _useUseCase61 = _slicedToArray(_useUseCase60, 3),
2645
- Provider = _useUseCase61[2];
2646
- return _jsx(Provider, {
2647
- children: _jsx(A, {})
2648
- });
2649
- };
2650
- render(_jsx(B, {}));
2651
- expect(onReadFile1).toHaveBeenCalledTimes(0);
2652
- expect(onReadFile2).toHaveBeenCalledTimes(0);
2653
- await act(async () => {
2654
- fireEvent.click(screen.getByText(buttonText));
2655
- await readFilePromise;
2656
- });
2657
- expect(onReadFile1).toHaveBeenCalledTimes(1);
2658
- expect(onReadFile2).toHaveBeenCalledWith(PATH_1);
2659
- expect(onReadFile1).toHaveBeenCalledTimes(1);
2660
- expect(onReadFile2).toHaveBeenCalledWith(PATH_1);
2661
- expect(onSizeChange).toHaveBeenCalledTimes(1);
2662
- expect(onSizeChange).toHaveBeenCalledWith(1024);
2663
- });
2664
2843
  test('`options.watch` should be triggered at child components', () => {
2665
2844
  const onExtChange = jest.fn();
2666
2845
  const firstButtonText = 'first button';
2667
2846
  const A = () => {
2668
- const _useUseCase62 = useUseCase(fileUseCase, {
2847
+ const _useUseCase56 = useUseCase(fileUseCase, {
2669
2848
  watch: {
2670
2849
  ext: onExtChange
2671
2850
  }
2672
2851
  }),
2673
- _useUseCase63 = _slicedToArray(_useUseCase62, 2),
2674
- setPath = _useUseCase63[1].setPath;
2852
+ _useUseCase57 = _slicedToArray(_useUseCase56, 2),
2853
+ setPath = _useUseCase57[1].setPath;
2675
2854
  const onFirstClick = () => {
2676
2855
  setPath(PATH_1);
2677
2856
  };
@@ -2681,9 +2860,9 @@ describe('useUseCase', () => {
2681
2860
  });
2682
2861
  };
2683
2862
  const B = () => {
2684
- const _useUseCase64 = useUseCase(defaultFile, fileUseCase, {}),
2685
- _useUseCase65 = _slicedToArray(_useUseCase64, 3),
2686
- Provider = _useUseCase65[2];
2863
+ const _useUseCase58 = useUseCase(defaultFile, fileUseCase, {}),
2864
+ _useUseCase59 = _slicedToArray(_useUseCase58, 3),
2865
+ Provider = _useUseCase59[2];
2687
2866
  return _jsx(Provider, {
2688
2867
  children: _jsx(A, {})
2689
2868
  });
@@ -2714,8 +2893,8 @@ describe('useUseCase', () => {
2714
2893
  const onChangeB = jest.fn(updateChangeTimes);
2715
2894
  const onChangeC = jest.fn(updateChangeTimes);
2716
2895
  const buttonText = 'my button';
2717
- const A = _ref7 => {
2718
- let children = _ref7.children;
2896
+ const A = _ref8 => {
2897
+ let children = _ref8.children;
2719
2898
  useUseCase(fileUseCase, {
2720
2899
  watch: {
2721
2900
  ext: onChangeA
@@ -2734,14 +2913,14 @@ describe('useUseCase', () => {
2734
2913
  return _jsx(Fragment, {});
2735
2914
  };
2736
2915
  const C = () => {
2737
- const _useUseCase66 = useUseCase(defaultFile, fileUseCase, {
2916
+ const _useUseCase60 = useUseCase(defaultFile, fileUseCase, {
2738
2917
  watch: {
2739
2918
  ext: onChangeC
2740
2919
  }
2741
2920
  }),
2742
- _useUseCase67 = _slicedToArray(_useUseCase66, 3),
2743
- setPath = _useUseCase67[1].setPath,
2744
- Provider = _useUseCase67[2];
2921
+ _useUseCase61 = _slicedToArray(_useUseCase60, 3),
2922
+ setPath = _useUseCase61[1].setPath,
2923
+ Provider = _useUseCase61[2];
2745
2924
  const onFirstClick = () => {
2746
2925
  setPath(PATH_1);
2747
2926
  };
@@ -2768,13 +2947,13 @@ describe('useUseCase', () => {
2768
2947
  const firstButtonText = 'first button';
2769
2948
  const secondButtonText = 'second button';
2770
2949
  const A = () => {
2771
- const _useUseCase68 = useUseCase(fileUseCase, {
2950
+ const _useUseCase62 = useUseCase(fileUseCase, {
2772
2951
  watch: {
2773
2952
  ext: onExtChange
2774
2953
  }
2775
2954
  }),
2776
- _useUseCase69 = _slicedToArray(_useUseCase68, 2),
2777
- setPath = _useUseCase69[1].setPath;
2955
+ _useUseCase63 = _slicedToArray(_useUseCase62, 2),
2956
+ setPath = _useUseCase63[1].setPath;
2778
2957
  const onFirstClick = () => {
2779
2958
  setPath(PATH_1);
2780
2959
  onExtChange = onSecondExtChange;
@@ -2793,9 +2972,9 @@ describe('useUseCase', () => {
2793
2972
  });
2794
2973
  };
2795
2974
  const B = () => {
2796
- const _useUseCase70 = useUseCase(defaultFile, fileUseCase),
2797
- _useUseCase71 = _slicedToArray(_useUseCase70, 3),
2798
- Provider = _useUseCase71[2];
2975
+ const _useUseCase64 = useUseCase(defaultFile, fileUseCase),
2976
+ _useUseCase65 = _slicedToArray(_useUseCase64, 3),
2977
+ Provider = _useUseCase65[2];
2799
2978
  return _jsx(Provider, {
2800
2979
  children: _jsx(A, {})
2801
2980
  });
@@ -2823,38 +3002,38 @@ describe('useUseCase', () => {
2823
3002
  });
2824
3003
  describe('`useUseCase` should work the same as `useReducers`', () => {
2825
3004
  test('`entity` should equal `defaultFile`', () => {
2826
- const _renderHook42 = renderHook(() => {
3005
+ const _renderHook47 = renderHook(() => {
2827
3006
  return useUseCase(mathUseCase);
2828
3007
  }),
2829
- result = _renderHook42.result;
3008
+ result = _renderHook47.result;
2830
3009
  const reducers = result.current;
2831
3010
  expect(Array.isArray(reducers)).toBe(false);
2832
3011
  });
2833
3012
  test('returned reducer should work', () => {
2834
- const _renderHook43 = renderHook(() => {
3013
+ const _renderHook48 = renderHook(() => {
2835
3014
  return useUseCase(mathUseCase);
2836
3015
  }),
2837
- result = _renderHook43.result;
3016
+ result = _renderHook48.result;
2838
3017
  const reducers = result.current;
2839
3018
  const add = reducers.add;
2840
3019
  expect(add(1, 2)).toBe(3);
2841
3020
  });
2842
3021
  test('`usecase` should be called only once if deps has not provided', () => {
2843
3022
  const mockUseCase = jest.fn(mathUseCase);
2844
- const _renderHook44 = renderHook(() => {
3023
+ const _renderHook49 = renderHook(() => {
2845
3024
  return useUseCase(mockUseCase);
2846
3025
  }),
2847
- rerender = _renderHook44.rerender;
3026
+ rerender = _renderHook49.rerender;
2848
3027
  expect(mockUseCase).toHaveBeenCalledTimes(1);
2849
3028
  rerender();
2850
3029
  expect(mockUseCase).toHaveBeenCalledTimes(1);
2851
3030
  });
2852
3031
  test('`usecase` should be called only once if deps has not changed', () => {
2853
3032
  const mockUseCase = jest.fn(mathUseCase);
2854
- const _renderHook45 = renderHook(() => {
3033
+ const _renderHook50 = renderHook(() => {
2855
3034
  return useUseCase(mockUseCase, {}, [1, 'x']);
2856
3035
  }),
2857
- rerender = _renderHook45.rerender;
3036
+ rerender = _renderHook50.rerender;
2858
3037
  expect(mockUseCase).toHaveBeenCalledTimes(1);
2859
3038
  rerender();
2860
3039
  expect(mockUseCase).toHaveBeenCalledTimes(1);
@@ -2862,10 +3041,10 @@ describe('useUseCase', () => {
2862
3041
  test('`usecase` should be called if deps has changed', () => {
2863
3042
  let i = 0;
2864
3043
  const mockUseCase = jest.fn(mathUseCase);
2865
- const _renderHook46 = renderHook(() => {
3044
+ const _renderHook51 = renderHook(() => {
2866
3045
  return useUseCase(mockUseCase, {}, [i++, 'x']);
2867
3046
  }),
2868
- rerender = _renderHook46.rerender;
3047
+ rerender = _renderHook51.rerender;
2869
3048
  expect(mockUseCase).toHaveBeenCalledTimes(1);
2870
3049
  rerender();
2871
3050
  expect(mockUseCase).toHaveBeenCalledTimes(2);
@@ -2873,8 +3052,8 @@ describe('useUseCase', () => {
2873
3052
  test('reducer call should not be cached if component is at rendering phase', () => {
2874
3053
  const buttonText = 'button';
2875
3054
  const CacheTestComponent = () => {
2876
- const _useUseCase72 = useUseCase(mathUseCase),
2877
- subtraction = _useUseCase72.subtraction;
3055
+ const _useUseCase66 = useUseCase(mathUseCase),
3056
+ subtraction = _useUseCase66.subtraction;
2878
3057
  const update = useUpdate();
2879
3058
  const onClick = () => {
2880
3059
  update();
@@ -2897,8 +3076,8 @@ describe('useUseCase', () => {
2897
3076
  test('reducer call should not be cached if component is not at rendering phase', () => {
2898
3077
  const buttonText = 'button';
2899
3078
  const CacheTestComponent = () => {
2900
- const _useUseCase73 = useUseCase(mathUseCase),
2901
- subtraction = _useUseCase73.subtraction;
3079
+ const _useUseCase67 = useUseCase(mathUseCase),
3080
+ subtraction = _useUseCase67.subtraction;
2902
3081
  const onClick = () => {
2903
3082
  subtraction(5, 3);
2904
3083
  };
@@ -2926,8 +3105,8 @@ describe('useUseCase', () => {
2926
3105
  let count = 0;
2927
3106
  const buttonText = 'button';
2928
3107
  const StringUseCaseTestComponent = () => {
2929
- const _useUseCase74 = useUseCase(mathUseCase),
2930
- subtraction = _useUseCase74.subtraction;
3108
+ const _useUseCase68 = useUseCase(mathUseCase),
3109
+ subtraction = _useUseCase68.subtraction;
2931
3110
  const update = useUpdate();
2932
3111
  subtraction(5, count++);
2933
3112
  const onUpdate = () => {
@@ -2949,12 +3128,12 @@ describe('useUseCase', () => {
2949
3128
  expect(subtractionReducer).toHaveReturnedWith(4);
2950
3129
  });
2951
3130
  test('`options.extraValue` should be added after call `add` method', () => {
2952
- const _renderHook47 = renderHook(() => {
3131
+ const _renderHook52 = renderHook(() => {
2953
3132
  return useUseCase(mathUseCase, {
2954
3133
  extraValue: 5
2955
3134
  });
2956
3135
  }),
2957
- result = _renderHook47.result;
3136
+ result = _renderHook52.result;
2958
3137
  const reducers = result.current;
2959
3138
  const add = reducers.add;
2960
3139
  expect(add(1, 2)).toBe(8);
@@ -2962,7 +3141,7 @@ describe('useUseCase', () => {
2962
3141
  test('when `options` has changed, it should not trigger update', () => {
2963
3142
  const onUpdate = jest.fn();
2964
3143
  const onDeepUpdate = jest.fn();
2965
- const _renderHook48 = renderHook(() => {
3144
+ const _renderHook53 = renderHook(() => {
2966
3145
  const _useState7 = useState(0),
2967
3146
  _useState8 = _slicedToArray(_useState7, 2),
2968
3147
  extraValue = _useState8[0],
@@ -2978,7 +3157,7 @@ describe('useUseCase', () => {
2978
3157
  }, [reducers]);
2979
3158
  return setExtraValue;
2980
3159
  }),
2981
- result = _renderHook48.result;
3160
+ result = _renderHook53.result;
2982
3161
  expect(onUpdate).toHaveBeenCalledTimes(0);
2983
3162
  expect(onDeepUpdate).toHaveBeenCalledTimes(0);
2984
3163
  act(() => {
@@ -2990,7 +3169,7 @@ describe('useUseCase', () => {
2990
3169
  test('when `deps` change, it should update reducers', () => {
2991
3170
  const onUpdate = jest.fn();
2992
3171
  const onDeepUpdate = jest.fn();
2993
- const _renderHook49 = renderHook(() => {
3172
+ const _renderHook54 = renderHook(() => {
2994
3173
  const _useState9 = useState(0),
2995
3174
  _useState0 = _slicedToArray(_useState9, 2),
2996
3175
  extraValue = _useState0[0],
@@ -3006,7 +3185,7 @@ describe('useUseCase', () => {
3006
3185
  }, [reducers]);
3007
3186
  return setExtraValue;
3008
3187
  }),
3009
- result = _renderHook49.result;
3188
+ result = _renderHook54.result;
3010
3189
  expect(onUpdate).toHaveBeenCalledTimes(0);
3011
3190
  expect(onDeepUpdate).toHaveBeenCalledTimes(0);
3012
3191
  act(() => {
@@ -3018,7 +3197,7 @@ describe('useUseCase', () => {
3018
3197
  test('empty `deps` should not update reducers', () => {
3019
3198
  const onUpdate = jest.fn();
3020
3199
  const onDeepUpdate = jest.fn();
3021
- const _renderHook50 = renderHook(() => {
3200
+ const _renderHook55 = renderHook(() => {
3022
3201
  const _useState1 = useState(0),
3023
3202
  _useState10 = _slicedToArray(_useState1, 2),
3024
3203
  extraValue = _useState10[0],
@@ -3034,7 +3213,7 @@ describe('useUseCase', () => {
3034
3213
  }, [reducers]);
3035
3214
  return setExtraValue;
3036
3215
  }),
3037
- result = _renderHook50.result;
3216
+ result = _renderHook55.result;
3038
3217
  expect(onUpdate).toHaveBeenCalledTimes(0);
3039
3218
  expect(onDeepUpdate).toHaveBeenCalledTimes(0);
3040
3219
  act(() => {