@applicaster/zapp-react-native-ui-components 12.0.0-alpha.5923342081 → 12.0.0-alpha.5933014273
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/Components/PlayerContainer/PlayerContainer.tsx +3 -11
- package/Components/Transitioner/Transitioner.tsx +3 -13
- package/Components/VideoModal/PlayerDetails.tsx +2 -16
- package/Components/VideoModal/PlayerWrapper.tsx +10 -40
- package/Components/VideoModal/VideoModal.tsx +27 -33
- package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +0 -7
- package/Components/VideoModal/__tests__/__snapshots__/PlayerDetails.test.tsx.snap +0 -2
- package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +10 -56
- package/Contexts/ConfirmDialogState/index.ts +1 -1
- package/package.json +5 -5
|
@@ -363,19 +363,11 @@ const PlayerContainerComponent = (props: Props) => {
|
|
|
363
363
|
const { fullscreen = false } = event || {};
|
|
364
364
|
|
|
365
365
|
if (fullscreen) {
|
|
366
|
-
|
|
366
|
+
playerEvent("onFullscreenPlayerWillPresent");
|
|
367
367
|
navigator.fullscreenVideoModal();
|
|
368
|
-
|
|
369
|
-
setTimeout(() => {
|
|
370
|
-
playerEvent("onFullscreenPlayerWillPresent");
|
|
371
|
-
});
|
|
372
368
|
} else {
|
|
373
|
-
|
|
369
|
+
playerEvent("onFullscreenPlayerWillDismiss");
|
|
374
370
|
navigator.maximiseVideoModal();
|
|
375
|
-
|
|
376
|
-
setTimeout(() => {
|
|
377
|
-
playerEvent("onFullscreenPlayerWillDismiss");
|
|
378
|
-
});
|
|
379
371
|
}
|
|
380
372
|
};
|
|
381
373
|
|
|
@@ -527,7 +519,7 @@ const PlayerContainerComponent = (props: Props) => {
|
|
|
527
519
|
}
|
|
528
520
|
|
|
529
521
|
return () => {
|
|
530
|
-
playerEvent("player_did_close"
|
|
522
|
+
playerEvent("player_did_close");
|
|
531
523
|
|
|
532
524
|
if (!isModal) {
|
|
533
525
|
showNavBar(true);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { View } from "react-native";
|
|
3
|
-
import { update, compose, tail, append, take, identity
|
|
3
|
+
import { update, compose, tail, append, take, identity } from "ramda";
|
|
4
4
|
|
|
5
5
|
import { AnimationManager } from "./AnimationManager";
|
|
6
6
|
import { Scene } from "./Scene";
|
|
@@ -50,10 +50,6 @@ function scenesForBackTransition(props: SceneProps, { scenes }) {
|
|
|
50
50
|
: [prepareScene(props.children), scenes[0]];
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
const isModalClosed = (navigator) => {
|
|
54
|
-
return !!isNil(navigator?.modalData);
|
|
55
|
-
};
|
|
56
|
-
|
|
57
53
|
type Props = {
|
|
58
54
|
transitionConfig: any;
|
|
59
55
|
children: React.ReactNode;
|
|
@@ -317,10 +313,7 @@ export class TransitionerComponent extends React.PureComponent<Props, State> {
|
|
|
317
313
|
<Scene
|
|
318
314
|
key={scenes[from.index].key}
|
|
319
315
|
pathname={scenes[from.index].key}
|
|
320
|
-
isActive={
|
|
321
|
-
scenes[from.index].key === this.props.navigator.currentRoute &&
|
|
322
|
-
isModalClosed(this.props.navigator)
|
|
323
|
-
}
|
|
316
|
+
isActive={scenes[from.index].key === this.props.navigator.currentRoute}
|
|
324
317
|
style={from.style}
|
|
325
318
|
pointerEvents="none"
|
|
326
319
|
overlayStyle={from.overlayStyle}
|
|
@@ -336,10 +329,7 @@ export class TransitionerComponent extends React.PureComponent<Props, State> {
|
|
|
336
329
|
const toScene = scenes[to.index] && (
|
|
337
330
|
<Scene
|
|
338
331
|
pathname={scenes[to.index].key}
|
|
339
|
-
isActive={
|
|
340
|
-
scenes[to.index].key === this.props.navigator.currentRoute &&
|
|
341
|
-
isModalClosed(this.props.navigator)
|
|
342
|
-
}
|
|
332
|
+
isActive={scenes[to.index].key === this.props.navigator.currentRoute}
|
|
343
333
|
key={scenes[to.index].key}
|
|
344
334
|
style={to.style}
|
|
345
335
|
overlayStyle={to.overlayStyle}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
import React, { useEffect, useRef } from "react";
|
|
2
|
-
import {
|
|
3
|
-
StyleProp,
|
|
4
|
-
ViewStyle,
|
|
5
|
-
Animated,
|
|
6
|
-
Easing,
|
|
7
|
-
Dimensions,
|
|
8
|
-
} from "react-native";
|
|
2
|
+
import { StyleProp, ViewStyle, Animated, Easing } from "react-native";
|
|
9
3
|
import { useTargetScreenData } from "@applicaster/zapp-react-native-utils/reactHooks/screen";
|
|
10
4
|
import { ComponentsMap } from "@applicaster/zapp-react-native-ui-components/Components/River/ComponentsMap";
|
|
11
5
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
12
6
|
|
|
13
|
-
const { width: SCREEN_WIDTH } = Dimensions.get("screen");
|
|
14
|
-
|
|
15
7
|
type Configuration = {
|
|
16
8
|
[key: string]: any;
|
|
17
9
|
modal_background_color?: string;
|
|
@@ -23,7 +15,6 @@ type Props = {
|
|
|
23
15
|
configuration: Configuration;
|
|
24
16
|
isTabletLandscape: boolean;
|
|
25
17
|
isAudioPlayer?: boolean;
|
|
26
|
-
isTablet: boolean;
|
|
27
18
|
};
|
|
28
19
|
|
|
29
20
|
const containerStyle = ({
|
|
@@ -40,7 +31,6 @@ export const PlayerDetails = ({
|
|
|
40
31
|
configuration,
|
|
41
32
|
isTabletLandscape,
|
|
42
33
|
isAudioPlayer,
|
|
43
|
-
isTablet,
|
|
44
34
|
}: Props) => {
|
|
45
35
|
const screenData = useTargetScreenData(entry);
|
|
46
36
|
const insets = useSafeAreaInsets();
|
|
@@ -87,11 +77,7 @@ export const PlayerDetails = ({
|
|
|
87
77
|
transform: [{ translateY }],
|
|
88
78
|
opacity,
|
|
89
79
|
},
|
|
90
|
-
|
|
91
|
-
// workaround for avoid wrong text-height after going back to portrait rotation
|
|
92
|
-
// we don't see this view in landscape mode, so we are able to use fixed width from portrait mode
|
|
93
|
-
width: isTablet ? undefined : SCREEN_WIDTH,
|
|
94
|
-
},
|
|
80
|
+
// isAudioPlayer && audioMarginStyle,
|
|
95
81
|
]}
|
|
96
82
|
>
|
|
97
83
|
{screenData && (
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
ViewStyle,
|
|
8
8
|
} from "react-native";
|
|
9
9
|
import { Edge, SafeAreaView } from "react-native-safe-area-context";
|
|
10
|
+
|
|
10
11
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
11
12
|
import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
12
13
|
import { PlayerDetails } from "./PlayerDetails";
|
|
@@ -22,8 +23,6 @@ import {
|
|
|
22
23
|
ComponentAnimationType,
|
|
23
24
|
} from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
24
25
|
|
|
25
|
-
const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = Dimensions.get("screen");
|
|
26
|
-
|
|
27
26
|
type DimensionsT = {
|
|
28
27
|
width: number | string;
|
|
29
28
|
height: number | string | undefined;
|
|
@@ -70,8 +69,10 @@ const directionStyles = (isTabletLandscape: boolean): ViewStyle => {
|
|
|
70
69
|
};
|
|
71
70
|
|
|
72
71
|
const getScreenAspectRatio = () => {
|
|
73
|
-
const
|
|
74
|
-
|
|
72
|
+
const { width, height } = Dimensions.get("screen");
|
|
73
|
+
|
|
74
|
+
const longEdge = Math.max(width, height);
|
|
75
|
+
const shortEdge = Math.min(width, height);
|
|
75
76
|
|
|
76
77
|
return longEdge / shortEdge;
|
|
77
78
|
};
|
|
@@ -124,37 +125,10 @@ const getTabletWidth = (
|
|
|
124
125
|
return Number(width) - sidebarWidth;
|
|
125
126
|
};
|
|
126
127
|
|
|
127
|
-
const
|
|
128
|
-
if (isMobile && isPortrait) {
|
|
129
|
-
return { width: SCREEN_WIDTH, height: SCREEN_HEIGHT };
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (isMobile && !isPortrait) {
|
|
133
|
-
return { width: SCREEN_HEIGHT, height: SCREEN_WIDTH };
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return baseStyle;
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
const showDetails = (isMobile: boolean, docked: boolean): boolean => {
|
|
140
|
-
// for mobile we always show details. Mounting of it very heavy operation.
|
|
141
|
-
if (isMobile) {
|
|
142
|
-
return true;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// workaround for tablets we need to mount/unmount in order to avoid PlayerDetails content dissappearing
|
|
146
|
-
// FIXME - find out the reason of dissapearing of content
|
|
147
|
-
if (docked) {
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return true;
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
const PlayerWrapperComponent = (props: Props) => {
|
|
128
|
+
export const PlayerWrapper = (props: Props) => {
|
|
155
129
|
const {
|
|
156
130
|
entry,
|
|
157
|
-
style
|
|
131
|
+
style,
|
|
158
132
|
containerStyle,
|
|
159
133
|
inline,
|
|
160
134
|
docked,
|
|
@@ -169,8 +143,6 @@ const PlayerWrapperComponent = (props: Props) => {
|
|
|
169
143
|
|
|
170
144
|
const isInlineModal = inline && isModal;
|
|
171
145
|
|
|
172
|
-
const style = getStyles(baseStyle, !isTablet, isInlineModal);
|
|
173
|
-
|
|
174
146
|
const isTabletLandscape = !isTV() && isTablet && !isTabletPortrait;
|
|
175
147
|
|
|
176
148
|
const tabletWidth = getTabletWidth(configuration, style);
|
|
@@ -252,9 +224,8 @@ const PlayerWrapperComponent = (props: Props) => {
|
|
|
252
224
|
</AnimatedVideoPlayerComponent>
|
|
253
225
|
</AnimationComponent>
|
|
254
226
|
</View>
|
|
255
|
-
|
|
256
227
|
<AnimatedScrollModal>
|
|
257
|
-
{
|
|
228
|
+
{isInlineModal && !docked ? (
|
|
258
229
|
<AnimationComponent
|
|
259
230
|
animationType={ComponentAnimationType.componentFade}
|
|
260
231
|
style={defaultStyles.flex}
|
|
@@ -264,9 +235,10 @@ const PlayerWrapperComponent = (props: Props) => {
|
|
|
264
235
|
style={defaultStyles.playerDetails}
|
|
265
236
|
entry={entry}
|
|
266
237
|
isTabletLandscape={isTabletLandscape}
|
|
267
|
-
isTablet={isTablet}
|
|
268
238
|
/>
|
|
269
239
|
</AnimationComponent>
|
|
240
|
+
) : (
|
|
241
|
+
<View style={defaultStyles.playerDetails} />
|
|
270
242
|
)}
|
|
271
243
|
</AnimatedScrollModal>
|
|
272
244
|
</ScreenContextProvider>
|
|
@@ -277,5 +249,3 @@ const PlayerWrapperComponent = (props: Props) => {
|
|
|
277
249
|
</PathnameContext.Provider>
|
|
278
250
|
);
|
|
279
251
|
};
|
|
280
|
-
|
|
281
|
-
export const PlayerWrapper = PlayerWrapperComponent;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import * as R from "ramda";
|
|
3
|
-
import { StyleSheet, View
|
|
3
|
+
import { StyleSheet, View } from "react-native";
|
|
4
4
|
|
|
5
5
|
import { HandlePlayable } from "@applicaster/zapp-react-native-ui-components/Components/HandlePlayable";
|
|
6
6
|
import {
|
|
@@ -129,38 +129,32 @@ const VideoModalComponent = () => {
|
|
|
129
129
|
const pathname = `${ROUTE_TYPES.VIDEO_MODAL}/${item?.id}`;
|
|
130
130
|
|
|
131
131
|
return (
|
|
132
|
-
|
|
133
|
-
{
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
<Spinner />
|
|
159
|
-
</View>
|
|
160
|
-
)}
|
|
161
|
-
</ScreenContextProvider>
|
|
162
|
-
</PathnameContext.Provider>
|
|
163
|
-
</>
|
|
132
|
+
<PathnameContext.Provider value={pathname}>
|
|
133
|
+
<ScreenContextProvider pathname={pathname}>
|
|
134
|
+
{itemIdHooksFinished === item?.id ? (
|
|
135
|
+
<AnimatedPlayerModalWrapper
|
|
136
|
+
style={[
|
|
137
|
+
styles.container,
|
|
138
|
+
{
|
|
139
|
+
backgroundColor,
|
|
140
|
+
},
|
|
141
|
+
]}
|
|
142
|
+
>
|
|
143
|
+
<HandlePlayable
|
|
144
|
+
item={item}
|
|
145
|
+
isModal={mode !== "PIP"}
|
|
146
|
+
modalHeight={modalSize.height}
|
|
147
|
+
modalWidth={modalSize.width}
|
|
148
|
+
mode={mode}
|
|
149
|
+
/>
|
|
150
|
+
</AnimatedPlayerModalWrapper>
|
|
151
|
+
) : (
|
|
152
|
+
<View style={styles.loaderContainer}>
|
|
153
|
+
<Spinner />
|
|
154
|
+
</View>
|
|
155
|
+
)}
|
|
156
|
+
</ScreenContextProvider>
|
|
157
|
+
</PathnameContext.Provider>
|
|
164
158
|
);
|
|
165
159
|
};
|
|
166
160
|
|
|
@@ -8,13 +8,6 @@ const props = {
|
|
|
8
8
|
configuration: { modal_background_color: "transparent" },
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
jest.mock("@applicaster/zapp-react-native-utils/reactHooks/layout", () => ({
|
|
12
|
-
useDimensions: jest.fn(() => ({
|
|
13
|
-
width: 20,
|
|
14
|
-
height: 30,
|
|
15
|
-
})),
|
|
16
|
-
}));
|
|
17
|
-
|
|
18
11
|
jest.mock("react-native-safe-area-context", () => ({
|
|
19
12
|
useSafeAreaInsets: jest.fn(() => ({
|
|
20
13
|
top: 20,
|
|
@@ -9,7 +9,6 @@ exports[`PlayerDetails renders properly 1`] = `
|
|
|
9
9
|
"flex": 1,
|
|
10
10
|
"marginTop": -8,
|
|
11
11
|
"paddingTop": -8,
|
|
12
|
-
"width": 750,
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
14
|
>
|
|
@@ -30,7 +29,6 @@ exports[`PlayerDetails renders properly on tablet in landscape orientation 1`] =
|
|
|
30
29
|
"flex": 1,
|
|
31
30
|
"marginTop": -20,
|
|
32
31
|
"paddingTop": 40,
|
|
33
|
-
"width": 750,
|
|
34
32
|
}
|
|
35
33
|
}
|
|
36
34
|
>
|
|
@@ -27,8 +27,8 @@ exports[`PlayerWrapper renders inline 1`] = `
|
|
|
27
27
|
"backgroundColor": "transparent",
|
|
28
28
|
},
|
|
29
29
|
Object {
|
|
30
|
-
"height":
|
|
31
|
-
"width":
|
|
30
|
+
"height": 800,
|
|
31
|
+
"width": 300,
|
|
32
32
|
},
|
|
33
33
|
Object {},
|
|
34
34
|
]
|
|
@@ -91,7 +91,6 @@ exports[`PlayerWrapper renders inline 1`] = `
|
|
|
91
91
|
"id": "test",
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
isTablet={false}
|
|
95
94
|
isTabletLandscape={false}
|
|
96
95
|
style={
|
|
97
96
|
Object {
|
|
@@ -133,8 +132,8 @@ exports[`PlayerWrapper renders inline and docked 1`] = `
|
|
|
133
132
|
"backgroundColor": "transparent",
|
|
134
133
|
},
|
|
135
134
|
Object {
|
|
136
|
-
"height":
|
|
137
|
-
"width":
|
|
135
|
+
"height": undefined,
|
|
136
|
+
"width": 300,
|
|
138
137
|
},
|
|
139
138
|
Object {},
|
|
140
139
|
]
|
|
@@ -178,35 +177,13 @@ exports[`PlayerWrapper renders inline and docked 1`] = `
|
|
|
178
177
|
testID="test-player-container"
|
|
179
178
|
/>
|
|
180
179
|
<View
|
|
181
|
-
animationType="componentFade"
|
|
182
180
|
style={
|
|
183
181
|
Object {
|
|
184
182
|
"flex": 1,
|
|
183
|
+
"paddingTop": 20,
|
|
185
184
|
}
|
|
186
185
|
}
|
|
187
|
-
|
|
188
|
-
<View
|
|
189
|
-
configuration={
|
|
190
|
-
Object {
|
|
191
|
-
"tablet_landscape_player_container_background_color": "red",
|
|
192
|
-
"tablet_landscape_sidebar_width": "35%",
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
entry={
|
|
196
|
-
Object {
|
|
197
|
-
"id": "test",
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
isTablet={false}
|
|
201
|
-
isTabletLandscape={false}
|
|
202
|
-
style={
|
|
203
|
-
Object {
|
|
204
|
-
"flex": 1,
|
|
205
|
-
"paddingTop": 20,
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
/>
|
|
209
|
-
</View>
|
|
186
|
+
/>
|
|
210
187
|
</View>
|
|
211
188
|
</RNCSafeAreaView>
|
|
212
189
|
</RNCSafeAreaProvider>
|
|
@@ -319,7 +296,6 @@ exports[`PlayerWrapper renders inline on tablet in landscape orientation 1`] = `
|
|
|
319
296
|
"id": "test",
|
|
320
297
|
}
|
|
321
298
|
}
|
|
322
|
-
isTablet={true}
|
|
323
299
|
isTabletLandscape={true}
|
|
324
300
|
style={
|
|
325
301
|
Object {
|
|
@@ -361,8 +337,8 @@ exports[`PlayerWrapper renders properly 1`] = `
|
|
|
361
337
|
"backgroundColor": "transparent",
|
|
362
338
|
},
|
|
363
339
|
Object {
|
|
364
|
-
"height":
|
|
365
|
-
"width":
|
|
340
|
+
"height": 800,
|
|
341
|
+
"width": 300,
|
|
366
342
|
},
|
|
367
343
|
Object {},
|
|
368
344
|
]
|
|
@@ -406,35 +382,13 @@ exports[`PlayerWrapper renders properly 1`] = `
|
|
|
406
382
|
testID="test-player-container"
|
|
407
383
|
/>
|
|
408
384
|
<View
|
|
409
|
-
animationType="componentFade"
|
|
410
385
|
style={
|
|
411
386
|
Object {
|
|
412
387
|
"flex": 1,
|
|
388
|
+
"paddingTop": 20,
|
|
413
389
|
}
|
|
414
390
|
}
|
|
415
|
-
|
|
416
|
-
<View
|
|
417
|
-
configuration={
|
|
418
|
-
Object {
|
|
419
|
-
"tablet_landscape_player_container_background_color": "red",
|
|
420
|
-
"tablet_landscape_sidebar_width": "35%",
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
entry={
|
|
424
|
-
Object {
|
|
425
|
-
"id": "test",
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
isTablet={false}
|
|
429
|
-
isTabletLandscape={false}
|
|
430
|
-
style={
|
|
431
|
-
Object {
|
|
432
|
-
"flex": 1,
|
|
433
|
-
"paddingTop": 20,
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
/>
|
|
437
|
-
</View>
|
|
391
|
+
/>
|
|
438
392
|
</View>
|
|
439
393
|
</RNCSafeAreaView>
|
|
440
394
|
</RNCSafeAreaProvider>
|
|
@@ -2,7 +2,7 @@ import { createStore } from "zustand/vanilla";
|
|
|
2
2
|
import { useStore } from "zustand";
|
|
3
3
|
import { noop } from "@applicaster/zapp-react-native-utils/functionUtils";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
interface ConfirmationDialogState {
|
|
6
6
|
isDialogVisible: boolean;
|
|
7
7
|
messages: string;
|
|
8
8
|
confirmAction: () => void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-native-ui-components",
|
|
3
|
-
"version": "12.0.0-alpha.
|
|
3
|
+
"version": "12.0.0-alpha.5933014273",
|
|
4
4
|
"description": "Applicaster Zapp React Native ui components for the Quick Brick App",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
"redux-mock-store": "^1.5.3"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@applicaster/applicaster-types": "12.0.0-alpha.
|
|
38
|
-
"@applicaster/zapp-react-native-bridge": "12.0.0-alpha.
|
|
39
|
-
"@applicaster/zapp-react-native-redux": "12.0.0-alpha.
|
|
40
|
-
"@applicaster/zapp-react-native-utils": "12.0.0-alpha.
|
|
37
|
+
"@applicaster/applicaster-types": "12.0.0-alpha.5933014273",
|
|
38
|
+
"@applicaster/zapp-react-native-bridge": "12.0.0-alpha.5933014273",
|
|
39
|
+
"@applicaster/zapp-react-native-redux": "12.0.0-alpha.5933014273",
|
|
40
|
+
"@applicaster/zapp-react-native-utils": "12.0.0-alpha.5933014273",
|
|
41
41
|
"promise": "^8.3.0",
|
|
42
42
|
"react-router-native": "^5.1.2",
|
|
43
43
|
"url": "^0.11.0",
|