@mic-rexjs/usecases-react 3.6.3 → 4.0.0-beta.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 (68) hide show
  1. package/dist/index.min.js +1 -1
  2. package/es/classes/OptionsSet/index.d.ts +6 -0
  3. package/es/classes/OptionsSet/index.js +44 -0
  4. package/es/classes/OptionsSet/types.d.ts +8 -0
  5. package/es/hooks/useContextValue/index.d.ts +6 -0
  6. package/es/hooks/useContextValue/index.js +20 -0
  7. package/es/hooks/useContextualItem/index.d.ts +2 -2
  8. package/es/hooks/useContextualItem/index.js +8 -28
  9. package/es/hooks/useEntity/index.d.ts +1 -1
  10. package/es/hooks/useEntity/index.js +21 -15
  11. package/es/hooks/useExec/index.d.ts +2 -2
  12. package/es/hooks/useExec/index.js +19 -6
  13. package/es/hooks/useExec/types.d.ts +3 -0
  14. package/es/hooks/useFullArguments/types.d.ts +2 -2
  15. package/es/hooks/useOptions/index.d.ts +5 -0
  16. package/es/hooks/useOptions/index.js +54 -0
  17. package/es/hooks/useOptions/types.d.ts +5 -0
  18. package/es/hooks/useOptionsSet/index.d.ts +5 -0
  19. package/es/hooks/useOptionsSet/index.js +16 -0
  20. package/es/hooks/useProvider/index.d.ts +1 -3
  21. package/es/hooks/useProvider/index.js +2 -10
  22. package/es/hooks/useReducers/index.d.ts +1 -1
  23. package/es/hooks/useReducers/index.js +6 -25
  24. package/es/hooks/useRootCreation/index.d.ts +4 -0
  25. package/es/hooks/useRootCreation/index.js +20 -0
  26. package/es/hooks/useRootCreation/types.d.ts +3 -0
  27. package/es/hooks/useRootCreation/types.js +1 -0
  28. package/es/hooks/useStore/index.js +7 -12
  29. package/es/hooks/useUseCase/index.js +12 -6
  30. package/es/hooks/useUseCase/index.test.js +286 -126
  31. package/es/hooks/useUseCase/types.d.ts +4 -5
  32. package/es/methods/cacheCall/index.d.ts +2 -0
  33. package/es/methods/cacheCall/index.js +38 -0
  34. package/es/methods/cacheCall/types.d.ts +12 -0
  35. package/es/methods/cacheCall/types.js +1 -0
  36. package/es/methods/cacheCalls/index.d.ts +2 -0
  37. package/es/methods/cacheCalls/index.js +12 -0
  38. package/es/usecases/contextUseCase/types.d.ts +3 -1
  39. package/es/usecases/lifecycleEventUseCase/types.d.ts +14 -0
  40. package/es/usecases/lifecycleUseCase/index.js +5 -1
  41. package/lib/classes/OptionsSet/index.js +94 -0
  42. package/lib/hooks/useContextValue/index.js +26 -0
  43. package/lib/hooks/useContextualItem/index.js +8 -28
  44. package/lib/hooks/useEntity/index.js +20 -14
  45. package/lib/hooks/useExec/index.js +18 -5
  46. package/lib/hooks/useOptions/index.js +61 -0
  47. package/lib/hooks/useOptionsSet/index.js +22 -0
  48. package/lib/hooks/useProvider/index.js +1 -9
  49. package/lib/hooks/useReducers/index.js +8 -31
  50. package/lib/hooks/useRootCreation/index.js +26 -0
  51. package/lib/hooks/useRootCreation/types.js +5 -0
  52. package/lib/hooks/useStore/index.js +7 -12
  53. package/lib/hooks/useUseCase/index.js +13 -7
  54. package/lib/hooks/useUseCase/index.test.js +322 -127
  55. package/lib/methods/cacheCall/index.js +44 -0
  56. package/lib/methods/cacheCall/types.js +5 -0
  57. package/lib/methods/cacheCalls/index.js +19 -0
  58. package/lib/usecases/lifecycleUseCase/index.js +5 -1
  59. package/package.json +3 -3
  60. package/es/hooks/useContextualItem/types.d.ts +0 -3
  61. package/es/usecases/methodUseCase/index.d.ts +0 -2
  62. package/es/usecases/methodUseCase/index.js +0 -72
  63. package/es/usecases/methodUseCase/types.d.ts +0 -21
  64. package/lib/usecases/methodUseCase/index.js +0 -79
  65. /package/es/{hooks/useContextualItem → classes/OptionsSet}/types.js +0 -0
  66. /package/es/{usecases/methodUseCase → hooks/useOptions}/types.js +0 -0
  67. /package/lib/{hooks/useContextualItem → classes/OptionsSet}/types.js +0 -0
  68. /package/lib/{usecases/methodUseCase → hooks/useOptions}/types.js +0 -0
@@ -26,6 +26,7 @@ const fileUseCase = function () {
26
26
  const entityReducers = entityUseCase();
27
27
  const _options$pathPrefix = options.pathPrefix,
28
28
  pathPrefix = _options$pathPrefix === void 0 ? '' : _options$pathPrefix,
29
+ onReadFile = options.onReadFile,
29
30
  onPathChange = options.onPathChange;
30
31
  const init = function (entity) {
31
32
  let newEntity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultFile;
@@ -47,7 +48,8 @@ const fileUseCase = function () {
47
48
  onPathChange === null || onPathChange === void 0 || onPathChange(newPath, oldPath);
48
49
  };
49
50
  const readFile = async function* (entity, path) {
50
- const size = 2000;
51
+ var _onReadFile;
52
+ const size = (_onReadFile = onReadFile === null || onReadFile === void 0 ? void 0 : onReadFile(path)) !== null && _onReadFile !== void 0 ? _onReadFile : 2000;
51
53
  yield* setPath(entity, path);
52
54
  await Promise.resolve(null);
53
55
  yield oldEntity => {
@@ -946,7 +948,7 @@ describe('useUseCase', () => {
946
948
  fireEvent.click(screen.getByText(updateButtonText));
947
949
  expect(addReducer).toHaveBeenCalledTimes(3);
948
950
  });
949
- test('`options.onChange` should be trigger when entity has changed', () => {
951
+ test('`options.onChange` should be triggered when entity has changed', () => {
950
952
  const onChange = jest.fn();
951
953
  const _renderHook23 = renderHook(() => {
952
954
  return useUseCase(defaultFile, fileUseCase, {
@@ -1135,6 +1137,44 @@ describe('useUseCase', () => {
1135
1137
  expect(onUpdate).toHaveBeenCalledTimes(0);
1136
1138
  expect(onDeepUpdate).toHaveBeenCalledTimes(0);
1137
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
+ });
1138
1178
  test(`should call latest functions of usecase options even deps has not change`, () => {
1139
1179
  const onPathChange1 = jest.fn();
1140
1180
  const onPathChange2 = jest.fn();
@@ -1162,7 +1202,7 @@ describe('useUseCase', () => {
1162
1202
  expect(onPathChange2).toHaveBeenCalledTimes(1);
1163
1203
  expect(onPathChange2).toHaveBeenLastCalledWith(PATH_2, PATH_1);
1164
1204
  });
1165
- test('`options.watch` should be trigger after entity changed', () => {
1205
+ test('`options.watch` should be triggered after entity changed', () => {
1166
1206
  const onPathChange = jest.fn();
1167
1207
  const onSizeChange = jest.fn();
1168
1208
  const _renderHook30 = renderHook(() => {
@@ -1195,7 +1235,7 @@ describe('useUseCase', () => {
1195
1235
  oldValue: ''
1196
1236
  });
1197
1237
  });
1198
- test('`options.watch` should be trigger after update entity by entity initializer', () => {
1238
+ test('`options.watch` should be triggered after update entity by entity initializer', () => {
1199
1239
  const onPathChange = jest.fn();
1200
1240
  const _renderHook31 = renderHook(function () {
1201
1241
  let path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
@@ -1244,7 +1284,7 @@ describe('useUseCase', () => {
1244
1284
  oldValue: PATH_1
1245
1285
  });
1246
1286
  });
1247
- test('`options.watch` should be trigger after update entity by entity initializer at child component', () => {
1287
+ test('`options.watch` should be triggered after update entity by entity initializer at child component', () => {
1248
1288
  const onPathChange = jest.fn();
1249
1289
  const TestChild = () => {
1250
1290
  useUseCase(fileUseCase, {
@@ -1257,15 +1297,15 @@ describe('useUseCase', () => {
1257
1297
  const TestParent = _ref5 => {
1258
1298
  let file = _ref5.file;
1259
1299
  const path = file.path;
1260
- const _useUseCase10 = useUseCase(function () {
1300
+ const _useUseCase12 = useUseCase(function () {
1261
1301
  let currentFile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultFile;
1262
1302
  return {
1263
1303
  ...currentFile,
1264
1304
  path
1265
1305
  };
1266
1306
  }, fileUseCase, {}, [path]),
1267
- _useUseCase11 = _slicedToArray(_useUseCase10, 3),
1268
- Provider = _useUseCase11[2];
1307
+ _useUseCase13 = _slicedToArray(_useUseCase12, 3),
1308
+ Provider = _useUseCase13[2];
1269
1309
  return _jsx(Provider, {
1270
1310
  children: _jsx(TestChild, {})
1271
1311
  });
@@ -1963,15 +2003,15 @@ describe('useUseCase', () => {
1963
2003
  return entityUseCase();
1964
2004
  };
1965
2005
  const TestChildComponent = () => {
1966
- const _useUseCase12 = useUseCase(numberUseCase),
1967
- _useUseCase13 = _slicedToArray(_useUseCase12, 1),
1968
- numberValue = _useUseCase13[0];
1969
- const _useUseCase14 = useUseCase(stringUseCase),
2006
+ const _useUseCase14 = useUseCase(numberUseCase),
1970
2007
  _useUseCase15 = _slicedToArray(_useUseCase14, 1),
1971
- stringValue = _useUseCase15[0];
1972
- const _useUseCase16 = useUseCase(booleanUseCase),
2008
+ numberValue = _useUseCase15[0];
2009
+ const _useUseCase16 = useUseCase(stringUseCase),
1973
2010
  _useUseCase17 = _slicedToArray(_useUseCase16, 1),
1974
- booleanValue = _useUseCase17[0];
2011
+ stringValue = _useUseCase17[0];
2012
+ const _useUseCase18 = useUseCase(booleanUseCase),
2013
+ _useUseCase19 = _slicedToArray(_useUseCase18, 1),
2014
+ booleanValue = _useUseCase19[0];
1975
2015
  useMount(() => {
1976
2016
  onNumberMount(numberValue);
1977
2017
  onStringMount(stringValue);
@@ -1980,15 +2020,15 @@ describe('useUseCase', () => {
1980
2020
  return null;
1981
2021
  };
1982
2022
  const TestParentComponent = () => {
1983
- const _useUseCase18 = useUseCase(11, numberUseCase),
1984
- _useUseCase19 = _slicedToArray(_useUseCase18, 3),
1985
- NumberProvider = _useUseCase19[2];
1986
- const _useUseCase20 = useUseCase('hello', stringUseCase),
2023
+ const _useUseCase20 = useUseCase(11, numberUseCase),
1987
2024
  _useUseCase21 = _slicedToArray(_useUseCase20, 3),
1988
- StringProvider = _useUseCase21[2];
1989
- const _useUseCase22 = useUseCase(true, booleanUseCase),
2025
+ NumberProvider = _useUseCase21[2];
2026
+ const _useUseCase22 = useUseCase('hello', stringUseCase),
1990
2027
  _useUseCase23 = _slicedToArray(_useUseCase22, 3),
1991
- BooleanProvider = _useUseCase23[2];
2028
+ StringProvider = _useUseCase23[2];
2029
+ const _useUseCase24 = useUseCase(true, booleanUseCase),
2030
+ _useUseCase25 = _slicedToArray(_useUseCase24, 3),
2031
+ BooleanProvider = _useUseCase25[2];
1992
2032
  return _jsx(NumberProvider, {
1993
2033
  with: [StringProvider, BooleanProvider],
1994
2034
  children: _jsx(TestChildComponent, {})
@@ -2004,17 +2044,18 @@ describe('useUseCase', () => {
2004
2044
  void entity;
2005
2045
  });
2006
2046
  const testUseCase = () => {
2007
- const lifecycleReducers = lifecycleUseCase({
2047
+ const entityReducers = entityUseCase();
2048
+ lifecycleUseCase({
2008
2049
  onBind
2009
2050
  });
2010
2051
  return {
2011
- ...lifecycleReducers
2052
+ ...entityReducers
2012
2053
  };
2013
2054
  };
2014
2055
  renderHook(() => {
2015
- const _useUseCase24 = useUseCase(5, testUseCase),
2016
- _useUseCase25 = _slicedToArray(_useUseCase24, 2),
2017
- setEntity = _useUseCase25[1].setEntity;
2056
+ const _useUseCase26 = useUseCase(5, testUseCase),
2057
+ _useUseCase27 = _slicedToArray(_useUseCase26, 2),
2058
+ setEntity = _useUseCase27[1].setEntity;
2018
2059
  useMount(() => {
2019
2060
  setEntity(100);
2020
2061
  });
@@ -2028,11 +2069,12 @@ describe('useUseCase', () => {
2028
2069
  void oldEntity;
2029
2070
  });
2030
2071
  const testUseCase = () => {
2031
- const lifecycleReducers = lifecycleUseCase({
2072
+ const entityReducers = entityUseCase();
2073
+ lifecycleUseCase({
2032
2074
  onChange
2033
2075
  });
2034
2076
  return {
2035
- ...lifecycleReducers
2077
+ ...entityReducers
2036
2078
  };
2037
2079
  };
2038
2080
  const _renderHook37 = renderHook(() => {
@@ -2055,11 +2097,12 @@ describe('useUseCase', () => {
2055
2097
  void oldEntity;
2056
2098
  });
2057
2099
  const testUseCase = () => {
2058
- const lifecycleReducers = lifecycleUseCase({
2100
+ const entityReducers = entityUseCase();
2101
+ lifecycleUseCase({
2059
2102
  onUpdate
2060
2103
  });
2061
2104
  return {
2062
- ...lifecycleReducers
2105
+ ...entityReducers
2063
2106
  };
2064
2107
  };
2065
2108
  const _renderHook38 = renderHook(() => {
@@ -2081,17 +2124,18 @@ describe('useUseCase', () => {
2081
2124
  void entity;
2082
2125
  });
2083
2126
  const testUseCase = () => {
2084
- const lifecycleReducers = lifecycleUseCase({
2127
+ const entityReducers = entityUseCase();
2128
+ lifecycleUseCase({
2085
2129
  onUnbind
2086
2130
  });
2087
2131
  return {
2088
- ...lifecycleReducers
2132
+ ...entityReducers
2089
2133
  };
2090
2134
  };
2091
2135
  const _renderHook39 = renderHook(() => {
2092
- const _useUseCase26 = useUseCase(5, testUseCase),
2093
- _useUseCase27 = _slicedToArray(_useUseCase26, 2),
2094
- setEntity = _useUseCase27[1].setEntity;
2136
+ const _useUseCase28 = useUseCase(5, testUseCase),
2137
+ _useUseCase29 = _slicedToArray(_useUseCase28, 2),
2138
+ setEntity = _useUseCase29[1].setEntity;
2095
2139
  useMount(() => {
2096
2140
  setEntity(100);
2097
2141
  });
@@ -2102,6 +2146,66 @@ describe('useUseCase', () => {
2102
2146
  expect(onUnbind).toHaveBeenCalledTimes(1);
2103
2147
  expect(onUnbind).toHaveBeenCalledWith(100);
2104
2148
  });
2149
+ test('`onAdopt` event should be called when entity change', () => {
2150
+ const onAdopt = jest.fn((newEntity, oldeEntity) => {
2151
+ void newEntity;
2152
+ void oldeEntity;
2153
+ });
2154
+ const testUseCase = () => {
2155
+ const entityReducers = entityUseCase();
2156
+ lifecycleUseCase({
2157
+ onAdopt
2158
+ });
2159
+ return {
2160
+ ...entityReducers
2161
+ };
2162
+ };
2163
+ const _renderHook40 = renderHook(() => {
2164
+ return useUseCase(5, testUseCase);
2165
+ }),
2166
+ result = _renderHook40.result;
2167
+ const current = result.current;
2168
+ const _current0 = _slicedToArray(current, 2),
2169
+ setEntity = _current0[1].setEntity;
2170
+ expect(onAdopt).toHaveBeenCalledTimes(1);
2171
+ expect(onAdopt).toHaveBeenCalledWith(5);
2172
+ act(() => {
2173
+ setEntity(100);
2174
+ });
2175
+ expect(onAdopt).toHaveBeenCalledTimes(2);
2176
+ expect(onAdopt).toHaveBeenCalledWith(100, 5);
2177
+ });
2178
+ test('`onDiscard` event should be called when component unmount', () => {
2179
+ const onDiscard = jest.fn(entity => {
2180
+ void entity;
2181
+ });
2182
+ const testUseCase = () => {
2183
+ const entityReducers = entityUseCase();
2184
+ lifecycleUseCase({
2185
+ onDiscard
2186
+ });
2187
+ return {
2188
+ ...entityReducers
2189
+ };
2190
+ };
2191
+ const _renderHook41 = renderHook(() => {
2192
+ return useUseCase(5, testUseCase);
2193
+ }),
2194
+ result = _renderHook41.result,
2195
+ unmount = _renderHook41.unmount;
2196
+ const current = result.current;
2197
+ const _current1 = _slicedToArray(current, 2),
2198
+ setEntity = _current1[1].setEntity;
2199
+ expect(onDiscard).toHaveBeenCalledTimes(0);
2200
+ act(() => {
2201
+ setEntity(100);
2202
+ });
2203
+ expect(onDiscard).toHaveBeenCalledTimes(1);
2204
+ expect(onDiscard).toHaveBeenCalledWith(5);
2205
+ unmount();
2206
+ expect(onDiscard).toHaveBeenCalledTimes(2);
2207
+ expect(onDiscard).toHaveBeenCalledWith(100);
2208
+ });
2105
2209
  });
2106
2210
  describe('`useUseCase` should work the same as `useContextualCoreCollection`', () => {
2107
2211
  test('Provider should be returned in child component', () => {
@@ -2118,14 +2222,14 @@ describe('useUseCase', () => {
2118
2222
  return _jsx(Fragment, {});
2119
2223
  };
2120
2224
  const TestParent = () => {
2121
- const _useUseCase28 = useUseCase(() => {
2225
+ const _useUseCase30 = useUseCase(() => {
2122
2226
  return {
2123
2227
  ...defaultFile,
2124
2228
  ext: EXT_1
2125
2229
  };
2126
2230
  }, fileUseCase),
2127
- _useUseCase29 = _slicedToArray(_useUseCase28, 3),
2128
- Provider = _useUseCase29[2];
2231
+ _useUseCase31 = _slicedToArray(_useUseCase30, 3),
2232
+ Provider = _useUseCase31[2];
2129
2233
  return _jsx(Provider, {
2130
2234
  children: _jsx(TestChild, {})
2131
2235
  });
@@ -2142,10 +2246,10 @@ describe('useUseCase', () => {
2142
2246
  const onPopupFile = jest.fn();
2143
2247
  const buttonText = 'button';
2144
2248
  const Popup = () => {
2145
- const _useUseCase30 = useUseCase(fileUseCase),
2146
- _useUseCase31 = _slicedToArray(_useUseCase30, 2),
2147
- file = _useUseCase31[0],
2148
- setEntity = _useUseCase31[1].setEntity;
2249
+ const _useUseCase32 = useUseCase(fileUseCase),
2250
+ _useUseCase33 = _slicedToArray(_useUseCase32, 2),
2251
+ file = _useUseCase33[0],
2252
+ setEntity = _useUseCase33[1].setEntity;
2149
2253
  const onClick = () => {
2150
2254
  setEntity({
2151
2255
  ext: EXT_2
@@ -2160,15 +2264,15 @@ describe('useUseCase', () => {
2160
2264
  });
2161
2265
  };
2162
2266
  const TestChild = () => {
2163
- const _useUseCase32 = useUseCase(fileUseCase),
2164
- _useUseCase33 = _slicedToArray(_useUseCase32, 3),
2165
- Provider = _useUseCase33[2];
2267
+ const _useUseCase34 = useUseCase(fileUseCase),
2268
+ _useUseCase35 = _slicedToArray(_useUseCase34, 3),
2269
+ Provider = _useUseCase35[2];
2166
2270
  return createPortal(_jsx(Provider, {
2167
2271
  children: _jsx(Popup, {})
2168
2272
  }), document.body);
2169
2273
  };
2170
2274
  const TestParent = () => {
2171
- const _useUseCase34 = useUseCase(() => {
2275
+ const _useUseCase36 = useUseCase(() => {
2172
2276
  return {
2173
2277
  ...defaultFile,
2174
2278
  ext: EXT_1
@@ -2176,9 +2280,9 @@ describe('useUseCase', () => {
2176
2280
  }, fileUseCase, {
2177
2281
  onChange
2178
2282
  }),
2179
- _useUseCase35 = _slicedToArray(_useUseCase34, 3),
2180
- file = _useUseCase35[0],
2181
- Provider = _useUseCase35[2];
2283
+ _useUseCase37 = _slicedToArray(_useUseCase36, 3),
2284
+ file = _useUseCase37[0],
2285
+ Provider = _useUseCase37[2];
2182
2286
  useEffect(() => {
2183
2287
  onRootFile(file);
2184
2288
  }, [file]);
@@ -2243,9 +2347,9 @@ describe('useUseCase', () => {
2243
2347
  return _jsx(Fragment, {});
2244
2348
  };
2245
2349
  const B = () => {
2246
- const _useUseCase36 = useUseCase(defaultFile, mockUseCase),
2247
- _useUseCase37 = _slicedToArray(_useUseCase36, 3),
2248
- Provider = _useUseCase37[2];
2350
+ const _useUseCase38 = useUseCase(defaultFile, mockUseCase),
2351
+ _useUseCase39 = _slicedToArray(_useUseCase38, 3),
2352
+ Provider = _useUseCase39[2];
2249
2353
  return _jsx(Provider, {
2250
2354
  children: _jsx(A, {})
2251
2355
  });
@@ -2266,9 +2370,9 @@ describe('useUseCase', () => {
2266
2370
  };
2267
2371
  };
2268
2372
  const A = () => {
2269
- const _useUseCase38 = useUseCase(stringUseCase),
2270
- _useUseCase39 = _slicedToArray(_useUseCase38, 2),
2271
- add = _useUseCase39[1].add;
2373
+ const _useUseCase40 = useUseCase(stringUseCase),
2374
+ _useUseCase41 = _slicedToArray(_useUseCase40, 2),
2375
+ add = _useUseCase41[1].add;
2272
2376
  const update = useUpdate();
2273
2377
  const onClick = () => {
2274
2378
  update();
@@ -2280,9 +2384,9 @@ describe('useUseCase', () => {
2280
2384
  });
2281
2385
  };
2282
2386
  const B = () => {
2283
- const _useUseCase40 = useUseCase('', stringUseCase),
2284
- _useUseCase41 = _slicedToArray(_useUseCase40, 3),
2285
- Provider = _useUseCase41[2];
2387
+ const _useUseCase42 = useUseCase('', stringUseCase),
2388
+ _useUseCase43 = _slicedToArray(_useUseCase42, 3),
2389
+ Provider = _useUseCase43[2];
2286
2390
  return _jsx(Provider, {
2287
2391
  children: _jsx(A, {})
2288
2392
  });
@@ -2307,9 +2411,9 @@ describe('useUseCase', () => {
2307
2411
  };
2308
2412
  };
2309
2413
  const A = () => {
2310
- const _useUseCase42 = useUseCase(stringUseCase),
2311
- _useUseCase43 = _slicedToArray(_useUseCase42, 2),
2312
- add = _useUseCase43[1].add;
2414
+ const _useUseCase44 = useUseCase(stringUseCase),
2415
+ _useUseCase45 = _slicedToArray(_useUseCase44, 2),
2416
+ add = _useUseCase45[1].add;
2313
2417
  const onClick = () => {
2314
2418
  add('x');
2315
2419
  };
@@ -2323,9 +2427,9 @@ describe('useUseCase', () => {
2323
2427
  });
2324
2428
  };
2325
2429
  const B = () => {
2326
- const _useUseCase44 = useUseCase('', stringUseCase),
2327
- _useUseCase45 = _slicedToArray(_useUseCase44, 3),
2328
- Provider = _useUseCase45[2];
2430
+ const _useUseCase46 = useUseCase('', stringUseCase),
2431
+ _useUseCase47 = _slicedToArray(_useUseCase46, 3),
2432
+ Provider = _useUseCase47[2];
2329
2433
  return _jsx(Provider, {
2330
2434
  children: _jsx(A, {})
2331
2435
  });
@@ -2354,11 +2458,11 @@ describe('useUseCase', () => {
2354
2458
  };
2355
2459
  };
2356
2460
  const A = () => {
2357
- const _useUseCase46 = useUseCase(stringUseCase),
2358
- _useUseCase47 = _slicedToArray(_useUseCase46, 2),
2359
- _useUseCase47$ = _useUseCase47[1],
2360
- add = _useUseCase47$.add,
2361
- setEntity = _useUseCase47$.setEntity;
2461
+ const _useUseCase48 = useUseCase(stringUseCase),
2462
+ _useUseCase49 = _slicedToArray(_useUseCase48, 2),
2463
+ _useUseCase49$ = _useUseCase49[1],
2464
+ add = _useUseCase49$.add,
2465
+ setEntity = _useUseCase49$.setEntity;
2362
2466
  const update = useUpdate();
2363
2467
  add(addedText);
2364
2468
  const onSet = () => {
@@ -2378,9 +2482,9 @@ describe('useUseCase', () => {
2378
2482
  });
2379
2483
  };
2380
2484
  const B = () => {
2381
- const _useUseCase48 = useUseCase('', stringUseCase),
2382
- _useUseCase49 = _slicedToArray(_useUseCase48, 3),
2383
- Provider = _useUseCase49[2];
2485
+ const _useUseCase50 = useUseCase('', stringUseCase),
2486
+ _useUseCase51 = _slicedToArray(_useUseCase50, 3),
2487
+ Provider = _useUseCase51[2];
2384
2488
  return _jsx(Provider, {
2385
2489
  children: _jsx(A, {})
2386
2490
  });
@@ -2400,7 +2504,7 @@ describe('useUseCase', () => {
2400
2504
  fireEvent.click(screen.getByText(updateButtonText));
2401
2505
  expect(addReducer).toHaveBeenCalledTimes(3);
2402
2506
  });
2403
- test('`options.onChange` event should be trigger in orders', () => {
2507
+ test('`options.onChange` event should be triggered in orders', () => {
2404
2508
  let changeTimes = 0;
2405
2509
  const updateChangeTimes = () => {
2406
2510
  return ++changeTimes;
@@ -2425,12 +2529,12 @@ describe('useUseCase', () => {
2425
2529
  return _jsx(Fragment, {});
2426
2530
  };
2427
2531
  const C = () => {
2428
- const _useUseCase50 = useUseCase(defaultFile, fileUseCase, {
2532
+ const _useUseCase52 = useUseCase(defaultFile, fileUseCase, {
2429
2533
  onChange: onChangeC
2430
2534
  }),
2431
- _useUseCase51 = _slicedToArray(_useUseCase50, 3),
2432
- setPath = _useUseCase51[1].setPath,
2433
- Provider = _useUseCase51[2];
2535
+ _useUseCase53 = _slicedToArray(_useUseCase52, 3),
2536
+ setPath = _useUseCase53[1].setPath,
2537
+ Provider = _useUseCase53[2];
2434
2538
  const onFirstClick = () => {
2435
2539
  setPath(PATH_1);
2436
2540
  };
@@ -2457,11 +2561,11 @@ describe('useUseCase', () => {
2457
2561
  const firstButtonText = 'first button';
2458
2562
  const secondButtonText = 'second button';
2459
2563
  const A = () => {
2460
- const _useUseCase52 = useUseCase(fileUseCase, {
2564
+ const _useUseCase54 = useUseCase(fileUseCase, {
2461
2565
  onChange
2462
2566
  }),
2463
- _useUseCase53 = _slicedToArray(_useUseCase52, 2),
2464
- setPath = _useUseCase53[1].setPath;
2567
+ _useUseCase55 = _slicedToArray(_useUseCase54, 2),
2568
+ setPath = _useUseCase55[1].setPath;
2465
2569
  const onFirstClick = () => {
2466
2570
  setPath(PATH_1);
2467
2571
  onChange = onSecondChange;
@@ -2480,9 +2584,9 @@ describe('useUseCase', () => {
2480
2584
  });
2481
2585
  };
2482
2586
  const B = () => {
2483
- const _useUseCase54 = useUseCase(defaultFile, fileUseCase),
2484
- _useUseCase55 = _slicedToArray(_useUseCase54, 3),
2485
- Provider = _useUseCase55[2];
2587
+ const _useUseCase56 = useUseCase(defaultFile, fileUseCase),
2588
+ _useUseCase57 = _slicedToArray(_useUseCase56, 3),
2589
+ Provider = _useUseCase57[2];
2486
2590
  return _jsx(Provider, {
2487
2591
  children: _jsx(A, {})
2488
2592
  });
@@ -2501,17 +2605,73 @@ describe('useUseCase', () => {
2501
2605
  path: PATH_1
2502
2606
  });
2503
2607
  });
2504
- test('`options.watch` should be trigger at child elements', () => {
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
+ test('`options.watch` should be triggered at child components', () => {
2505
2665
  const onExtChange = jest.fn();
2506
2666
  const firstButtonText = 'first button';
2507
2667
  const A = () => {
2508
- const _useUseCase56 = useUseCase(fileUseCase, {
2668
+ const _useUseCase62 = useUseCase(fileUseCase, {
2509
2669
  watch: {
2510
2670
  ext: onExtChange
2511
2671
  }
2512
2672
  }),
2513
- _useUseCase57 = _slicedToArray(_useUseCase56, 2),
2514
- setPath = _useUseCase57[1].setPath;
2673
+ _useUseCase63 = _slicedToArray(_useUseCase62, 2),
2674
+ setPath = _useUseCase63[1].setPath;
2515
2675
  const onFirstClick = () => {
2516
2676
  setPath(PATH_1);
2517
2677
  };
@@ -2521,9 +2681,9 @@ describe('useUseCase', () => {
2521
2681
  });
2522
2682
  };
2523
2683
  const B = () => {
2524
- const _useUseCase58 = useUseCase(defaultFile, fileUseCase, {}),
2525
- _useUseCase59 = _slicedToArray(_useUseCase58, 3),
2526
- Provider = _useUseCase59[2];
2684
+ const _useUseCase64 = useUseCase(defaultFile, fileUseCase, {}),
2685
+ _useUseCase65 = _slicedToArray(_useUseCase64, 3),
2686
+ Provider = _useUseCase65[2];
2527
2687
  return _jsx(Provider, {
2528
2688
  children: _jsx(A, {})
2529
2689
  });
@@ -2544,7 +2704,7 @@ describe('useUseCase', () => {
2544
2704
  oldValue: ''
2545
2705
  });
2546
2706
  });
2547
- test('`options.watch` should be trigger in orders', () => {
2707
+ test('`options.watch` should be triggered in orders', () => {
2548
2708
  let changeTimes = 0;
2549
2709
  const updateChangeTimes = e => {
2550
2710
  void e;
@@ -2574,14 +2734,14 @@ describe('useUseCase', () => {
2574
2734
  return _jsx(Fragment, {});
2575
2735
  };
2576
2736
  const C = () => {
2577
- const _useUseCase60 = useUseCase(defaultFile, fileUseCase, {
2737
+ const _useUseCase66 = useUseCase(defaultFile, fileUseCase, {
2578
2738
  watch: {
2579
2739
  ext: onChangeC
2580
2740
  }
2581
2741
  }),
2582
- _useUseCase61 = _slicedToArray(_useUseCase60, 3),
2583
- setPath = _useUseCase61[1].setPath,
2584
- Provider = _useUseCase61[2];
2742
+ _useUseCase67 = _slicedToArray(_useUseCase66, 3),
2743
+ setPath = _useUseCase67[1].setPath,
2744
+ Provider = _useUseCase67[2];
2585
2745
  const onFirstClick = () => {
2586
2746
  setPath(PATH_1);
2587
2747
  };
@@ -2608,13 +2768,13 @@ describe('useUseCase', () => {
2608
2768
  const firstButtonText = 'first button';
2609
2769
  const secondButtonText = 'second button';
2610
2770
  const A = () => {
2611
- const _useUseCase62 = useUseCase(fileUseCase, {
2771
+ const _useUseCase68 = useUseCase(fileUseCase, {
2612
2772
  watch: {
2613
2773
  ext: onExtChange
2614
2774
  }
2615
2775
  }),
2616
- _useUseCase63 = _slicedToArray(_useUseCase62, 2),
2617
- setPath = _useUseCase63[1].setPath;
2776
+ _useUseCase69 = _slicedToArray(_useUseCase68, 2),
2777
+ setPath = _useUseCase69[1].setPath;
2618
2778
  const onFirstClick = () => {
2619
2779
  setPath(PATH_1);
2620
2780
  onExtChange = onSecondExtChange;
@@ -2633,9 +2793,9 @@ describe('useUseCase', () => {
2633
2793
  });
2634
2794
  };
2635
2795
  const B = () => {
2636
- const _useUseCase64 = useUseCase(defaultFile, fileUseCase),
2637
- _useUseCase65 = _slicedToArray(_useUseCase64, 3),
2638
- Provider = _useUseCase65[2];
2796
+ const _useUseCase70 = useUseCase(defaultFile, fileUseCase),
2797
+ _useUseCase71 = _slicedToArray(_useUseCase70, 3),
2798
+ Provider = _useUseCase71[2];
2639
2799
  return _jsx(Provider, {
2640
2800
  children: _jsx(A, {})
2641
2801
  });
@@ -2663,38 +2823,38 @@ describe('useUseCase', () => {
2663
2823
  });
2664
2824
  describe('`useUseCase` should work the same as `useReducers`', () => {
2665
2825
  test('`entity` should equal `defaultFile`', () => {
2666
- const _renderHook40 = renderHook(() => {
2826
+ const _renderHook42 = renderHook(() => {
2667
2827
  return useUseCase(mathUseCase);
2668
2828
  }),
2669
- result = _renderHook40.result;
2829
+ result = _renderHook42.result;
2670
2830
  const reducers = result.current;
2671
2831
  expect(Array.isArray(reducers)).toBe(false);
2672
2832
  });
2673
2833
  test('returned reducer should work', () => {
2674
- const _renderHook41 = renderHook(() => {
2834
+ const _renderHook43 = renderHook(() => {
2675
2835
  return useUseCase(mathUseCase);
2676
2836
  }),
2677
- result = _renderHook41.result;
2837
+ result = _renderHook43.result;
2678
2838
  const reducers = result.current;
2679
2839
  const add = reducers.add;
2680
2840
  expect(add(1, 2)).toBe(3);
2681
2841
  });
2682
2842
  test('`usecase` should be called only once if deps has not provided', () => {
2683
2843
  const mockUseCase = jest.fn(mathUseCase);
2684
- const _renderHook42 = renderHook(() => {
2844
+ const _renderHook44 = renderHook(() => {
2685
2845
  return useUseCase(mockUseCase);
2686
2846
  }),
2687
- rerender = _renderHook42.rerender;
2847
+ rerender = _renderHook44.rerender;
2688
2848
  expect(mockUseCase).toHaveBeenCalledTimes(1);
2689
2849
  rerender();
2690
2850
  expect(mockUseCase).toHaveBeenCalledTimes(1);
2691
2851
  });
2692
2852
  test('`usecase` should be called only once if deps has not changed', () => {
2693
2853
  const mockUseCase = jest.fn(mathUseCase);
2694
- const _renderHook43 = renderHook(() => {
2854
+ const _renderHook45 = renderHook(() => {
2695
2855
  return useUseCase(mockUseCase, {}, [1, 'x']);
2696
2856
  }),
2697
- rerender = _renderHook43.rerender;
2857
+ rerender = _renderHook45.rerender;
2698
2858
  expect(mockUseCase).toHaveBeenCalledTimes(1);
2699
2859
  rerender();
2700
2860
  expect(mockUseCase).toHaveBeenCalledTimes(1);
@@ -2702,10 +2862,10 @@ describe('useUseCase', () => {
2702
2862
  test('`usecase` should be called if deps has changed', () => {
2703
2863
  let i = 0;
2704
2864
  const mockUseCase = jest.fn(mathUseCase);
2705
- const _renderHook44 = renderHook(() => {
2865
+ const _renderHook46 = renderHook(() => {
2706
2866
  return useUseCase(mockUseCase, {}, [i++, 'x']);
2707
2867
  }),
2708
- rerender = _renderHook44.rerender;
2868
+ rerender = _renderHook46.rerender;
2709
2869
  expect(mockUseCase).toHaveBeenCalledTimes(1);
2710
2870
  rerender();
2711
2871
  expect(mockUseCase).toHaveBeenCalledTimes(2);
@@ -2713,8 +2873,8 @@ describe('useUseCase', () => {
2713
2873
  test('reducer call should not be cached if component is at rendering phase', () => {
2714
2874
  const buttonText = 'button';
2715
2875
  const CacheTestComponent = () => {
2716
- const _useUseCase66 = useUseCase(mathUseCase),
2717
- subtraction = _useUseCase66.subtraction;
2876
+ const _useUseCase72 = useUseCase(mathUseCase),
2877
+ subtraction = _useUseCase72.subtraction;
2718
2878
  const update = useUpdate();
2719
2879
  const onClick = () => {
2720
2880
  update();
@@ -2737,8 +2897,8 @@ describe('useUseCase', () => {
2737
2897
  test('reducer call should not be cached if component is not at rendering phase', () => {
2738
2898
  const buttonText = 'button';
2739
2899
  const CacheTestComponent = () => {
2740
- const _useUseCase67 = useUseCase(mathUseCase),
2741
- subtraction = _useUseCase67.subtraction;
2900
+ const _useUseCase73 = useUseCase(mathUseCase),
2901
+ subtraction = _useUseCase73.subtraction;
2742
2902
  const onClick = () => {
2743
2903
  subtraction(5, 3);
2744
2904
  };
@@ -2766,8 +2926,8 @@ describe('useUseCase', () => {
2766
2926
  let count = 0;
2767
2927
  const buttonText = 'button';
2768
2928
  const StringUseCaseTestComponent = () => {
2769
- const _useUseCase68 = useUseCase(mathUseCase),
2770
- subtraction = _useUseCase68.subtraction;
2929
+ const _useUseCase74 = useUseCase(mathUseCase),
2930
+ subtraction = _useUseCase74.subtraction;
2771
2931
  const update = useUpdate();
2772
2932
  subtraction(5, count++);
2773
2933
  const onUpdate = () => {
@@ -2789,12 +2949,12 @@ describe('useUseCase', () => {
2789
2949
  expect(subtractionReducer).toHaveReturnedWith(4);
2790
2950
  });
2791
2951
  test('`options.extraValue` should be added after call `add` method', () => {
2792
- const _renderHook45 = renderHook(() => {
2952
+ const _renderHook47 = renderHook(() => {
2793
2953
  return useUseCase(mathUseCase, {
2794
2954
  extraValue: 5
2795
2955
  });
2796
2956
  }),
2797
- result = _renderHook45.result;
2957
+ result = _renderHook47.result;
2798
2958
  const reducers = result.current;
2799
2959
  const add = reducers.add;
2800
2960
  expect(add(1, 2)).toBe(8);
@@ -2802,7 +2962,7 @@ describe('useUseCase', () => {
2802
2962
  test('when `options` has changed, it should not trigger update', () => {
2803
2963
  const onUpdate = jest.fn();
2804
2964
  const onDeepUpdate = jest.fn();
2805
- const _renderHook46 = renderHook(() => {
2965
+ const _renderHook48 = renderHook(() => {
2806
2966
  const _useState7 = useState(0),
2807
2967
  _useState8 = _slicedToArray(_useState7, 2),
2808
2968
  extraValue = _useState8[0],
@@ -2818,7 +2978,7 @@ describe('useUseCase', () => {
2818
2978
  }, [reducers]);
2819
2979
  return setExtraValue;
2820
2980
  }),
2821
- result = _renderHook46.result;
2981
+ result = _renderHook48.result;
2822
2982
  expect(onUpdate).toHaveBeenCalledTimes(0);
2823
2983
  expect(onDeepUpdate).toHaveBeenCalledTimes(0);
2824
2984
  act(() => {
@@ -2830,7 +2990,7 @@ describe('useUseCase', () => {
2830
2990
  test('when `deps` change, it should update reducers', () => {
2831
2991
  const onUpdate = jest.fn();
2832
2992
  const onDeepUpdate = jest.fn();
2833
- const _renderHook47 = renderHook(() => {
2993
+ const _renderHook49 = renderHook(() => {
2834
2994
  const _useState9 = useState(0),
2835
2995
  _useState0 = _slicedToArray(_useState9, 2),
2836
2996
  extraValue = _useState0[0],
@@ -2846,7 +3006,7 @@ describe('useUseCase', () => {
2846
3006
  }, [reducers]);
2847
3007
  return setExtraValue;
2848
3008
  }),
2849
- result = _renderHook47.result;
3009
+ result = _renderHook49.result;
2850
3010
  expect(onUpdate).toHaveBeenCalledTimes(0);
2851
3011
  expect(onDeepUpdate).toHaveBeenCalledTimes(0);
2852
3012
  act(() => {
@@ -2858,7 +3018,7 @@ describe('useUseCase', () => {
2858
3018
  test('empty `deps` should not update reducers', () => {
2859
3019
  const onUpdate = jest.fn();
2860
3020
  const onDeepUpdate = jest.fn();
2861
- const _renderHook48 = renderHook(() => {
3021
+ const _renderHook50 = renderHook(() => {
2862
3022
  const _useState1 = useState(0),
2863
3023
  _useState10 = _slicedToArray(_useState1, 2),
2864
3024
  extraValue = _useState10[0],
@@ -2874,7 +3034,7 @@ describe('useUseCase', () => {
2874
3034
  }, [reducers]);
2875
3035
  return setExtraValue;
2876
3036
  }),
2877
- result = _renderHook48.result;
3037
+ result = _renderHook50.result;
2878
3038
  expect(onUpdate).toHaveBeenCalledTimes(0);
2879
3039
  expect(onDeepUpdate).toHaveBeenCalledTimes(0);
2880
3040
  act(() => {