@applicaster/zapp-react-native-ui-components 15.0.0-alpha.7591121530 → 15.0.0-alpha.7607942912
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/BaseFocusable/index.ios.ts +12 -2
- package/Components/Cell/Cell.tsx +8 -3
- package/Components/Cell/FocusableWrapper.tsx +3 -0
- package/Components/Cell/TvOSCellComponent.tsx +26 -5
- package/Components/Focusable/FocusableTvOS.tsx +12 -2
- package/Components/Focusable/__tests__/__snapshots__/FocusableTvOS.test.tsx.snap +1 -0
- package/Components/FocusableGroup/FocusableTvOS.tsx +11 -0
- package/Components/HandlePlayable/HandlePlayable.tsx +10 -7
- package/Components/Layout/TV/LayoutBackground.tsx +5 -2
- package/Components/Layout/TV/ScreenContainer.tsx +2 -6
- package/Components/Layout/TV/index.tsx +3 -4
- package/Components/Layout/TV/index.web.tsx +3 -4
- package/Components/LinkHandler/LinkHandler.tsx +2 -2
- package/Components/MasterCell/DefaultComponents/BorderContainerView/__tests__/index.test.tsx +16 -1
- package/Components/MasterCell/DefaultComponents/BorderContainerView/index.tsx +30 -2
- package/Components/MasterCell/DefaultComponents/Image/Image.android.tsx +5 -1
- package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +11 -3
- package/Components/MasterCell/DefaultComponents/Image/Image.web.tsx +9 -1
- package/Components/MasterCell/DefaultComponents/Image/hooks/useImage.ts +15 -14
- package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +10 -6
- package/Components/MasterCell/DefaultComponents/Text/index.tsx +8 -8
- package/Components/MasterCell/index.tsx +2 -0
- package/Components/MasterCell/utils/__tests__/resolveColor.test.js +82 -3
- package/Components/MasterCell/utils/index.ts +61 -31
- package/Components/MeasurmentsPortal/MeasurementsPortal.tsx +102 -87
- package/Components/MeasurmentsPortal/__tests__/MeasurementsPortal.test.tsx +355 -0
- package/Components/OfflineHandler/NotificationView/NotificationView.tsx +2 -2
- package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +17 -18
- package/Components/OfflineHandler/__tests__/index.test.tsx +27 -18
- package/Components/PlayerContainer/PlayerContainer.tsx +4 -3
- package/Components/Screen/TV/index.web.tsx +4 -2
- package/Components/Screen/__tests__/Screen.test.tsx +65 -42
- package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +68 -44
- package/Components/Screen/hooks.ts +2 -3
- package/Components/Screen/index.tsx +2 -3
- package/Components/Screen/navigationHandler.ts +49 -24
- package/Components/Screen/orientationHandler.ts +3 -3
- package/Components/ScreenResolver/index.tsx +13 -7
- package/Components/ScreenRevealManager/ScreenRevealManager.ts +40 -8
- package/Components/ScreenRevealManager/__tests__/ScreenRevealManager.test.ts +86 -69
- package/Components/Tabs/TV/Tabs.tsx +20 -3
- package/Components/Transitioner/Scene.tsx +15 -2
- package/Components/Transitioner/index.js +3 -3
- package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +124 -27
- package/Components/VideoModal/VideoModal.tsx +1 -5
- package/Components/VideoModal/utils.ts +19 -9
- package/Decorators/Analytics/index.tsx +6 -5
- package/Decorators/ZappPipesDataConnector/index.tsx +2 -2
- package/Decorators/ZappPipesDataConnector/resolvers/StaticFeedResolver.tsx +1 -1
- package/Helpers/DataSourceHelper/__tests__/itemLimitForData.test.ts +80 -0
- package/Helpers/DataSourceHelper/index.ts +19 -0
- package/index.d.ts +7 -0
- package/package.json +6 -5
- package/Helpers/DataSourceHelper/index.js +0 -19
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { View } from "react-native";
|
|
3
|
-
import {
|
|
3
|
+
import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
|
|
4
4
|
|
|
5
5
|
const Mocked_RouteManager = jest.fn((props) => (
|
|
6
6
|
<View testID="routeManager" {...props} />
|
|
7
7
|
));
|
|
8
8
|
|
|
9
|
-
const mock_navBarVisibleFlag = true;
|
|
10
|
-
|
|
11
|
-
const mockIsNavBarVisible = jest.fn(() => mock_navBarVisibleFlag);
|
|
12
|
-
|
|
13
9
|
const mockIsOrientationCompatible = jest.fn(() => true);
|
|
14
10
|
|
|
15
11
|
jest.mock("react-native-safe-area-context", () => ({
|
|
12
|
+
...jest.requireActual("react-native-safe-area-context"),
|
|
16
13
|
useSafeAreaInsets: () => ({ top: 44 }),
|
|
17
14
|
}));
|
|
18
15
|
|
|
@@ -35,12 +32,14 @@ jest.mock(
|
|
|
35
32
|
);
|
|
36
33
|
|
|
37
34
|
jest.mock("@applicaster/zapp-react-native-utils/analyticsUtils", () => ({
|
|
35
|
+
...jest.requireActual("@applicaster/zapp-react-native-utils/analyticsUtils"),
|
|
38
36
|
useAnalytics: jest.fn(() => ({
|
|
39
37
|
sendScreenEvent: jest.fn(),
|
|
40
38
|
})),
|
|
41
39
|
}));
|
|
42
40
|
|
|
43
41
|
jest.mock("@applicaster/zapp-react-native-utils/theme", () => ({
|
|
42
|
+
...jest.requireActual("@applicaster/zapp-react-native-utils/theme"),
|
|
44
43
|
useTheme: jest.fn(() => ({
|
|
45
44
|
app_background_color: "blue",
|
|
46
45
|
})),
|
|
@@ -77,21 +76,44 @@ jest.mock(
|
|
|
77
76
|
})
|
|
78
77
|
);
|
|
79
78
|
|
|
80
|
-
jest.mock(
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
})
|
|
94
|
-
|
|
79
|
+
jest.mock(
|
|
80
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation",
|
|
81
|
+
() => ({
|
|
82
|
+
...jest.requireActual(
|
|
83
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation"
|
|
84
|
+
),
|
|
85
|
+
useNavigation: jest.fn(() => ({
|
|
86
|
+
canGoBack: () => false,
|
|
87
|
+
currentRoute: "/river/testId",
|
|
88
|
+
activeRiver: { id: "testId" },
|
|
89
|
+
screenData: { id: "testId" },
|
|
90
|
+
data: { screen: { id: "testId" } },
|
|
91
|
+
})),
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
jest.mock(
|
|
96
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useIsScreenActive",
|
|
97
|
+
() => ({
|
|
98
|
+
...jest.requireActual(
|
|
99
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useIsScreenActive"
|
|
100
|
+
),
|
|
101
|
+
useIsScreenActive: jest.fn().mockReturnValue(true),
|
|
102
|
+
})
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
jest.mock(
|
|
106
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute",
|
|
107
|
+
() => ({
|
|
108
|
+
...jest.requireActual(
|
|
109
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute"
|
|
110
|
+
),
|
|
111
|
+
useRoute: jest.fn(() => ({
|
|
112
|
+
pathname: "/river/testId",
|
|
113
|
+
screenData: { id: "testId" },
|
|
114
|
+
})),
|
|
115
|
+
})
|
|
116
|
+
);
|
|
95
117
|
|
|
96
118
|
jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
|
|
97
119
|
...jest.requireActual("@applicaster/zapp-react-native-utils/reactHooks"),
|
|
@@ -112,26 +134,6 @@ jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
|
|
|
112
134
|
useIsTablet: jest.fn(() => false),
|
|
113
135
|
}));
|
|
114
136
|
|
|
115
|
-
jest.mock("@applicaster/zapp-react-native-redux/hooks", () => {
|
|
116
|
-
const View = jest.requireActual("react-native").View;
|
|
117
|
-
|
|
118
|
-
return {
|
|
119
|
-
...jest.requireActual("@applicaster/zapp-react-native-redux/hooks"),
|
|
120
|
-
usePickFromState: () => ({
|
|
121
|
-
plugins: [
|
|
122
|
-
{
|
|
123
|
-
name: "Offline Plugin",
|
|
124
|
-
identifier: "offline-experience",
|
|
125
|
-
type: "general",
|
|
126
|
-
module: {
|
|
127
|
-
OfflineFallbackScreen: ({ children }) => <View>{children}</View>, // eslint-disable-line
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
],
|
|
131
|
-
}),
|
|
132
|
-
};
|
|
133
|
-
});
|
|
134
|
-
|
|
135
137
|
const {
|
|
136
138
|
allowedOrientationsForScreen,
|
|
137
139
|
getOrientation,
|
|
@@ -151,6 +153,19 @@ const screenProps = {
|
|
|
151
153
|
|
|
152
154
|
const { Screen } = require("..");
|
|
153
155
|
|
|
156
|
+
const store = {
|
|
157
|
+
plugins: [
|
|
158
|
+
{
|
|
159
|
+
name: "Offline Plugin",
|
|
160
|
+
identifier: "offline-experience",
|
|
161
|
+
type: "general",
|
|
162
|
+
module: {
|
|
163
|
+
OfflineFallbackScreen: ({ children }) => <View>{children}</View>, // eslint-disable-line
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
};
|
|
168
|
+
|
|
154
169
|
describe("<Screen Component />", () => {
|
|
155
170
|
beforeEach(() => {
|
|
156
171
|
allowedOrientationsForScreen.mockClear();
|
|
@@ -160,14 +175,22 @@ describe("<Screen Component />", () => {
|
|
|
160
175
|
|
|
161
176
|
describe("when the navbar should show", () => {
|
|
162
177
|
it("renders correctly", () => {
|
|
163
|
-
const { toJSON } =
|
|
178
|
+
const { toJSON } = renderWithProviders(
|
|
179
|
+
<Screen {...screenProps} />,
|
|
180
|
+
store
|
|
181
|
+
);
|
|
182
|
+
|
|
164
183
|
expect(toJSON()).toMatchSnapshot();
|
|
165
184
|
});
|
|
166
185
|
});
|
|
167
186
|
|
|
168
187
|
describe("when the navbar should be hidden", () => {
|
|
169
188
|
it("renders correctly", () => {
|
|
170
|
-
const { toJSON } =
|
|
189
|
+
const { toJSON } = renderWithProviders(
|
|
190
|
+
<Screen {...screenProps} />,
|
|
191
|
+
store
|
|
192
|
+
);
|
|
193
|
+
|
|
171
194
|
expect(toJSON()).toMatchSnapshot();
|
|
172
195
|
});
|
|
173
196
|
});
|
|
@@ -1,67 +1,91 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`<Screen Component /> when the navbar should be hidden renders correctly 1`] = `
|
|
4
|
-
<
|
|
5
|
-
|
|
4
|
+
<RNCSafeAreaProvider
|
|
5
|
+
onInsetsChange={[Function]}
|
|
6
6
|
style={
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
[
|
|
8
|
+
{
|
|
9
|
+
"flex": 1,
|
|
10
|
+
},
|
|
11
|
+
undefined,
|
|
12
|
+
]
|
|
12
13
|
}
|
|
13
14
|
>
|
|
14
15
|
<View
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
importantForAccessibility="yes"
|
|
17
|
+
style={
|
|
18
|
+
{
|
|
19
|
+
"backgroundColor": "blue",
|
|
20
|
+
"flex": 1,
|
|
21
|
+
"paddingTop": 0,
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
>
|
|
23
25
|
<View
|
|
26
|
+
hasMenu={false}
|
|
27
|
+
id="/river/testId"
|
|
24
28
|
pathname="/river/testId"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
testID="routeManager"
|
|
29
|
+
selected="testId"
|
|
30
|
+
testID="navBar"
|
|
31
|
+
title="Test Title"
|
|
31
32
|
/>
|
|
33
|
+
<View>
|
|
34
|
+
<View
|
|
35
|
+
pathname="/river/testId"
|
|
36
|
+
screenData={
|
|
37
|
+
{
|
|
38
|
+
"id": "testId",
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
testID="routeManager"
|
|
42
|
+
/>
|
|
43
|
+
</View>
|
|
32
44
|
</View>
|
|
33
|
-
</
|
|
45
|
+
</RNCSafeAreaProvider>
|
|
34
46
|
`;
|
|
35
47
|
|
|
36
48
|
exports[`<Screen Component /> when the navbar should show renders correctly 1`] = `
|
|
37
|
-
<
|
|
38
|
-
|
|
49
|
+
<RNCSafeAreaProvider
|
|
50
|
+
onInsetsChange={[Function]}
|
|
39
51
|
style={
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
52
|
+
[
|
|
53
|
+
{
|
|
54
|
+
"flex": 1,
|
|
55
|
+
},
|
|
56
|
+
undefined,
|
|
57
|
+
]
|
|
45
58
|
}
|
|
46
59
|
>
|
|
47
60
|
<View
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
importantForAccessibility="yes"
|
|
62
|
+
style={
|
|
63
|
+
{
|
|
64
|
+
"backgroundColor": "blue",
|
|
65
|
+
"flex": 1,
|
|
66
|
+
"paddingTop": 0,
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
>
|
|
56
70
|
<View
|
|
71
|
+
hasMenu={false}
|
|
72
|
+
id="/river/testId"
|
|
57
73
|
pathname="/river/testId"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
testID="routeManager"
|
|
74
|
+
selected="testId"
|
|
75
|
+
testID="navBar"
|
|
76
|
+
title="Test Title"
|
|
64
77
|
/>
|
|
78
|
+
<View>
|
|
79
|
+
<View
|
|
80
|
+
pathname="/river/testId"
|
|
81
|
+
screenData={
|
|
82
|
+
{
|
|
83
|
+
"id": "testId",
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
testID="routeManager"
|
|
87
|
+
/>
|
|
88
|
+
</View>
|
|
65
89
|
</View>
|
|
66
|
-
</
|
|
90
|
+
</RNCSafeAreaProvider>
|
|
67
91
|
`;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useAppData } from "@applicaster/zapp-react-native-redux/hooks";
|
|
2
2
|
import {
|
|
3
3
|
useGetScreenOrientation,
|
|
4
4
|
isOrientationCompatible,
|
|
@@ -25,8 +25,7 @@ export const useWaitForValidOrientation = () => {
|
|
|
25
25
|
|
|
26
26
|
const isTablet = useIsTablet();
|
|
27
27
|
|
|
28
|
-
const {
|
|
29
|
-
const isTabletPortrait = appData?.isTabletPortrait;
|
|
28
|
+
const { isTabletPortrait } = useAppData();
|
|
30
29
|
|
|
31
30
|
const layoutData = useMemo(
|
|
32
31
|
() => ({ isTablet, isTabletPortrait, width: screenWidth, height }),
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/// <reference types="@applicaster/applicaster-types" />
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { AccessibilityInfo, findNodeHandle, View } from "react-native";
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { usePlugins } from "@applicaster/zapp-react-native-redux/hooks";
|
|
6
5
|
import { useTheme } from "@applicaster/zapp-react-native-utils/theme";
|
|
7
6
|
import { getComponentModule } from "@applicaster/zapp-react-native-utils/pluginUtils";
|
|
8
7
|
import {
|
|
@@ -41,7 +40,7 @@ type Props = {
|
|
|
41
40
|
export function Screen(_props: Props) {
|
|
42
41
|
const theme = useTheme<BaseThemePropertiesMobile>();
|
|
43
42
|
const navigation = useNavigation();
|
|
44
|
-
const
|
|
43
|
+
const plugins = usePlugins();
|
|
45
44
|
|
|
46
45
|
// Gets the data for the current screen configuration
|
|
47
46
|
const currentScreenData = useCurrentScreenData();
|
|
@@ -1,35 +1,19 @@
|
|
|
1
1
|
import { resolveNavigationPlugin } from "@applicaster/zapp-react-native-utils/navigationUtils";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
* - playable screens
|
|
11
|
-
* - qb_search_screen
|
|
12
|
-
* - screen hooks that specify showNavBar or presentFullScreen
|
|
13
|
-
* - screens or nested screens that have allow_screen_plugin_presentation set to true
|
|
14
|
-
*
|
|
15
|
-
* @param {String} route current route of the screen
|
|
16
|
-
* @param {Object} screenData payload associated with the currently presented screen
|
|
17
|
-
* @returns {Boolean}
|
|
18
|
-
*/
|
|
19
|
-
export function isMenuVisible(route, screenData, plugins) {
|
|
20
|
-
const plugin = resolveNavigationPlugin({
|
|
3
|
+
export const BOTTOM_TABS_PLUGIN_ID = "quick-brick-bottom-tabs";
|
|
4
|
+
|
|
5
|
+
export const SIDE_MENU_PLUGIN_ID = "quick_brick_side_menu";
|
|
6
|
+
|
|
7
|
+
export function getMenuPlugin(screenData, plugins) {
|
|
8
|
+
return resolveNavigationPlugin({
|
|
21
9
|
category: "menu",
|
|
22
10
|
navigations:
|
|
23
11
|
screenData?.navigations || screenData?.targetScreen?.navigations,
|
|
24
12
|
plugins,
|
|
25
13
|
});
|
|
14
|
+
}
|
|
26
15
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (!isBottomTabsPlugin) {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
|
|
16
|
+
function shouldShowNavigation(route, screenData) {
|
|
33
17
|
if (route.includes("playable")) {
|
|
34
18
|
return false;
|
|
35
19
|
}
|
|
@@ -56,3 +40,44 @@ export function isMenuVisible(route, screenData, plugins) {
|
|
|
56
40
|
|
|
57
41
|
return true;
|
|
58
42
|
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* This function helps to decide whether the menu should be presented on the screen
|
|
46
|
+
* based on route and / or screen Data
|
|
47
|
+
*
|
|
48
|
+
* is similar to the navbar, except that it covers scenarios where only the navbar (and not)
|
|
49
|
+
* the menu will be hidden
|
|
50
|
+
*
|
|
51
|
+
* - playable screens
|
|
52
|
+
* - qb_search_screen
|
|
53
|
+
* - screen hooks that specify showNavBar or presentFullScreen
|
|
54
|
+
* - screens or nested screens that have allow_screen_plugin_presentation set to true
|
|
55
|
+
*
|
|
56
|
+
* @param {String} route current route of the screen
|
|
57
|
+
* @param {Object} screenData payload associated with the currently presented screen
|
|
58
|
+
* @returns {Boolean}
|
|
59
|
+
*/
|
|
60
|
+
export function isMenuVisible(route, screenData, plugins) {
|
|
61
|
+
const plugin = getMenuPlugin(screenData, plugins);
|
|
62
|
+
|
|
63
|
+
const isBottomTabsPlugin = plugin?.identifier === BOTTOM_TABS_PLUGIN_ID;
|
|
64
|
+
const isSideMenuPlugin = plugin?.identifier === SIDE_MENU_PLUGIN_ID;
|
|
65
|
+
|
|
66
|
+
if (!isBottomTabsPlugin && !isSideMenuPlugin) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return shouldShowNavigation(route, screenData);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function isBottomTabVisible(route, screenData, plugins) {
|
|
74
|
+
const plugin = getMenuPlugin(screenData, plugins);
|
|
75
|
+
|
|
76
|
+
const isBottomTabsPlugin = plugin?.identifier === BOTTOM_TABS_PLUGIN_ID;
|
|
77
|
+
|
|
78
|
+
if (!isBottomTabsPlugin) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return shouldShowNavigation(route, screenData);
|
|
83
|
+
}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
useGetScreenOrientation,
|
|
8
8
|
} from "@applicaster/zapp-react-native-utils/appUtils/orientationHelper";
|
|
9
9
|
import { usePrevious } from "@applicaster/zapp-react-native-utils/reactHooks/utils";
|
|
10
|
-
import {
|
|
10
|
+
import { usePlugins, useAppData } from "@applicaster/zapp-react-native-redux";
|
|
11
11
|
import { findPluginByType } from "@applicaster/zapp-react-native-utils/pluginUtils";
|
|
12
12
|
import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
13
13
|
|
|
@@ -65,8 +65,8 @@ export function useNewOrientationForScreenData({
|
|
|
65
65
|
}: OrientationHookArgs) {
|
|
66
66
|
const isTablet = useIsTablet();
|
|
67
67
|
|
|
68
|
-
const
|
|
69
|
-
const isTabletPortrait =
|
|
68
|
+
const plugins = usePlugins();
|
|
69
|
+
const { isTabletPortrait } = useAppData();
|
|
70
70
|
const isLandscapeTablet = isTablet && !isTabletPortrait;
|
|
71
71
|
|
|
72
72
|
const screenOrientation = useGetScreenOrientation(screenData);
|
|
@@ -11,12 +11,19 @@ import { LinkHandler } from "../LinkHandler";
|
|
|
11
11
|
import { Favorites } from "../Favorites";
|
|
12
12
|
import { ZappPipesScreenContext } from "../../Contexts";
|
|
13
13
|
import { componentsLogger } from "../../Helpers/logger";
|
|
14
|
-
import {
|
|
15
|
-
|
|
14
|
+
import {
|
|
15
|
+
useAppSelector,
|
|
16
|
+
usePlugins,
|
|
17
|
+
} from "@applicaster/zapp-react-native-redux/hooks";
|
|
18
|
+
import {
|
|
19
|
+
useNavigation,
|
|
20
|
+
useRivers,
|
|
21
|
+
} from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
16
22
|
import { useScreenAnalytics } from "@applicaster/zapp-react-native-utils/analyticsUtils/helpers/hooks";
|
|
17
23
|
|
|
18
24
|
import { useCallbackActions } from "@applicaster/zapp-react-native-utils/zappFrameworkUtils/HookCallback/useCallbackActions";
|
|
19
25
|
import { ScreenResultCallback } from "@applicaster/zapp-react-native-utils/zappFrameworkUtils/HookCallback/callbackNavigationAction";
|
|
26
|
+
import { selectComponents } from "@applicaster/zapp-react-native-redux";
|
|
20
27
|
|
|
21
28
|
const logger = componentsLogger.addSubsystem("ScreenResolver");
|
|
22
29
|
|
|
@@ -49,11 +56,10 @@ export function ScreenResolverComponent(props: Props) {
|
|
|
49
56
|
|
|
50
57
|
const { hookPlugin } = screenData || {};
|
|
51
58
|
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
]);
|
|
59
|
+
const plugins = usePlugins();
|
|
60
|
+
const rivers = useRivers();
|
|
61
|
+
|
|
62
|
+
const components = useAppSelector(selectComponents);
|
|
57
63
|
|
|
58
64
|
const {
|
|
59
65
|
videoModalState: { mode },
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { makeListOf } from "@applicaster/zapp-react-native-utils/arrayUtils";
|
|
2
2
|
import { isFirstComponentGallery } from "@applicaster/zapp-react-native-utils/componentsUtils";
|
|
3
|
-
import {
|
|
3
|
+
import { race, Subject, Subscription } from "rxjs";
|
|
4
|
+
import { first } from "rxjs/operators";
|
|
5
|
+
|
|
6
|
+
import { withTimeout$ } from "@applicaster/zapp-react-native-utils/idleUtils";
|
|
7
|
+
|
|
8
|
+
const MAX_TIMEOUT_TO_WAIT_COMPONENTS_TO_LOAD = 2000; // 2 seconds
|
|
4
9
|
|
|
5
10
|
const INITIAL_NUMBER_TO_LOAD = 3;
|
|
6
11
|
|
|
@@ -34,7 +39,8 @@ const getNumberOfComponentsWaitToLoadBeforePresent = (
|
|
|
34
39
|
export class ScreenRevealManager {
|
|
35
40
|
public numberOfComponentsWaitToLoadBeforePresent: number;
|
|
36
41
|
private renderingState: Array<ComponentLoadingState>;
|
|
37
|
-
private
|
|
42
|
+
private subject$ = new Subject<void>();
|
|
43
|
+
private subscription: Subscription;
|
|
38
44
|
|
|
39
45
|
constructor(componentsToRender: ZappUIComponent[], callback: Callback) {
|
|
40
46
|
this.numberOfComponentsWaitToLoadBeforePresent =
|
|
@@ -45,32 +51,58 @@ export class ScreenRevealManager {
|
|
|
45
51
|
this.numberOfComponentsWaitToLoadBeforePresent
|
|
46
52
|
);
|
|
47
53
|
|
|
48
|
-
this.
|
|
54
|
+
this.subscription = race(
|
|
55
|
+
withTimeout$(MAX_TIMEOUT_TO_WAIT_COMPONENTS_TO_LOAD),
|
|
56
|
+
this.subject$
|
|
57
|
+
)
|
|
58
|
+
.pipe(first())
|
|
59
|
+
.subscribe(callback);
|
|
49
60
|
}
|
|
50
61
|
|
|
51
62
|
onLoadFinished = (index: number): void => {
|
|
63
|
+
const currentState = this.renderingState[index];
|
|
64
|
+
|
|
65
|
+
if (
|
|
66
|
+
COMPONENT_LOADING_STATE.LOADED_WITH_SUCCESS === currentState ||
|
|
67
|
+
COMPONENT_LOADING_STATE.LOADED_WITH_FAILURE === currentState
|
|
68
|
+
) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
52
72
|
this.renderingState[index] = COMPONENT_LOADING_STATE.LOADED_WITH_SUCCESS;
|
|
53
73
|
|
|
54
74
|
if (
|
|
55
75
|
getNumberOfLoaded(this.renderingState) >=
|
|
56
76
|
this.numberOfComponentsWaitToLoadBeforePresent
|
|
57
77
|
) {
|
|
58
|
-
this.
|
|
78
|
+
this.subject$.next();
|
|
79
|
+
this.subject$.complete();
|
|
59
80
|
}
|
|
60
81
|
};
|
|
61
82
|
|
|
62
83
|
onLoadFailed = (index: number): void => {
|
|
84
|
+
const currentState = this.renderingState[index];
|
|
85
|
+
|
|
86
|
+
if (
|
|
87
|
+
COMPONENT_LOADING_STATE.LOADED_WITH_SUCCESS === currentState ||
|
|
88
|
+
COMPONENT_LOADING_STATE.LOADED_WITH_FAILURE === currentState
|
|
89
|
+
) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
63
93
|
this.renderingState[index] = COMPONENT_LOADING_STATE.LOADED_WITH_FAILURE;
|
|
64
94
|
|
|
65
95
|
if (
|
|
66
96
|
getNumberOfLoaded(this.renderingState) >=
|
|
67
97
|
this.numberOfComponentsWaitToLoadBeforePresent
|
|
68
98
|
) {
|
|
69
|
-
this.
|
|
99
|
+
this.subject$.next();
|
|
100
|
+
this.subject$.complete();
|
|
70
101
|
}
|
|
71
102
|
};
|
|
72
103
|
|
|
73
|
-
|
|
74
|
-
this.
|
|
75
|
-
|
|
104
|
+
dispose(): void {
|
|
105
|
+
this.subscription?.unsubscribe();
|
|
106
|
+
this.subject$.complete();
|
|
107
|
+
}
|
|
76
108
|
}
|