@applicaster/quick-brick-core 13.0.0-alpha.5033140607 → 13.0.0-alpha.5255052345
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/App/ActionsProvider/__tests__/__snapshots__/ActionsProvider.test.js.snap +7 -7
- package/App/AssetCache/__tests__/__snapshots__/assetCache.test.ts.snap +103 -103
- package/App/AssetCache/__tests__/assetCache.test.ts +3 -2
- package/App/DeepLinking/URLSchemeHandler/SchemeHandlerHooks/__tests__/__snapshots__/schemeHandlerHooks.test.ts.snap +1 -1
- package/App/DeepLinking/URLSchemeHandler/SchemeHandlerHooks/__tests__/useOpenSchemeHandler.test.tsx +45 -116
- package/App/DeepLinking/URLSchemeHandler/__tests__/__snapshots__/URLSchemeHandler.test.tsx.snap +3 -3
- package/App/DeepLinking/URLSchemeListener/URLSchemeContextProvider.tsx +30 -3
- package/App/LoadingOverlay/LoadingOverlayManager.tsx +27 -0
- package/App/LoadingOverlay/index.tsx +49 -0
- package/App/LoadingOverlay/useLoadingOverlayVisibility.tsx +18 -0
- package/App/NavigationProvider/NavigationProvider.tsx +48 -20
- package/App/NavigationProvider/__tests__/__snapshots__/navigationProvider.test.tsx.snap +20 -22
- package/App/NavigationProvider/navigator/__tests__/__snapshots__/reducer.test.ts.snap +189 -189
- package/App/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +2 -2
- package/App/StoreConnector/__tests__/__snapshots__/storeConnector.test.js.snap +5 -5
- package/App/appLifeCycleManager/__tests__/__snapshots__/appLifeCycleManager.test.js.snap +4 -4
- package/App/appLifeCycleManager/__tests__/appLifeCycleManager.test.js +5 -5
- package/App/appLifeCycleManager/index.tsx +2 -3
- package/App/index.tsx +6 -0
- package/App/remoteContextReloader/__tests__/__snapshots__/remoteContextReloader.test.js.snap +9 -9
- package/App/remoteContextReloader/consts.ts +2 -0
- package/App/remoteContextReloader/getRemoteContextData/getNativeRemoteContextData.ts +17 -6
- package/createZappApp/__tests__/__snapshots__/createZappApp.test.js.snap +33 -33
- package/index.d.ts +1 -1
- package/package.json +25 -9
|
@@ -3,26 +3,26 @@
|
|
|
3
3
|
exports[`storeConnector passes the props to the component 1`] = `
|
|
4
4
|
<Component
|
|
5
5
|
appSettings={
|
|
6
|
-
|
|
6
|
+
{
|
|
7
7
|
"bundleIdentifier": "com.app.test",
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
components={
|
|
11
|
-
|
|
11
|
+
{
|
|
12
12
|
"grid": [MockFunction],
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
dispatch={[Function]}
|
|
16
16
|
rivers={
|
|
17
|
-
|
|
18
|
-
"A123":
|
|
17
|
+
{
|
|
18
|
+
"A123": {
|
|
19
19
|
"id": "A123",
|
|
20
20
|
"name": "home",
|
|
21
21
|
},
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
store={
|
|
25
|
-
|
|
25
|
+
{
|
|
26
26
|
"clearActions": [Function],
|
|
27
27
|
"dispatch": [Function],
|
|
28
28
|
"getActions": [Function],
|
|
@@ -17,10 +17,10 @@ exports[`appLifeCycleManager sends the quickBrickReady event when a loader doesn
|
|
|
17
17
|
`;
|
|
18
18
|
|
|
19
19
|
exports[`appLifeCycleManager sends the quickBrickReady event when a loader doesn't resolves 2`] = `
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"data":
|
|
20
|
+
[
|
|
21
|
+
[
|
|
22
|
+
{
|
|
23
|
+
"data": {
|
|
24
24
|
"error": [Error: loading failed],
|
|
25
25
|
},
|
|
26
26
|
"message": "AppLifeCycleManager: A loading operation failed: loading failed",
|
|
@@ -8,7 +8,7 @@ const Component = () => (
|
|
|
8
8
|
</View>
|
|
9
9
|
);
|
|
10
10
|
|
|
11
|
-
const
|
|
11
|
+
const mockLogger = {
|
|
12
12
|
warning: jest.fn(),
|
|
13
13
|
log: jest.fn(),
|
|
14
14
|
debug: jest.fn(),
|
|
@@ -17,7 +17,7 @@ const logger = {
|
|
|
17
17
|
|
|
18
18
|
jest.mock("../../logger", () => ({
|
|
19
19
|
coreAppLogger: {
|
|
20
|
-
addSubsystem: jest.fn(() =>
|
|
20
|
+
addSubsystem: jest.fn(() => mockLogger),
|
|
21
21
|
},
|
|
22
22
|
}));
|
|
23
23
|
|
|
@@ -45,7 +45,7 @@ const QUICK_BRICK_READY_EVENT = "quickBrickReady";
|
|
|
45
45
|
|
|
46
46
|
const actions = {};
|
|
47
47
|
|
|
48
|
-
jest.
|
|
48
|
+
jest.doMock("@applicaster/zapp-react-native-utils/reactHooks/actions", () => ({
|
|
49
49
|
useActions: jest.fn(() => ({ actions })),
|
|
50
50
|
}));
|
|
51
51
|
|
|
@@ -55,7 +55,7 @@ describe("appLifeCycleManager", () => {
|
|
|
55
55
|
const decorator = appLifeCycleManager(appLoader, QuickBrickManager);
|
|
56
56
|
|
|
57
57
|
beforeEach(() => {
|
|
58
|
-
|
|
58
|
+
mockLogger.warning.mockClear();
|
|
59
59
|
appLoader.mockClear();
|
|
60
60
|
QuickBrickManager.sendQuickBrickEvent.mockClear();
|
|
61
61
|
dispatch.mockClear();
|
|
@@ -111,7 +111,7 @@ describe("appLifeCycleManager", () => {
|
|
|
111
111
|
QUICK_BRICK_READY_EVENT
|
|
112
112
|
);
|
|
113
113
|
|
|
114
|
-
expect(
|
|
114
|
+
expect(mockLogger.warning.mock.calls).toMatchSnapshot();
|
|
115
115
|
|
|
116
116
|
done();
|
|
117
117
|
};
|
|
@@ -131,9 +131,8 @@ export function appLifeCycleManager(appLoader, QuickBrickManager) {
|
|
|
131
131
|
)
|
|
132
132
|
.map((plugin: any) => plugin.module?.getLoginProtocol?.());
|
|
133
133
|
|
|
134
|
-
const loginProtocols: LoginProtocol[] =
|
|
135
|
-
promiseProtocols
|
|
136
|
-
);
|
|
134
|
+
const loginProtocols: LoginProtocol[] =
|
|
135
|
+
await Promise.all(promiseProtocols);
|
|
137
136
|
|
|
138
137
|
// Await all does not work here
|
|
139
138
|
for (const protocol of loginProtocols) {
|
package/App/index.tsx
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// Disable logs popups(RN68)
|
|
2
|
+
import { LogBox } from "react-native";
|
|
3
|
+
LogBox.ignoreAllLogs();
|
|
4
|
+
|
|
1
5
|
import * as React from "react";
|
|
2
6
|
import * as R from "ramda";
|
|
3
7
|
import {
|
|
@@ -29,6 +33,7 @@ import { appRemoteDataLoader } from "./appRemoteDataLoader";
|
|
|
29
33
|
import { withActionExecutor } from "@applicaster/zapp-react-native-utils/actionsExecutor/ActionExecutorContext";
|
|
30
34
|
import { withScreenDataContextProvider } from "@applicaster/zapp-react-native-ui-components/Contexts/ScreenDataContext";
|
|
31
35
|
import { LogicAggregatorContainer } from "./LogicAggregatorContainer";
|
|
36
|
+
import { LoadingOverlay } from "./LoadingOverlay";
|
|
32
37
|
|
|
33
38
|
interface AppOptions {
|
|
34
39
|
Layout: React.ComponentType;
|
|
@@ -74,6 +79,7 @@ const App = ({
|
|
|
74
79
|
<LogicAggregatorContainer
|
|
75
80
|
components={[InteractionManager, ApplyScreenHooks]}
|
|
76
81
|
/>
|
|
82
|
+
<LoadingOverlay />
|
|
77
83
|
</ErrorBoundary>
|
|
78
84
|
</AppContainer>
|
|
79
85
|
</SafeAreaProvider>
|
package/App/remoteContextReloader/__tests__/__snapshots__/remoteContextReloader.test.js.snap
CHANGED
|
@@ -3,41 +3,41 @@
|
|
|
3
3
|
exports[`remoteContextReloader adds a componentDidMount method 1`] = `
|
|
4
4
|
<Component
|
|
5
5
|
appSettings={
|
|
6
|
-
|
|
7
|
-
"runtimeConfigurationUrls":
|
|
6
|
+
{
|
|
7
|
+
"runtimeConfigurationUrls": {
|
|
8
8
|
"foo": "bar",
|
|
9
9
|
},
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
dispatch={[MockFunction]}
|
|
13
|
-
plugins={
|
|
13
|
+
plugins={[]}
|
|
14
14
|
/>
|
|
15
15
|
`;
|
|
16
16
|
|
|
17
17
|
exports[`remoteContextReloader when in __DEV__ doesn't invoke the context reloader 1`] = `
|
|
18
18
|
<Component
|
|
19
19
|
appSettings={
|
|
20
|
-
|
|
21
|
-
"runtimeConfigurationUrls":
|
|
20
|
+
{
|
|
21
|
+
"runtimeConfigurationUrls": {
|
|
22
22
|
"foo": "bar",
|
|
23
23
|
},
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
dispatch={[MockFunction]}
|
|
27
|
-
plugins={
|
|
27
|
+
plugins={[]}
|
|
28
28
|
/>
|
|
29
29
|
`;
|
|
30
30
|
|
|
31
31
|
exports[`remoteContextReloader when not in __DEV__ invokes the context reloader 1`] = `
|
|
32
32
|
<Component
|
|
33
33
|
appSettings={
|
|
34
|
-
|
|
35
|
-
"runtimeConfigurationUrls":
|
|
34
|
+
{
|
|
35
|
+
"runtimeConfigurationUrls": {
|
|
36
36
|
"foo": "bar",
|
|
37
37
|
},
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
dispatch={[MockFunction]}
|
|
41
|
-
plugins={
|
|
41
|
+
plugins={[]}
|
|
42
42
|
/>
|
|
43
43
|
`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as R from "ramda";
|
|
2
|
-
import { Dimensions } from "react-native";
|
|
2
|
+
import { Dimensions, NativeModules } from "react-native";
|
|
3
3
|
import { loadAppContextData } from "@applicaster/zapp-react-native-redux";
|
|
4
4
|
import { isTablet } from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
5
5
|
import { mapPromises } from "@applicaster/zapp-react-native-utils/arrayUtils";
|
|
@@ -7,6 +7,9 @@ import { fetchPluginConfiguration, getPromiseForType } from "../helpers";
|
|
|
7
7
|
import { cacheAssets } from "../../AssetCache";
|
|
8
8
|
import { actions as appDataActions } from "@applicaster/zapp-react-native-redux/AppData";
|
|
9
9
|
import { logger } from "@applicaster/zapp-react-native-utils/logger";
|
|
10
|
+
import { ACTIVE_LAYOUT_ID_STORAGE_KEY } from "../consts";
|
|
11
|
+
const { AppLoaderBridge } = NativeModules;
|
|
12
|
+
import { localStorage } from "@applicaster/zapp-react-native-bridge/ZappStorage/LocalStorage";
|
|
10
13
|
|
|
11
14
|
export async function getNativeRemoteContextData(
|
|
12
15
|
dispatch,
|
|
@@ -33,11 +36,19 @@ export async function getNativeRemoteContextData(
|
|
|
33
36
|
R.pathSatisfies(R.is(Function), ["module", "selectLayout"])
|
|
34
37
|
)(plugins);
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
if (layoutManagerPlugin) {
|
|
40
|
+
await layoutManagerPlugin.module?.selectLayout({
|
|
41
|
+
runtimeConfigurationUrls,
|
|
42
|
+
plugin: layoutManagerPlugin,
|
|
43
|
+
isTablet: isTabletDevice,
|
|
44
|
+
});
|
|
45
|
+
} else {
|
|
46
|
+
const layoutId = await localStorage.getItem(ACTIVE_LAYOUT_ID_STORAGE_KEY);
|
|
47
|
+
|
|
48
|
+
if (layoutId) {
|
|
49
|
+
await AppLoaderBridge?.switchLayout(layoutId, null);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
41
52
|
} catch (error) {
|
|
42
53
|
logger.error({
|
|
43
54
|
message: "Error selecting layout using layout manager plugin",
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`createZappApp has a <Provider /> component with an initialized store 1`] = `
|
|
4
|
-
|
|
5
|
-
"appData":
|
|
4
|
+
{
|
|
5
|
+
"appData": {
|
|
6
6
|
"countryLocale": "GB",
|
|
7
7
|
"languageLocale": "en",
|
|
8
8
|
"layoutVersion": "v1",
|
|
9
9
|
"quickBrickEvent": [MockFunction],
|
|
10
10
|
},
|
|
11
|
-
"appSettings":
|
|
12
|
-
"runtimeConfigurationUrls":
|
|
11
|
+
"appSettings": {
|
|
12
|
+
"runtimeConfigurationUrls": {},
|
|
13
13
|
},
|
|
14
|
-
"appState":
|
|
14
|
+
"appState": {
|
|
15
15
|
"appLaunched": false,
|
|
16
16
|
"appReady": false,
|
|
17
|
-
"appState":
|
|
17
|
+
"appState": {
|
|
18
18
|
"currentState": null,
|
|
19
19
|
"eventType": null,
|
|
20
20
|
"isAvailable": null,
|
|
21
21
|
"nextState": null,
|
|
22
22
|
},
|
|
23
23
|
},
|
|
24
|
-
"cellStyles":
|
|
25
|
-
"components":
|
|
24
|
+
"cellStyles": {},
|
|
25
|
+
"components": {
|
|
26
26
|
"AppContainer": [Function],
|
|
27
27
|
"ContentScreen": [Function],
|
|
28
28
|
"HookRenderer": [Function],
|
|
29
29
|
"ModalComponent": [Function],
|
|
30
|
-
"PlayerContainer":
|
|
30
|
+
"PlayerContainer": {
|
|
31
31
|
"$$typeof": Symbol(react.memo),
|
|
32
|
-
"WrappedComponent":
|
|
32
|
+
"WrappedComponent": {
|
|
33
33
|
"$$typeof": Symbol(react.memo),
|
|
34
34
|
"compare": null,
|
|
35
35
|
"type": [Function],
|
|
@@ -38,49 +38,49 @@ Object {
|
|
|
38
38
|
"type": [Function],
|
|
39
39
|
},
|
|
40
40
|
"QBImage": [Function],
|
|
41
|
-
"River":
|
|
41
|
+
"River": {
|
|
42
42
|
"$$typeof": Symbol(react.memo),
|
|
43
43
|
"WrappedComponent": [Function],
|
|
44
44
|
"compare": null,
|
|
45
45
|
"type": [Function],
|
|
46
46
|
},
|
|
47
|
-
"TextInputTv":
|
|
47
|
+
"TextInputTv": {
|
|
48
48
|
"$$typeof": Symbol(react.forward_ref),
|
|
49
49
|
"render": [Function],
|
|
50
50
|
},
|
|
51
51
|
"Touchable": [Function],
|
|
52
52
|
},
|
|
53
53
|
"contentTypes": null,
|
|
54
|
-
"localizations":
|
|
54
|
+
"localizations": {},
|
|
55
55
|
"pipesEndpoints": null,
|
|
56
|
-
"pluginConfigurations":
|
|
57
|
-
"pc1":
|
|
56
|
+
"pluginConfigurations": {
|
|
57
|
+
"pc1": {
|
|
58
58
|
"configuration_json": null,
|
|
59
|
-
"plugin":
|
|
60
|
-
"api":
|
|
59
|
+
"plugin": {
|
|
60
|
+
"api": {},
|
|
61
61
|
"identifier": "pc1",
|
|
62
62
|
},
|
|
63
63
|
},
|
|
64
|
-
"pc2":
|
|
65
|
-
"configuration_json":
|
|
64
|
+
"pc2": {
|
|
65
|
+
"configuration_json": {
|
|
66
66
|
"foo": "bar",
|
|
67
67
|
},
|
|
68
|
-
"plugin":
|
|
69
|
-
"api":
|
|
68
|
+
"plugin": {
|
|
69
|
+
"api": {},
|
|
70
70
|
"identifier": "pc2",
|
|
71
71
|
},
|
|
72
72
|
},
|
|
73
73
|
},
|
|
74
|
-
"plugins":
|
|
75
|
-
|
|
74
|
+
"plugins": [
|
|
75
|
+
{
|
|
76
76
|
"configuration": null,
|
|
77
77
|
"identifier": "pc1",
|
|
78
78
|
"module": [MockFunction],
|
|
79
79
|
"name": "Plugin1",
|
|
80
80
|
"type": "general",
|
|
81
81
|
},
|
|
82
|
-
|
|
83
|
-
"configuration":
|
|
82
|
+
{
|
|
83
|
+
"configuration": {
|
|
84
84
|
"foo": "bar",
|
|
85
85
|
},
|
|
86
86
|
"identifier": "pc2",
|
|
@@ -89,20 +89,20 @@ Object {
|
|
|
89
89
|
"type": "general",
|
|
90
90
|
},
|
|
91
91
|
],
|
|
92
|
-
"presetsMapping":
|
|
93
|
-
"remoteConfigurations":
|
|
94
|
-
"localizations":
|
|
92
|
+
"presetsMapping": {},
|
|
93
|
+
"remoteConfigurations": {
|
|
94
|
+
"localizations": {},
|
|
95
95
|
},
|
|
96
|
-
"rivers":
|
|
97
|
-
"styles":
|
|
98
|
-
"zappPipes":
|
|
96
|
+
"rivers": {},
|
|
97
|
+
"styles": {},
|
|
98
|
+
"zappPipes": {},
|
|
99
99
|
}
|
|
100
100
|
`;
|
|
101
101
|
|
|
102
102
|
exports[`createZappApp renders the provided React App 1`] = `
|
|
103
103
|
<Provider
|
|
104
104
|
store={
|
|
105
|
-
|
|
105
|
+
{
|
|
106
106
|
"@@observable": [Function],
|
|
107
107
|
"dispatch": [Function],
|
|
108
108
|
"getState": [Function],
|
|
@@ -118,7 +118,7 @@ exports[`createZappApp renders the provided React App 1`] = `
|
|
|
118
118
|
exports[`createZappApp returns a react component 1`] = `
|
|
119
119
|
<Provider
|
|
120
120
|
store={
|
|
121
|
-
|
|
121
|
+
{
|
|
122
122
|
"@@observable": [Function],
|
|
123
123
|
"dispatch": [Function],
|
|
124
124
|
"getState": [Function],
|
package/index.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ type AnyValue = void | string | number | boolean | AnyArray | AnyRecord;
|
|
|
24
24
|
declare type ReducerAction<
|
|
25
25
|
T extends string = string,
|
|
26
26
|
P extends AnyValue = AnyValue,
|
|
27
|
-
M extends AnyRecord = AnyRecord
|
|
27
|
+
M extends AnyRecord = AnyRecord,
|
|
28
28
|
> = {
|
|
29
29
|
type: T;
|
|
30
30
|
payload?: P;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/quick-brick-core",
|
|
3
|
-
"version": "13.0.0-alpha.
|
|
3
|
+
"version": "13.0.0-alpha.5255052345",
|
|
4
4
|
"description": "Core package for Applicaster's Quick Brick App",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
},
|
|
30
30
|
"homepage": "https://github.com/applicaster/quickbrick#readme",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@applicaster/applicaster-types": "13.0.0-alpha.
|
|
33
|
-
"@applicaster/quick-brick-core-plugins": "13.0.0-alpha.
|
|
34
|
-
"@applicaster/zapp-pipes-v2-client": "13.0.0-alpha.
|
|
35
|
-
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.
|
|
36
|
-
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.
|
|
37
|
-
"@applicaster/zapp-react-native-ui-components": "13.0.0-alpha.
|
|
38
|
-
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.
|
|
32
|
+
"@applicaster/applicaster-types": "13.0.0-alpha.5255052345",
|
|
33
|
+
"@applicaster/quick-brick-core-plugins": "13.0.0-alpha.5255052345",
|
|
34
|
+
"@applicaster/zapp-pipes-v2-client": "13.0.0-alpha.5255052345",
|
|
35
|
+
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.5255052345",
|
|
36
|
+
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.5255052345",
|
|
37
|
+
"@applicaster/zapp-react-native-ui-components": "13.0.0-alpha.5255052345",
|
|
38
|
+
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.5255052345",
|
|
39
39
|
"atob": "^2.1.2",
|
|
40
40
|
"axios": "^0.28.0",
|
|
41
41
|
"btoa": "^1.2.1",
|
|
@@ -50,11 +50,27 @@
|
|
|
50
50
|
"uuid": "3.3.2"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
+
"@applicaster/blur": "*",
|
|
54
|
+
"@applicaster/quick-brick-xray": "*",
|
|
55
|
+
"@applicaster/zapp-react-dom-ui-components": "*",
|
|
56
|
+
"@applicaster/zapp-react-native-tvos-app": "*",
|
|
57
|
+
"@applicaster/zapp-react-native-tvos-ui-components": "*",
|
|
58
|
+
"@babel/runtime": "*",
|
|
53
59
|
"@react-native-community/netinfo": "*",
|
|
60
|
+
"@types/node": "*",
|
|
61
|
+
"immer": "*",
|
|
54
62
|
"react": "17.0.2",
|
|
55
63
|
"react-native": "0.68.6",
|
|
64
|
+
"react-native-fs": "*",
|
|
56
65
|
"react-native-gesture-handler": "*",
|
|
57
|
-
"react-native-
|
|
66
|
+
"react-native-linear-gradient": "*",
|
|
67
|
+
"react-native-safe-area-context": "*",
|
|
68
|
+
"react-native-svg": "*",
|
|
69
|
+
"react-native-web": "*",
|
|
70
|
+
"react-native-webview": "*",
|
|
71
|
+
"uglify-js": "*",
|
|
72
|
+
"validate-color": "*",
|
|
73
|
+
"zustand": "*"
|
|
58
74
|
},
|
|
59
75
|
"devDependencies": {
|
|
60
76
|
"@types/react-native": "0.69.6",
|