@mic-rexjs/usecases-react 3.7.0 → 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 (65) 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 +10 -12
  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 +263 -161
  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/lib/classes/OptionsSet/index.js +94 -0
  40. package/lib/hooks/useContextValue/index.js +26 -0
  41. package/lib/hooks/useContextualItem/index.js +8 -28
  42. package/lib/hooks/useEntity/index.js +9 -11
  43. package/lib/hooks/useExec/index.js +18 -5
  44. package/lib/hooks/useOptions/index.js +61 -0
  45. package/lib/hooks/useOptionsSet/index.js +22 -0
  46. package/lib/hooks/useProvider/index.js +1 -9
  47. package/lib/hooks/useReducers/index.js +8 -31
  48. package/lib/hooks/useRootCreation/index.js +26 -0
  49. package/lib/hooks/useRootCreation/types.js +5 -0
  50. package/lib/hooks/useStore/index.js +7 -12
  51. package/lib/hooks/useUseCase/index.js +13 -7
  52. package/lib/hooks/useUseCase/index.test.js +301 -160
  53. package/lib/methods/cacheCall/index.js +44 -0
  54. package/lib/methods/cacheCall/types.js +5 -0
  55. package/lib/methods/cacheCalls/index.js +19 -0
  56. package/package.json +3 -3
  57. package/es/hooks/useContextualItem/types.d.ts +0 -3
  58. package/es/usecases/methodUseCase/index.d.ts +0 -2
  59. package/es/usecases/methodUseCase/index.js +0 -72
  60. package/es/usecases/methodUseCase/types.d.ts +0 -21
  61. package/lib/usecases/methodUseCase/index.js +0 -79
  62. /package/es/{hooks/useContextualItem → classes/OptionsSet}/types.js +0 -0
  63. /package/es/{usecases/methodUseCase → hooks/useOptions}/types.js +0 -0
  64. /package/lib/{hooks/useContextualItem → classes/OptionsSet}/types.js +0 -0
  65. /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,64 +2146,66 @@ describe('useUseCase', () => {
2102
2146
  expect(onUnbind).toHaveBeenCalledTimes(1);
2103
2147
  expect(onUnbind).toHaveBeenCalledWith(100);
2104
2148
  });
2105
- });
2106
- test('`onAdopt` event should be called when entity change', () => {
2107
- const onAdopt = jest.fn((newEntity, oldeEntity) => {
2108
- void newEntity;
2109
- void oldeEntity;
2110
- });
2111
- const testUseCase = () => {
2112
- const lifecycleReducers = lifecycleUseCase({
2113
- onAdopt
2149
+ test('`onAdopt` event should be called when entity change', () => {
2150
+ const onAdopt = jest.fn((newEntity, oldeEntity) => {
2151
+ void newEntity;
2152
+ void oldeEntity;
2114
2153
  });
2115
- return {
2116
- ...lifecycleReducers
2154
+ const testUseCase = () => {
2155
+ const entityReducers = entityUseCase();
2156
+ lifecycleUseCase({
2157
+ onAdopt
2158
+ });
2159
+ return {
2160
+ ...entityReducers
2161
+ };
2117
2162
  };
2118
- };
2119
- const _renderHook40 = renderHook(() => {
2120
- return useUseCase(5, testUseCase);
2121
- }),
2122
- result = _renderHook40.result;
2123
- const current = result.current;
2124
- const _current0 = _slicedToArray(current, 2),
2125
- setEntity = _current0[1].setEntity;
2126
- expect(onAdopt).toHaveBeenCalledTimes(1);
2127
- expect(onAdopt).toHaveBeenCalledWith(5);
2128
- act(() => {
2129
- setEntity(100);
2130
- });
2131
- expect(onAdopt).toHaveBeenCalledTimes(2);
2132
- expect(onAdopt).toHaveBeenCalledWith(100, 5);
2133
- });
2134
- test('`onDiscard` event should be called when component unmount', () => {
2135
- const onDiscard = jest.fn(entity => {
2136
- void entity;
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);
2137
2177
  });
2138
- const testUseCase = () => {
2139
- const lifecycleReducers = lifecycleUseCase({
2140
- onDiscard
2178
+ test('`onDiscard` event should be called when component unmount', () => {
2179
+ const onDiscard = jest.fn(entity => {
2180
+ void entity;
2141
2181
  });
2142
- return {
2143
- ...lifecycleReducers
2182
+ const testUseCase = () => {
2183
+ const entityReducers = entityUseCase();
2184
+ lifecycleUseCase({
2185
+ onDiscard
2186
+ });
2187
+ return {
2188
+ ...entityReducers
2189
+ };
2144
2190
  };
2145
- };
2146
- const _renderHook41 = renderHook(() => {
2147
- return useUseCase(5, testUseCase);
2148
- }),
2149
- result = _renderHook41.result,
2150
- unmount = _renderHook41.unmount;
2151
- const current = result.current;
2152
- const _current1 = _slicedToArray(current, 2),
2153
- setEntity = _current1[1].setEntity;
2154
- expect(onDiscard).toHaveBeenCalledTimes(0);
2155
- act(() => {
2156
- setEntity(100);
2157
- });
2158
- expect(onDiscard).toHaveBeenCalledTimes(1);
2159
- expect(onDiscard).toHaveBeenCalledWith(5);
2160
- unmount();
2161
- expect(onDiscard).toHaveBeenCalledTimes(2);
2162
- expect(onDiscard).toHaveBeenCalledWith(100);
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
+ });
2163
2209
  });
2164
2210
  describe('`useUseCase` should work the same as `useContextualCoreCollection`', () => {
2165
2211
  test('Provider should be returned in child component', () => {
@@ -2176,14 +2222,14 @@ describe('useUseCase', () => {
2176
2222
  return _jsx(Fragment, {});
2177
2223
  };
2178
2224
  const TestParent = () => {
2179
- const _useUseCase28 = useUseCase(() => {
2225
+ const _useUseCase30 = useUseCase(() => {
2180
2226
  return {
2181
2227
  ...defaultFile,
2182
2228
  ext: EXT_1
2183
2229
  };
2184
2230
  }, fileUseCase),
2185
- _useUseCase29 = _slicedToArray(_useUseCase28, 3),
2186
- Provider = _useUseCase29[2];
2231
+ _useUseCase31 = _slicedToArray(_useUseCase30, 3),
2232
+ Provider = _useUseCase31[2];
2187
2233
  return _jsx(Provider, {
2188
2234
  children: _jsx(TestChild, {})
2189
2235
  });
@@ -2200,10 +2246,10 @@ describe('useUseCase', () => {
2200
2246
  const onPopupFile = jest.fn();
2201
2247
  const buttonText = 'button';
2202
2248
  const Popup = () => {
2203
- const _useUseCase30 = useUseCase(fileUseCase),
2204
- _useUseCase31 = _slicedToArray(_useUseCase30, 2),
2205
- file = _useUseCase31[0],
2206
- setEntity = _useUseCase31[1].setEntity;
2249
+ const _useUseCase32 = useUseCase(fileUseCase),
2250
+ _useUseCase33 = _slicedToArray(_useUseCase32, 2),
2251
+ file = _useUseCase33[0],
2252
+ setEntity = _useUseCase33[1].setEntity;
2207
2253
  const onClick = () => {
2208
2254
  setEntity({
2209
2255
  ext: EXT_2
@@ -2218,15 +2264,15 @@ describe('useUseCase', () => {
2218
2264
  });
2219
2265
  };
2220
2266
  const TestChild = () => {
2221
- const _useUseCase32 = useUseCase(fileUseCase),
2222
- _useUseCase33 = _slicedToArray(_useUseCase32, 3),
2223
- Provider = _useUseCase33[2];
2267
+ const _useUseCase34 = useUseCase(fileUseCase),
2268
+ _useUseCase35 = _slicedToArray(_useUseCase34, 3),
2269
+ Provider = _useUseCase35[2];
2224
2270
  return createPortal(_jsx(Provider, {
2225
2271
  children: _jsx(Popup, {})
2226
2272
  }), document.body);
2227
2273
  };
2228
2274
  const TestParent = () => {
2229
- const _useUseCase34 = useUseCase(() => {
2275
+ const _useUseCase36 = useUseCase(() => {
2230
2276
  return {
2231
2277
  ...defaultFile,
2232
2278
  ext: EXT_1
@@ -2234,9 +2280,9 @@ describe('useUseCase', () => {
2234
2280
  }, fileUseCase, {
2235
2281
  onChange
2236
2282
  }),
2237
- _useUseCase35 = _slicedToArray(_useUseCase34, 3),
2238
- file = _useUseCase35[0],
2239
- Provider = _useUseCase35[2];
2283
+ _useUseCase37 = _slicedToArray(_useUseCase36, 3),
2284
+ file = _useUseCase37[0],
2285
+ Provider = _useUseCase37[2];
2240
2286
  useEffect(() => {
2241
2287
  onRootFile(file);
2242
2288
  }, [file]);
@@ -2301,9 +2347,9 @@ describe('useUseCase', () => {
2301
2347
  return _jsx(Fragment, {});
2302
2348
  };
2303
2349
  const B = () => {
2304
- const _useUseCase36 = useUseCase(defaultFile, mockUseCase),
2305
- _useUseCase37 = _slicedToArray(_useUseCase36, 3),
2306
- Provider = _useUseCase37[2];
2350
+ const _useUseCase38 = useUseCase(defaultFile, mockUseCase),
2351
+ _useUseCase39 = _slicedToArray(_useUseCase38, 3),
2352
+ Provider = _useUseCase39[2];
2307
2353
  return _jsx(Provider, {
2308
2354
  children: _jsx(A, {})
2309
2355
  });
@@ -2324,9 +2370,9 @@ describe('useUseCase', () => {
2324
2370
  };
2325
2371
  };
2326
2372
  const A = () => {
2327
- const _useUseCase38 = useUseCase(stringUseCase),
2328
- _useUseCase39 = _slicedToArray(_useUseCase38, 2),
2329
- add = _useUseCase39[1].add;
2373
+ const _useUseCase40 = useUseCase(stringUseCase),
2374
+ _useUseCase41 = _slicedToArray(_useUseCase40, 2),
2375
+ add = _useUseCase41[1].add;
2330
2376
  const update = useUpdate();
2331
2377
  const onClick = () => {
2332
2378
  update();
@@ -2338,9 +2384,9 @@ describe('useUseCase', () => {
2338
2384
  });
2339
2385
  };
2340
2386
  const B = () => {
2341
- const _useUseCase40 = useUseCase('', stringUseCase),
2342
- _useUseCase41 = _slicedToArray(_useUseCase40, 3),
2343
- Provider = _useUseCase41[2];
2387
+ const _useUseCase42 = useUseCase('', stringUseCase),
2388
+ _useUseCase43 = _slicedToArray(_useUseCase42, 3),
2389
+ Provider = _useUseCase43[2];
2344
2390
  return _jsx(Provider, {
2345
2391
  children: _jsx(A, {})
2346
2392
  });
@@ -2365,9 +2411,9 @@ describe('useUseCase', () => {
2365
2411
  };
2366
2412
  };
2367
2413
  const A = () => {
2368
- const _useUseCase42 = useUseCase(stringUseCase),
2369
- _useUseCase43 = _slicedToArray(_useUseCase42, 2),
2370
- add = _useUseCase43[1].add;
2414
+ const _useUseCase44 = useUseCase(stringUseCase),
2415
+ _useUseCase45 = _slicedToArray(_useUseCase44, 2),
2416
+ add = _useUseCase45[1].add;
2371
2417
  const onClick = () => {
2372
2418
  add('x');
2373
2419
  };
@@ -2381,9 +2427,9 @@ describe('useUseCase', () => {
2381
2427
  });
2382
2428
  };
2383
2429
  const B = () => {
2384
- const _useUseCase44 = useUseCase('', stringUseCase),
2385
- _useUseCase45 = _slicedToArray(_useUseCase44, 3),
2386
- Provider = _useUseCase45[2];
2430
+ const _useUseCase46 = useUseCase('', stringUseCase),
2431
+ _useUseCase47 = _slicedToArray(_useUseCase46, 3),
2432
+ Provider = _useUseCase47[2];
2387
2433
  return _jsx(Provider, {
2388
2434
  children: _jsx(A, {})
2389
2435
  });
@@ -2412,11 +2458,11 @@ describe('useUseCase', () => {
2412
2458
  };
2413
2459
  };
2414
2460
  const A = () => {
2415
- const _useUseCase46 = useUseCase(stringUseCase),
2416
- _useUseCase47 = _slicedToArray(_useUseCase46, 2),
2417
- _useUseCase47$ = _useUseCase47[1],
2418
- add = _useUseCase47$.add,
2419
- 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;
2420
2466
  const update = useUpdate();
2421
2467
  add(addedText);
2422
2468
  const onSet = () => {
@@ -2436,9 +2482,9 @@ describe('useUseCase', () => {
2436
2482
  });
2437
2483
  };
2438
2484
  const B = () => {
2439
- const _useUseCase48 = useUseCase('', stringUseCase),
2440
- _useUseCase49 = _slicedToArray(_useUseCase48, 3),
2441
- Provider = _useUseCase49[2];
2485
+ const _useUseCase50 = useUseCase('', stringUseCase),
2486
+ _useUseCase51 = _slicedToArray(_useUseCase50, 3),
2487
+ Provider = _useUseCase51[2];
2442
2488
  return _jsx(Provider, {
2443
2489
  children: _jsx(A, {})
2444
2490
  });
@@ -2458,7 +2504,7 @@ describe('useUseCase', () => {
2458
2504
  fireEvent.click(screen.getByText(updateButtonText));
2459
2505
  expect(addReducer).toHaveBeenCalledTimes(3);
2460
2506
  });
2461
- test('`options.onChange` event should be trigger in orders', () => {
2507
+ test('`options.onChange` event should be triggered in orders', () => {
2462
2508
  let changeTimes = 0;
2463
2509
  const updateChangeTimes = () => {
2464
2510
  return ++changeTimes;
@@ -2483,12 +2529,12 @@ describe('useUseCase', () => {
2483
2529
  return _jsx(Fragment, {});
2484
2530
  };
2485
2531
  const C = () => {
2486
- const _useUseCase50 = useUseCase(defaultFile, fileUseCase, {
2532
+ const _useUseCase52 = useUseCase(defaultFile, fileUseCase, {
2487
2533
  onChange: onChangeC
2488
2534
  }),
2489
- _useUseCase51 = _slicedToArray(_useUseCase50, 3),
2490
- setPath = _useUseCase51[1].setPath,
2491
- Provider = _useUseCase51[2];
2535
+ _useUseCase53 = _slicedToArray(_useUseCase52, 3),
2536
+ setPath = _useUseCase53[1].setPath,
2537
+ Provider = _useUseCase53[2];
2492
2538
  const onFirstClick = () => {
2493
2539
  setPath(PATH_1);
2494
2540
  };
@@ -2515,11 +2561,11 @@ describe('useUseCase', () => {
2515
2561
  const firstButtonText = 'first button';
2516
2562
  const secondButtonText = 'second button';
2517
2563
  const A = () => {
2518
- const _useUseCase52 = useUseCase(fileUseCase, {
2564
+ const _useUseCase54 = useUseCase(fileUseCase, {
2519
2565
  onChange
2520
2566
  }),
2521
- _useUseCase53 = _slicedToArray(_useUseCase52, 2),
2522
- setPath = _useUseCase53[1].setPath;
2567
+ _useUseCase55 = _slicedToArray(_useUseCase54, 2),
2568
+ setPath = _useUseCase55[1].setPath;
2523
2569
  const onFirstClick = () => {
2524
2570
  setPath(PATH_1);
2525
2571
  onChange = onSecondChange;
@@ -2538,9 +2584,9 @@ describe('useUseCase', () => {
2538
2584
  });
2539
2585
  };
2540
2586
  const B = () => {
2541
- const _useUseCase54 = useUseCase(defaultFile, fileUseCase),
2542
- _useUseCase55 = _slicedToArray(_useUseCase54, 3),
2543
- Provider = _useUseCase55[2];
2587
+ const _useUseCase56 = useUseCase(defaultFile, fileUseCase),
2588
+ _useUseCase57 = _slicedToArray(_useUseCase56, 3),
2589
+ Provider = _useUseCase57[2];
2544
2590
  return _jsx(Provider, {
2545
2591
  children: _jsx(A, {})
2546
2592
  });
@@ -2559,17 +2605,73 @@ describe('useUseCase', () => {
2559
2605
  path: PATH_1
2560
2606
  });
2561
2607
  });
2562
- 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', () => {
2563
2665
  const onExtChange = jest.fn();
2564
2666
  const firstButtonText = 'first button';
2565
2667
  const A = () => {
2566
- const _useUseCase56 = useUseCase(fileUseCase, {
2668
+ const _useUseCase62 = useUseCase(fileUseCase, {
2567
2669
  watch: {
2568
2670
  ext: onExtChange
2569
2671
  }
2570
2672
  }),
2571
- _useUseCase57 = _slicedToArray(_useUseCase56, 2),
2572
- setPath = _useUseCase57[1].setPath;
2673
+ _useUseCase63 = _slicedToArray(_useUseCase62, 2),
2674
+ setPath = _useUseCase63[1].setPath;
2573
2675
  const onFirstClick = () => {
2574
2676
  setPath(PATH_1);
2575
2677
  };
@@ -2579,9 +2681,9 @@ describe('useUseCase', () => {
2579
2681
  });
2580
2682
  };
2581
2683
  const B = () => {
2582
- const _useUseCase58 = useUseCase(defaultFile, fileUseCase, {}),
2583
- _useUseCase59 = _slicedToArray(_useUseCase58, 3),
2584
- Provider = _useUseCase59[2];
2684
+ const _useUseCase64 = useUseCase(defaultFile, fileUseCase, {}),
2685
+ _useUseCase65 = _slicedToArray(_useUseCase64, 3),
2686
+ Provider = _useUseCase65[2];
2585
2687
  return _jsx(Provider, {
2586
2688
  children: _jsx(A, {})
2587
2689
  });
@@ -2602,7 +2704,7 @@ describe('useUseCase', () => {
2602
2704
  oldValue: ''
2603
2705
  });
2604
2706
  });
2605
- test('`options.watch` should be trigger in orders', () => {
2707
+ test('`options.watch` should be triggered in orders', () => {
2606
2708
  let changeTimes = 0;
2607
2709
  const updateChangeTimes = e => {
2608
2710
  void e;
@@ -2632,14 +2734,14 @@ describe('useUseCase', () => {
2632
2734
  return _jsx(Fragment, {});
2633
2735
  };
2634
2736
  const C = () => {
2635
- const _useUseCase60 = useUseCase(defaultFile, fileUseCase, {
2737
+ const _useUseCase66 = useUseCase(defaultFile, fileUseCase, {
2636
2738
  watch: {
2637
2739
  ext: onChangeC
2638
2740
  }
2639
2741
  }),
2640
- _useUseCase61 = _slicedToArray(_useUseCase60, 3),
2641
- setPath = _useUseCase61[1].setPath,
2642
- Provider = _useUseCase61[2];
2742
+ _useUseCase67 = _slicedToArray(_useUseCase66, 3),
2743
+ setPath = _useUseCase67[1].setPath,
2744
+ Provider = _useUseCase67[2];
2643
2745
  const onFirstClick = () => {
2644
2746
  setPath(PATH_1);
2645
2747
  };
@@ -2666,13 +2768,13 @@ describe('useUseCase', () => {
2666
2768
  const firstButtonText = 'first button';
2667
2769
  const secondButtonText = 'second button';
2668
2770
  const A = () => {
2669
- const _useUseCase62 = useUseCase(fileUseCase, {
2771
+ const _useUseCase68 = useUseCase(fileUseCase, {
2670
2772
  watch: {
2671
2773
  ext: onExtChange
2672
2774
  }
2673
2775
  }),
2674
- _useUseCase63 = _slicedToArray(_useUseCase62, 2),
2675
- setPath = _useUseCase63[1].setPath;
2776
+ _useUseCase69 = _slicedToArray(_useUseCase68, 2),
2777
+ setPath = _useUseCase69[1].setPath;
2676
2778
  const onFirstClick = () => {
2677
2779
  setPath(PATH_1);
2678
2780
  onExtChange = onSecondExtChange;
@@ -2691,9 +2793,9 @@ describe('useUseCase', () => {
2691
2793
  });
2692
2794
  };
2693
2795
  const B = () => {
2694
- const _useUseCase64 = useUseCase(defaultFile, fileUseCase),
2695
- _useUseCase65 = _slicedToArray(_useUseCase64, 3),
2696
- Provider = _useUseCase65[2];
2796
+ const _useUseCase70 = useUseCase(defaultFile, fileUseCase),
2797
+ _useUseCase71 = _slicedToArray(_useUseCase70, 3),
2798
+ Provider = _useUseCase71[2];
2697
2799
  return _jsx(Provider, {
2698
2800
  children: _jsx(A, {})
2699
2801
  });
@@ -2771,8 +2873,8 @@ describe('useUseCase', () => {
2771
2873
  test('reducer call should not be cached if component is at rendering phase', () => {
2772
2874
  const buttonText = 'button';
2773
2875
  const CacheTestComponent = () => {
2774
- const _useUseCase66 = useUseCase(mathUseCase),
2775
- subtraction = _useUseCase66.subtraction;
2876
+ const _useUseCase72 = useUseCase(mathUseCase),
2877
+ subtraction = _useUseCase72.subtraction;
2776
2878
  const update = useUpdate();
2777
2879
  const onClick = () => {
2778
2880
  update();
@@ -2795,8 +2897,8 @@ describe('useUseCase', () => {
2795
2897
  test('reducer call should not be cached if component is not at rendering phase', () => {
2796
2898
  const buttonText = 'button';
2797
2899
  const CacheTestComponent = () => {
2798
- const _useUseCase67 = useUseCase(mathUseCase),
2799
- subtraction = _useUseCase67.subtraction;
2900
+ const _useUseCase73 = useUseCase(mathUseCase),
2901
+ subtraction = _useUseCase73.subtraction;
2800
2902
  const onClick = () => {
2801
2903
  subtraction(5, 3);
2802
2904
  };
@@ -2824,8 +2926,8 @@ describe('useUseCase', () => {
2824
2926
  let count = 0;
2825
2927
  const buttonText = 'button';
2826
2928
  const StringUseCaseTestComponent = () => {
2827
- const _useUseCase68 = useUseCase(mathUseCase),
2828
- subtraction = _useUseCase68.subtraction;
2929
+ const _useUseCase74 = useUseCase(mathUseCase),
2930
+ subtraction = _useUseCase74.subtraction;
2829
2931
  const update = useUpdate();
2830
2932
  subtraction(5, count++);
2831
2933
  const onUpdate = () => {