@mic-rexjs/usecases-react 2.13.6 → 2.14.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.
- package/dist/index.min.js +1 -1
- package/es/hooks/useEntity/index.d.ts +5 -2
- package/es/hooks/useEntity/index.js +88 -17
- package/es/hooks/useExec/index.d.ts +2 -0
- package/es/hooks/useExec/index.js +13 -0
- package/es/hooks/useReducers/index.js +2 -1
- package/es/hooks/useStore/index.d.ts +1 -1
- package/es/hooks/useStore/index.js +4 -61
- package/es/hooks/useUseCase/index.js +2 -2
- package/es/hooks/useUseCase/index.test.js +136 -88
- package/lib/hooks/useEntity/index.js +88 -17
- package/lib/hooks/useExec/index.js +19 -0
- package/lib/hooks/useReducers/index.js +2 -1
- package/lib/hooks/useStore/index.js +3 -60
- package/lib/hooks/useUseCase/index.js +2 -2
- package/lib/hooks/useUseCase/index.test.js +134 -88
- package/package.json +1 -1
|
@@ -1666,13 +1666,14 @@ describe('useUseCase', () => {
|
|
|
1666
1666
|
});
|
|
1667
1667
|
});
|
|
1668
1668
|
test('`options.watch` should work with field path of array length', () => {
|
|
1669
|
+
const defaultList = [];
|
|
1669
1670
|
const onEntityLengthChange = jest.fn();
|
|
1670
1671
|
const onListLengthChange = jest.fn();
|
|
1671
1672
|
const lengthUseCase = () => {
|
|
1672
1673
|
return entityUseCase();
|
|
1673
1674
|
};
|
|
1674
1675
|
const _renderHook32 = renderHook(() => {
|
|
1675
|
-
return useUseCase(
|
|
1676
|
+
return useUseCase(defaultList, lengthUseCase, {
|
|
1676
1677
|
watch: {
|
|
1677
1678
|
length: onEntityLengthChange,
|
|
1678
1679
|
'list.length': onListLengthChange
|
|
@@ -1937,6 +1938,53 @@ describe('useUseCase', () => {
|
|
|
1937
1938
|
expect(onStringMount).toHaveBeenCalledWith('hello');
|
|
1938
1939
|
expect(onBooleanMount).toHaveBeenCalledWith(true);
|
|
1939
1940
|
});
|
|
1941
|
+
test('`bindEntity` should be called when component mount', () => {
|
|
1942
|
+
const bindEntity = jest.fn(entity => {
|
|
1943
|
+
void entity;
|
|
1944
|
+
});
|
|
1945
|
+
const testUseCase = () => {
|
|
1946
|
+
const entityReducers = entityUseCase();
|
|
1947
|
+
return {
|
|
1948
|
+
...entityReducers,
|
|
1949
|
+
bindEntity
|
|
1950
|
+
};
|
|
1951
|
+
};
|
|
1952
|
+
renderHook(() => {
|
|
1953
|
+
const _useUseCase24 = useUseCase(5, testUseCase),
|
|
1954
|
+
_useUseCase25 = _slicedToArray(_useUseCase24, 2),
|
|
1955
|
+
setEntity = _useUseCase25[1].setEntity;
|
|
1956
|
+
useMount(() => {
|
|
1957
|
+
setEntity(100);
|
|
1958
|
+
});
|
|
1959
|
+
});
|
|
1960
|
+
expect(bindEntity).toHaveBeenCalledTimes(1);
|
|
1961
|
+
expect(bindEntity).toHaveBeenCalledWith(5);
|
|
1962
|
+
});
|
|
1963
|
+
test('`unbindEntity` should be called when component unmount', () => {
|
|
1964
|
+
const unbindEntity = jest.fn(entity => {
|
|
1965
|
+
void entity;
|
|
1966
|
+
});
|
|
1967
|
+
const testUseCase = () => {
|
|
1968
|
+
const entityReducers = entityUseCase();
|
|
1969
|
+
return {
|
|
1970
|
+
...entityReducers,
|
|
1971
|
+
unbindEntity
|
|
1972
|
+
};
|
|
1973
|
+
};
|
|
1974
|
+
const _renderHook35 = renderHook(() => {
|
|
1975
|
+
const _useUseCase26 = useUseCase(5, testUseCase),
|
|
1976
|
+
_useUseCase27 = _slicedToArray(_useUseCase26, 2),
|
|
1977
|
+
setEntity = _useUseCase27[1].setEntity;
|
|
1978
|
+
useMount(() => {
|
|
1979
|
+
setEntity(100);
|
|
1980
|
+
});
|
|
1981
|
+
}),
|
|
1982
|
+
unmount = _renderHook35.unmount;
|
|
1983
|
+
expect(unbindEntity).toHaveBeenCalledTimes(0);
|
|
1984
|
+
unmount();
|
|
1985
|
+
expect(unbindEntity).toHaveBeenCalledTimes(1);
|
|
1986
|
+
expect(unbindEntity).toHaveBeenCalledWith(100);
|
|
1987
|
+
});
|
|
1940
1988
|
});
|
|
1941
1989
|
describe('`useUseCase` should work the same as `useContextualCoreCollection`', () => {
|
|
1942
1990
|
test('Provider should be returned in child component', () => {
|
|
@@ -1953,14 +2001,14 @@ describe('useUseCase', () => {
|
|
|
1953
2001
|
return _jsx(Fragment, {});
|
|
1954
2002
|
};
|
|
1955
2003
|
const TestParent = () => {
|
|
1956
|
-
const
|
|
2004
|
+
const _useUseCase28 = useUseCase(() => {
|
|
1957
2005
|
return {
|
|
1958
2006
|
...defaultFile,
|
|
1959
2007
|
ext: EXT_1
|
|
1960
2008
|
};
|
|
1961
2009
|
}, fileUseCase),
|
|
1962
|
-
|
|
1963
|
-
Provider =
|
|
2010
|
+
_useUseCase29 = _slicedToArray(_useUseCase28, 3),
|
|
2011
|
+
Provider = _useUseCase29[2];
|
|
1964
2012
|
return _jsx(Provider, {
|
|
1965
2013
|
children: _jsx(TestChild, {})
|
|
1966
2014
|
});
|
|
@@ -1977,10 +2025,10 @@ describe('useUseCase', () => {
|
|
|
1977
2025
|
const onPopupFile = jest.fn();
|
|
1978
2026
|
const buttonText = 'button';
|
|
1979
2027
|
const Popup = () => {
|
|
1980
|
-
const
|
|
1981
|
-
|
|
1982
|
-
file =
|
|
1983
|
-
setEntity =
|
|
2028
|
+
const _useUseCase30 = useUseCase(fileUseCase),
|
|
2029
|
+
_useUseCase31 = _slicedToArray(_useUseCase30, 2),
|
|
2030
|
+
file = _useUseCase31[0],
|
|
2031
|
+
setEntity = _useUseCase31[1].setEntity;
|
|
1984
2032
|
const onClick = () => {
|
|
1985
2033
|
setEntity({
|
|
1986
2034
|
ext: EXT_2
|
|
@@ -1995,15 +2043,15 @@ describe('useUseCase', () => {
|
|
|
1995
2043
|
});
|
|
1996
2044
|
};
|
|
1997
2045
|
const TestChild = () => {
|
|
1998
|
-
const
|
|
1999
|
-
|
|
2000
|
-
Provider =
|
|
2046
|
+
const _useUseCase32 = useUseCase(fileUseCase),
|
|
2047
|
+
_useUseCase33 = _slicedToArray(_useUseCase32, 3),
|
|
2048
|
+
Provider = _useUseCase33[2];
|
|
2001
2049
|
return createPortal(_jsx(Provider, {
|
|
2002
2050
|
children: _jsx(Popup, {})
|
|
2003
2051
|
}), document.body);
|
|
2004
2052
|
};
|
|
2005
2053
|
const TestParent = () => {
|
|
2006
|
-
const
|
|
2054
|
+
const _useUseCase34 = useUseCase(() => {
|
|
2007
2055
|
return {
|
|
2008
2056
|
...defaultFile,
|
|
2009
2057
|
ext: EXT_1
|
|
@@ -2011,9 +2059,9 @@ describe('useUseCase', () => {
|
|
|
2011
2059
|
}, fileUseCase, {
|
|
2012
2060
|
onChange
|
|
2013
2061
|
}),
|
|
2014
|
-
|
|
2015
|
-
file =
|
|
2016
|
-
Provider =
|
|
2062
|
+
_useUseCase35 = _slicedToArray(_useUseCase34, 3),
|
|
2063
|
+
file = _useUseCase35[0],
|
|
2064
|
+
Provider = _useUseCase35[2];
|
|
2017
2065
|
useEffect(() => {
|
|
2018
2066
|
onRootFile(file);
|
|
2019
2067
|
}, [file]);
|
|
@@ -2078,9 +2126,9 @@ describe('useUseCase', () => {
|
|
|
2078
2126
|
return _jsx(Fragment, {});
|
|
2079
2127
|
};
|
|
2080
2128
|
const B = () => {
|
|
2081
|
-
const
|
|
2082
|
-
|
|
2083
|
-
Provider =
|
|
2129
|
+
const _useUseCase36 = useUseCase(defaultFile, mockUseCase),
|
|
2130
|
+
_useUseCase37 = _slicedToArray(_useUseCase36, 3),
|
|
2131
|
+
Provider = _useUseCase37[2];
|
|
2084
2132
|
return _jsx(Provider, {
|
|
2085
2133
|
children: _jsx(A, {})
|
|
2086
2134
|
});
|
|
@@ -2101,9 +2149,9 @@ describe('useUseCase', () => {
|
|
|
2101
2149
|
};
|
|
2102
2150
|
};
|
|
2103
2151
|
const A = () => {
|
|
2104
|
-
const
|
|
2105
|
-
|
|
2106
|
-
add =
|
|
2152
|
+
const _useUseCase38 = useUseCase(stringUseCase),
|
|
2153
|
+
_useUseCase39 = _slicedToArray(_useUseCase38, 2),
|
|
2154
|
+
add = _useUseCase39[1].add;
|
|
2107
2155
|
const update = useUpdate();
|
|
2108
2156
|
const onClick = () => {
|
|
2109
2157
|
update();
|
|
@@ -2115,9 +2163,9 @@ describe('useUseCase', () => {
|
|
|
2115
2163
|
});
|
|
2116
2164
|
};
|
|
2117
2165
|
const B = () => {
|
|
2118
|
-
const
|
|
2119
|
-
|
|
2120
|
-
Provider =
|
|
2166
|
+
const _useUseCase40 = useUseCase('', stringUseCase),
|
|
2167
|
+
_useUseCase41 = _slicedToArray(_useUseCase40, 3),
|
|
2168
|
+
Provider = _useUseCase41[2];
|
|
2121
2169
|
return _jsx(Provider, {
|
|
2122
2170
|
children: _jsx(A, {})
|
|
2123
2171
|
});
|
|
@@ -2142,9 +2190,9 @@ describe('useUseCase', () => {
|
|
|
2142
2190
|
};
|
|
2143
2191
|
};
|
|
2144
2192
|
const A = () => {
|
|
2145
|
-
const
|
|
2146
|
-
|
|
2147
|
-
add =
|
|
2193
|
+
const _useUseCase42 = useUseCase(stringUseCase),
|
|
2194
|
+
_useUseCase43 = _slicedToArray(_useUseCase42, 2),
|
|
2195
|
+
add = _useUseCase43[1].add;
|
|
2148
2196
|
const onClick = () => {
|
|
2149
2197
|
add('x');
|
|
2150
2198
|
};
|
|
@@ -2158,9 +2206,9 @@ describe('useUseCase', () => {
|
|
|
2158
2206
|
});
|
|
2159
2207
|
};
|
|
2160
2208
|
const B = () => {
|
|
2161
|
-
const
|
|
2162
|
-
|
|
2163
|
-
Provider =
|
|
2209
|
+
const _useUseCase44 = useUseCase('', stringUseCase),
|
|
2210
|
+
_useUseCase45 = _slicedToArray(_useUseCase44, 3),
|
|
2211
|
+
Provider = _useUseCase45[2];
|
|
2164
2212
|
return _jsx(Provider, {
|
|
2165
2213
|
children: _jsx(A, {})
|
|
2166
2214
|
});
|
|
@@ -2189,11 +2237,11 @@ describe('useUseCase', () => {
|
|
|
2189
2237
|
};
|
|
2190
2238
|
};
|
|
2191
2239
|
const A = () => {
|
|
2192
|
-
const
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
add =
|
|
2196
|
-
setEntity =
|
|
2240
|
+
const _useUseCase46 = useUseCase(stringUseCase),
|
|
2241
|
+
_useUseCase47 = _slicedToArray(_useUseCase46, 2),
|
|
2242
|
+
_useUseCase47$ = _useUseCase47[1],
|
|
2243
|
+
add = _useUseCase47$.add,
|
|
2244
|
+
setEntity = _useUseCase47$.setEntity;
|
|
2197
2245
|
const update = useUpdate();
|
|
2198
2246
|
add(addedText);
|
|
2199
2247
|
const onSet = () => {
|
|
@@ -2213,9 +2261,9 @@ describe('useUseCase', () => {
|
|
|
2213
2261
|
});
|
|
2214
2262
|
};
|
|
2215
2263
|
const B = () => {
|
|
2216
|
-
const
|
|
2217
|
-
|
|
2218
|
-
Provider =
|
|
2264
|
+
const _useUseCase48 = useUseCase('', stringUseCase),
|
|
2265
|
+
_useUseCase49 = _slicedToArray(_useUseCase48, 3),
|
|
2266
|
+
Provider = _useUseCase49[2];
|
|
2219
2267
|
return _jsx(Provider, {
|
|
2220
2268
|
children: _jsx(A, {})
|
|
2221
2269
|
});
|
|
@@ -2260,12 +2308,12 @@ describe('useUseCase', () => {
|
|
|
2260
2308
|
return _jsx(Fragment, {});
|
|
2261
2309
|
};
|
|
2262
2310
|
const C = () => {
|
|
2263
|
-
const
|
|
2311
|
+
const _useUseCase50 = useUseCase(defaultFile, fileUseCase, {
|
|
2264
2312
|
onChange: onChangeC
|
|
2265
2313
|
}),
|
|
2266
|
-
|
|
2267
|
-
setPath =
|
|
2268
|
-
Provider =
|
|
2314
|
+
_useUseCase51 = _slicedToArray(_useUseCase50, 3),
|
|
2315
|
+
setPath = _useUseCase51[1].setPath,
|
|
2316
|
+
Provider = _useUseCase51[2];
|
|
2269
2317
|
const onFirstClick = () => {
|
|
2270
2318
|
setPath(PATH_1);
|
|
2271
2319
|
};
|
|
@@ -2292,11 +2340,11 @@ describe('useUseCase', () => {
|
|
|
2292
2340
|
const firstButtonText = 'first button';
|
|
2293
2341
|
const secondButtonText = 'second button';
|
|
2294
2342
|
const A = () => {
|
|
2295
|
-
const
|
|
2343
|
+
const _useUseCase52 = useUseCase(fileUseCase, {
|
|
2296
2344
|
onChange
|
|
2297
2345
|
}),
|
|
2298
|
-
|
|
2299
|
-
setPath =
|
|
2346
|
+
_useUseCase53 = _slicedToArray(_useUseCase52, 2),
|
|
2347
|
+
setPath = _useUseCase53[1].setPath;
|
|
2300
2348
|
const onFirstClick = () => {
|
|
2301
2349
|
setPath(PATH_1);
|
|
2302
2350
|
onChange = onSecondChange;
|
|
@@ -2315,9 +2363,9 @@ describe('useUseCase', () => {
|
|
|
2315
2363
|
});
|
|
2316
2364
|
};
|
|
2317
2365
|
const B = () => {
|
|
2318
|
-
const
|
|
2319
|
-
|
|
2320
|
-
Provider =
|
|
2366
|
+
const _useUseCase54 = useUseCase(defaultFile, fileUseCase),
|
|
2367
|
+
_useUseCase55 = _slicedToArray(_useUseCase54, 3),
|
|
2368
|
+
Provider = _useUseCase55[2];
|
|
2321
2369
|
return _jsx(Provider, {
|
|
2322
2370
|
children: _jsx(A, {})
|
|
2323
2371
|
});
|
|
@@ -2340,13 +2388,13 @@ describe('useUseCase', () => {
|
|
|
2340
2388
|
const onExtChange = jest.fn();
|
|
2341
2389
|
const firstButtonText = 'first button';
|
|
2342
2390
|
const A = () => {
|
|
2343
|
-
const
|
|
2391
|
+
const _useUseCase56 = useUseCase(fileUseCase, {
|
|
2344
2392
|
watch: {
|
|
2345
2393
|
ext: onExtChange
|
|
2346
2394
|
}
|
|
2347
2395
|
}),
|
|
2348
|
-
|
|
2349
|
-
setPath =
|
|
2396
|
+
_useUseCase57 = _slicedToArray(_useUseCase56, 2),
|
|
2397
|
+
setPath = _useUseCase57[1].setPath;
|
|
2350
2398
|
const onFirstClick = () => {
|
|
2351
2399
|
setPath(PATH_1);
|
|
2352
2400
|
};
|
|
@@ -2356,9 +2404,9 @@ describe('useUseCase', () => {
|
|
|
2356
2404
|
});
|
|
2357
2405
|
};
|
|
2358
2406
|
const B = () => {
|
|
2359
|
-
const
|
|
2360
|
-
|
|
2361
|
-
Provider =
|
|
2407
|
+
const _useUseCase58 = useUseCase(defaultFile, fileUseCase, {}),
|
|
2408
|
+
_useUseCase59 = _slicedToArray(_useUseCase58, 3),
|
|
2409
|
+
Provider = _useUseCase59[2];
|
|
2362
2410
|
return _jsx(Provider, {
|
|
2363
2411
|
children: _jsx(A, {})
|
|
2364
2412
|
});
|
|
@@ -2409,14 +2457,14 @@ describe('useUseCase', () => {
|
|
|
2409
2457
|
return _jsx(Fragment, {});
|
|
2410
2458
|
};
|
|
2411
2459
|
const C = () => {
|
|
2412
|
-
const
|
|
2460
|
+
const _useUseCase60 = useUseCase(defaultFile, fileUseCase, {
|
|
2413
2461
|
watch: {
|
|
2414
2462
|
ext: onChangeC
|
|
2415
2463
|
}
|
|
2416
2464
|
}),
|
|
2417
|
-
|
|
2418
|
-
setPath =
|
|
2419
|
-
Provider =
|
|
2465
|
+
_useUseCase61 = _slicedToArray(_useUseCase60, 3),
|
|
2466
|
+
setPath = _useUseCase61[1].setPath,
|
|
2467
|
+
Provider = _useUseCase61[2];
|
|
2420
2468
|
const onFirstClick = () => {
|
|
2421
2469
|
setPath(PATH_1);
|
|
2422
2470
|
};
|
|
@@ -2443,13 +2491,13 @@ describe('useUseCase', () => {
|
|
|
2443
2491
|
const firstButtonText = 'first button';
|
|
2444
2492
|
const secondButtonText = 'second button';
|
|
2445
2493
|
const A = () => {
|
|
2446
|
-
const
|
|
2494
|
+
const _useUseCase62 = useUseCase(fileUseCase, {
|
|
2447
2495
|
watch: {
|
|
2448
2496
|
ext: onExtChange
|
|
2449
2497
|
}
|
|
2450
2498
|
}),
|
|
2451
|
-
|
|
2452
|
-
setPath =
|
|
2499
|
+
_useUseCase63 = _slicedToArray(_useUseCase62, 2),
|
|
2500
|
+
setPath = _useUseCase63[1].setPath;
|
|
2453
2501
|
const onFirstClick = () => {
|
|
2454
2502
|
setPath(PATH_1);
|
|
2455
2503
|
onExtChange = onSecondExtChange;
|
|
@@ -2468,9 +2516,9 @@ describe('useUseCase', () => {
|
|
|
2468
2516
|
});
|
|
2469
2517
|
};
|
|
2470
2518
|
const B = () => {
|
|
2471
|
-
const
|
|
2472
|
-
|
|
2473
|
-
Provider =
|
|
2519
|
+
const _useUseCase64 = useUseCase(defaultFile, fileUseCase),
|
|
2520
|
+
_useUseCase65 = _slicedToArray(_useUseCase64, 3),
|
|
2521
|
+
Provider = _useUseCase65[2];
|
|
2474
2522
|
return _jsx(Provider, {
|
|
2475
2523
|
children: _jsx(A, {})
|
|
2476
2524
|
});
|
|
@@ -2498,38 +2546,38 @@ describe('useUseCase', () => {
|
|
|
2498
2546
|
});
|
|
2499
2547
|
describe('`useUseCase` should work the same as `useReducers`', () => {
|
|
2500
2548
|
test('`entity` should equal `defaultFile`', () => {
|
|
2501
|
-
const
|
|
2549
|
+
const _renderHook36 = renderHook(() => {
|
|
2502
2550
|
return useUseCase(mathUseCase);
|
|
2503
2551
|
}),
|
|
2504
|
-
result =
|
|
2552
|
+
result = _renderHook36.result;
|
|
2505
2553
|
const reducers = result.current;
|
|
2506
2554
|
expect(Array.isArray(reducers)).toBe(false);
|
|
2507
2555
|
});
|
|
2508
2556
|
test('returned reducer should work', () => {
|
|
2509
|
-
const
|
|
2557
|
+
const _renderHook37 = renderHook(() => {
|
|
2510
2558
|
return useUseCase(mathUseCase);
|
|
2511
2559
|
}),
|
|
2512
|
-
result =
|
|
2560
|
+
result = _renderHook37.result;
|
|
2513
2561
|
const reducers = result.current;
|
|
2514
2562
|
const add = reducers.add;
|
|
2515
2563
|
expect(add(1, 2)).toBe(3);
|
|
2516
2564
|
});
|
|
2517
2565
|
test('`usecase` should be called only once if deps has not provided', () => {
|
|
2518
2566
|
const mockUseCase = jest.fn(mathUseCase);
|
|
2519
|
-
const
|
|
2567
|
+
const _renderHook38 = renderHook(() => {
|
|
2520
2568
|
return useUseCase(mockUseCase);
|
|
2521
2569
|
}),
|
|
2522
|
-
rerender =
|
|
2570
|
+
rerender = _renderHook38.rerender;
|
|
2523
2571
|
expect(mockUseCase).toHaveBeenCalledTimes(1);
|
|
2524
2572
|
rerender();
|
|
2525
2573
|
expect(mockUseCase).toHaveBeenCalledTimes(1);
|
|
2526
2574
|
});
|
|
2527
2575
|
test('`usecase` should be called only once if deps has not changed', () => {
|
|
2528
2576
|
const mockUseCase = jest.fn(mathUseCase);
|
|
2529
|
-
const
|
|
2577
|
+
const _renderHook39 = renderHook(() => {
|
|
2530
2578
|
return useUseCase(mockUseCase, {}, [1, 'x']);
|
|
2531
2579
|
}),
|
|
2532
|
-
rerender =
|
|
2580
|
+
rerender = _renderHook39.rerender;
|
|
2533
2581
|
expect(mockUseCase).toHaveBeenCalledTimes(1);
|
|
2534
2582
|
rerender();
|
|
2535
2583
|
expect(mockUseCase).toHaveBeenCalledTimes(1);
|
|
@@ -2537,10 +2585,10 @@ describe('useUseCase', () => {
|
|
|
2537
2585
|
test('`usecase` should be called if deps has changed', () => {
|
|
2538
2586
|
let i = 0;
|
|
2539
2587
|
const mockUseCase = jest.fn(mathUseCase);
|
|
2540
|
-
const
|
|
2588
|
+
const _renderHook40 = renderHook(() => {
|
|
2541
2589
|
return useUseCase(mockUseCase, {}, [i++, 'x']);
|
|
2542
2590
|
}),
|
|
2543
|
-
rerender =
|
|
2591
|
+
rerender = _renderHook40.rerender;
|
|
2544
2592
|
expect(mockUseCase).toHaveBeenCalledTimes(1);
|
|
2545
2593
|
rerender();
|
|
2546
2594
|
expect(mockUseCase).toHaveBeenCalledTimes(2);
|
|
@@ -2548,8 +2596,8 @@ describe('useUseCase', () => {
|
|
|
2548
2596
|
test('reducer call should not be cached if component is at rendering phase', () => {
|
|
2549
2597
|
const buttonText = 'button';
|
|
2550
2598
|
const CacheTestComponent = () => {
|
|
2551
|
-
const
|
|
2552
|
-
subtraction =
|
|
2599
|
+
const _useUseCase66 = useUseCase(mathUseCase),
|
|
2600
|
+
subtraction = _useUseCase66.subtraction;
|
|
2553
2601
|
const update = useUpdate();
|
|
2554
2602
|
const onClick = () => {
|
|
2555
2603
|
update();
|
|
@@ -2572,8 +2620,8 @@ describe('useUseCase', () => {
|
|
|
2572
2620
|
test('reducer call should not be cached if component is not at rendering phase', () => {
|
|
2573
2621
|
const buttonText = 'button';
|
|
2574
2622
|
const CacheTestComponent = () => {
|
|
2575
|
-
const
|
|
2576
|
-
subtraction =
|
|
2623
|
+
const _useUseCase67 = useUseCase(mathUseCase),
|
|
2624
|
+
subtraction = _useUseCase67.subtraction;
|
|
2577
2625
|
const onClick = () => {
|
|
2578
2626
|
subtraction(5, 3);
|
|
2579
2627
|
};
|
|
@@ -2601,8 +2649,8 @@ describe('useUseCase', () => {
|
|
|
2601
2649
|
let count = 0;
|
|
2602
2650
|
const buttonText = 'button';
|
|
2603
2651
|
const StringUseCaseTestComponent = () => {
|
|
2604
|
-
const
|
|
2605
|
-
subtraction =
|
|
2652
|
+
const _useUseCase68 = useUseCase(mathUseCase),
|
|
2653
|
+
subtraction = _useUseCase68.subtraction;
|
|
2606
2654
|
const update = useUpdate();
|
|
2607
2655
|
subtraction(5, count++);
|
|
2608
2656
|
const onUpdate = () => {
|
|
@@ -2624,12 +2672,12 @@ describe('useUseCase', () => {
|
|
|
2624
2672
|
expect(subtractionReducer).toHaveReturnedWith(4);
|
|
2625
2673
|
});
|
|
2626
2674
|
test('`options.extraValue` should be added after call `add` method', () => {
|
|
2627
|
-
const
|
|
2675
|
+
const _renderHook41 = renderHook(() => {
|
|
2628
2676
|
return useUseCase(mathUseCase, {
|
|
2629
2677
|
extraValue: 5
|
|
2630
2678
|
});
|
|
2631
2679
|
}),
|
|
2632
|
-
result =
|
|
2680
|
+
result = _renderHook41.result;
|
|
2633
2681
|
const reducers = result.current;
|
|
2634
2682
|
const add = reducers.add;
|
|
2635
2683
|
expect(add(1, 2)).toBe(8);
|
|
@@ -2637,7 +2685,7 @@ describe('useUseCase', () => {
|
|
|
2637
2685
|
test('when `options` has changed, it should not trigger update', () => {
|
|
2638
2686
|
const onUpdate = jest.fn();
|
|
2639
2687
|
const onDeepUpdate = jest.fn();
|
|
2640
|
-
const
|
|
2688
|
+
const _renderHook42 = renderHook(() => {
|
|
2641
2689
|
const _useState7 = useState(0),
|
|
2642
2690
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
2643
2691
|
extraValue = _useState8[0],
|
|
@@ -2653,7 +2701,7 @@ describe('useUseCase', () => {
|
|
|
2653
2701
|
}, [reducers]);
|
|
2654
2702
|
return setExtraValue;
|
|
2655
2703
|
}),
|
|
2656
|
-
result =
|
|
2704
|
+
result = _renderHook42.result;
|
|
2657
2705
|
expect(onUpdate).toHaveBeenCalledTimes(0);
|
|
2658
2706
|
expect(onDeepUpdate).toHaveBeenCalledTimes(0);
|
|
2659
2707
|
act(() => {
|
|
@@ -2665,7 +2713,7 @@ describe('useUseCase', () => {
|
|
|
2665
2713
|
test('when `deps` change, it should update reducers', () => {
|
|
2666
2714
|
const onUpdate = jest.fn();
|
|
2667
2715
|
const onDeepUpdate = jest.fn();
|
|
2668
|
-
const
|
|
2716
|
+
const _renderHook43 = renderHook(() => {
|
|
2669
2717
|
const _useState9 = useState(0),
|
|
2670
2718
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
2671
2719
|
extraValue = _useState0[0],
|
|
@@ -2681,7 +2729,7 @@ describe('useUseCase', () => {
|
|
|
2681
2729
|
}, [reducers]);
|
|
2682
2730
|
return setExtraValue;
|
|
2683
2731
|
}),
|
|
2684
|
-
result =
|
|
2732
|
+
result = _renderHook43.result;
|
|
2685
2733
|
expect(onUpdate).toHaveBeenCalledTimes(0);
|
|
2686
2734
|
expect(onDeepUpdate).toHaveBeenCalledTimes(0);
|
|
2687
2735
|
act(() => {
|
|
@@ -2693,7 +2741,7 @@ describe('useUseCase', () => {
|
|
|
2693
2741
|
test('empty `deps` should not update reducers', () => {
|
|
2694
2742
|
const onUpdate = jest.fn();
|
|
2695
2743
|
const onDeepUpdate = jest.fn();
|
|
2696
|
-
const
|
|
2744
|
+
const _renderHook44 = renderHook(() => {
|
|
2697
2745
|
const _useState1 = useState(0),
|
|
2698
2746
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
2699
2747
|
extraValue = _useState10[0],
|
|
@@ -2709,7 +2757,7 @@ describe('useUseCase', () => {
|
|
|
2709
2757
|
}, [reducers]);
|
|
2710
2758
|
return setExtraValue;
|
|
2711
2759
|
}),
|
|
2712
|
-
result =
|
|
2760
|
+
result = _renderHook44.result;
|
|
2713
2761
|
expect(onUpdate).toHaveBeenCalledTimes(0);
|
|
2714
2762
|
expect(onDeepUpdate).toHaveBeenCalledTimes(0);
|
|
2715
2763
|
act(() => {
|
|
@@ -5,26 +5,97 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useEntity = void 0;
|
|
7
7
|
var _useConstantEntityReducers = require("../useConstantEntityReducers");
|
|
8
|
+
var _useExec = require("../useExec");
|
|
9
|
+
var _ahooks = require("ahooks");
|
|
10
|
+
var _react = require("react");
|
|
8
11
|
var _Statuses = require("../../enums/Statuses");
|
|
12
|
+
var _triggerWatchers = require("../../methods/triggerWatchers");
|
|
9
13
|
var _valueUseCase = require("../../usecases/valueUseCase");
|
|
10
|
-
var useEntity = exports.useEntity = function useEntity(store,
|
|
14
|
+
var useEntity = exports.useEntity = function useEntity(entityArg, store, reducers, statuses, options) {
|
|
15
|
+
var update = (0, _ahooks.useUpdate)();
|
|
16
|
+
var isFunction = typeof entityArg === 'function';
|
|
17
|
+
var entity = store.value;
|
|
18
|
+
var isFirstRef = (0, _react.useRef)(true);
|
|
19
|
+
var optionsRef = (0, _ahooks.useLatest)(options);
|
|
20
|
+
var prevEntityRef = (0, _react.useRef)(entity);
|
|
21
|
+
var entityEnabled = (statuses & _Statuses.Statuses.EntityEnabled) === _Statuses.Statuses.EntityEnabled;
|
|
22
|
+
var entityRootEnabled = (statuses & _Statuses.Statuses.EntityRootEnabled) === _Statuses.Statuses.EntityRootEnabled;
|
|
23
|
+
var bindEntity = reducers.bindEntity,
|
|
24
|
+
unbindEntity = reducers.unbindEntity;
|
|
11
25
|
var _useConstantEntityRed = (0, _useConstantEntityReducers.useConstantEntityReducers)(entityArg, _valueUseCase.valueUseCase),
|
|
12
26
|
isValueChanged = _useConstantEntityRed.isValueChanged,
|
|
13
27
|
recordValue = _useConstantEntityRed.recordValue;
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
var onTriggerWatchers = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
|
|
29
|
+
var watch = optionsRef.current.watch;
|
|
30
|
+
if (!watch) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
(0, _triggerWatchers.triggerWatchers)(watch, newEntity, oldEntity);
|
|
34
|
+
});
|
|
35
|
+
var onEntityChange = (0, _ahooks.useMemoizedFn)(function (newEntity, oldEntity) {
|
|
36
|
+
var onChange = optionsRef.current.onChange;
|
|
37
|
+
prevEntityRef.current = newEntity;
|
|
38
|
+
onTriggerWatchers(newEntity, oldEntity);
|
|
39
|
+
onChange === null || onChange === void 0 || onChange(newEntity, oldEntity);
|
|
40
|
+
if (!entityRootEnabled) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
update();
|
|
44
|
+
});
|
|
45
|
+
var onValueChange = (0, _ahooks.useMemoizedFn)(function () {
|
|
46
|
+
if (!entityEnabled) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
var prevEntity = prevEntityRef.current;
|
|
50
|
+
if (entity === prevEntity) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
prevEntityRef.current = entity;
|
|
54
|
+
onTriggerWatchers(entity, prevEntity);
|
|
55
|
+
});
|
|
56
|
+
(0, _useExec.useExec)(function () {
|
|
57
|
+
var currentEntity = entityArg;
|
|
58
|
+
var isFirst = isFirstRef.current;
|
|
59
|
+
isFirstRef.current = false;
|
|
60
|
+
if (isFirst) {
|
|
61
|
+
var _bindEntity;
|
|
62
|
+
currentEntity = (_bindEntity = bindEntity === null || bindEntity === void 0 ? void 0 : bindEntity()) !== null && _bindEntity !== void 0 ? _bindEntity : currentEntity;
|
|
63
|
+
}
|
|
64
|
+
switch (true) {
|
|
65
|
+
case !entityRootEnabled:
|
|
66
|
+
case isFunction:
|
|
67
|
+
case !isValueChanged(currentEntity):
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
recordValue(currentEntity);
|
|
71
|
+
store.disableWatchers();
|
|
72
|
+
// 执行同步操作
|
|
73
|
+
store.setValue(currentEntity);
|
|
74
|
+
store.enableWatchers();
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* 需要马上 `watch`,因为 `useEffect` 在子组件内优先执行,
|
|
78
|
+
* 如果使用了 `setEntity` 则无法监控到变化
|
|
79
|
+
*/
|
|
80
|
+
(0, _useExec.useExec)(function () {
|
|
81
|
+
if (!entityEnabled) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
store.watch(onEntityChange);
|
|
85
|
+
}, [entityEnabled, store, onEntityChange]);
|
|
86
|
+
/**
|
|
87
|
+
* 在变化时候,组件更新前,使用 `unwatch`
|
|
88
|
+
*/
|
|
89
|
+
(0, _react.useEffect)(function () {
|
|
90
|
+
return function () {
|
|
91
|
+
store.unwatch(onEntityChange);
|
|
92
|
+
};
|
|
93
|
+
}, [entityEnabled, store, onEntityChange]);
|
|
94
|
+
(0, _ahooks.useUnmount)(function () {
|
|
95
|
+
unbindEntity === null || unbindEntity === void 0 || unbindEntity();
|
|
96
|
+
});
|
|
97
|
+
(0, _ahooks.useUpdateEffect)(function () {
|
|
98
|
+
onValueChange();
|
|
99
|
+
}, [entity, onValueChange]);
|
|
100
|
+
return store.value;
|
|
30
101
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useExec = void 0;
|
|
7
|
+
var _useDepsKey = require("../useDepsKey");
|
|
8
|
+
var _ahooks = require("ahooks");
|
|
9
|
+
var useExec = exports.useExec = function useExec(callback) {
|
|
10
|
+
var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [callback];
|
|
11
|
+
var depsKey = (0, _useDepsKey.useDepsKey)(deps);
|
|
12
|
+
var execCallback = (0, _ahooks.useMemoizedFn)(function () {
|
|
13
|
+
callback();
|
|
14
|
+
});
|
|
15
|
+
(0, _ahooks.useCreation)(function () {
|
|
16
|
+
void depsKey;
|
|
17
|
+
execCallback();
|
|
18
|
+
}, [depsKey, execCallback]);
|
|
19
|
+
};
|
|
@@ -27,7 +27,7 @@ var useReducers = exports.useReducers = function useReducers(usecase, context, s
|
|
|
27
27
|
contextReducers = _ref$reducers === void 0 ? null : _ref$reducers;
|
|
28
28
|
var _useConstantReducers = (0, _useConstantReducers2.useConstantReducers)(_methodUseCase.methodUseCase),
|
|
29
29
|
captureCalls = _useConstantReducers.captureCalls;
|
|
30
|
-
|
|
30
|
+
var reducers = (0, _useContextualItem.useContextualItem)(contextReducers, statuses, function () {
|
|
31
31
|
var opts = captureCalls(options, function (key, callArgs) {
|
|
32
32
|
var _optionsRef$current$k2;
|
|
33
33
|
var _optionsRef$current$k, _optionsRef$current;
|
|
@@ -47,4 +47,5 @@ var useReducers = exports.useReducers = function useReducers(usecase, context, s
|
|
|
47
47
|
}
|
|
48
48
|
}));
|
|
49
49
|
}, deps);
|
|
50
|
+
return reducers;
|
|
50
51
|
};
|