@applicaster/zapp-react-dom-app 15.0.0-rc.99 → 16.0.0-rc.1

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.
@@ -1,8 +1,21 @@
1
1
  import React from "react";
2
2
  import { render } from "@testing-library/react-native";
3
+
3
4
  import { withBackToTopActionHOC } from "../withBackToTopAction";
5
+ import { focusManager } from "@applicaster/zapp-react-native-utils/appUtils";
6
+ import { useSubscriberFor } from "@applicaster/zapp-react-native-utils/reactHooks/useSubscriberFor";
7
+ import {
8
+ useCurrentScreenIsHome,
9
+ useCurrentScreenIsRoot,
10
+ useCurrentScreenIsTabs,
11
+ useIsStandaloneFullscreen,
12
+ } from "../hooks";
13
+
14
+ import {
15
+ useCurrentScreenIsHook,
16
+ useCurrentScreenIsStartupHook,
17
+ } from "@applicaster/zapp-react-native-utils/reactHooks/screen";
4
18
 
5
- // Mock focusManager and hook
6
19
  jest.mock("@applicaster/zapp-react-native-utils/appUtils", () => ({
7
20
  focusManager: {
8
21
  isFocusOnMenu: jest.fn(),
@@ -11,26 +24,17 @@ jest.mock("@applicaster/zapp-react-native-utils/appUtils", () => ({
11
24
  },
12
25
  }));
13
26
 
14
- jest.mock("../hooks", () => ({
15
- useCurrentScreenIsHome: jest.fn(),
16
- useCurrentScreenIsRoot: jest.fn(),
17
- useCurrentScreenIsTabs: jest.fn(),
18
- }));
19
-
20
- import { focusManager } from "@applicaster/zapp-react-native-utils/appUtils";
21
- import {
22
- useCurrentScreenIsHome,
23
- useCurrentScreenIsRoot,
24
- useCurrentScreenIsTabs,
25
- } from "../hooks";
27
+ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/useSubscriberFor");
28
+ jest.mock("../hooks");
29
+ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/screen");
26
30
 
27
- jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
28
- useNavigation: jest.fn(),
29
- }));
31
+ const mockUseSubscriberFor = useSubscriberFor as jest.Mock;
30
32
 
31
- import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks";
33
+ const setupFocusManager = (overrides: Partial<typeof focusManager>) => {
34
+ Object.assign(focusManager, overrides);
35
+ };
32
36
 
33
- describe("withBackToTopActionHOC", () => {
37
+ describe("withBackToTopActionHOC - backToTopAction", () => {
34
38
  let receivedProps: any;
35
39
 
36
40
  const BaseComponent = (props) => {
@@ -43,141 +47,119 @@ describe("withBackToTopActionHOC", () => {
43
47
 
44
48
  beforeEach(() => {
45
49
  jest.clearAllMocks();
50
+
51
+ mockUseSubscriberFor.mockImplementation(() => jest.fn());
52
+
53
+ (useCurrentScreenIsHome as jest.Mock).mockReturnValue(false);
54
+ (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(false);
55
+ (useCurrentScreenIsTabs as jest.Mock).mockReturnValue(false);
56
+ (useIsStandaloneFullscreen as jest.Mock).mockReturnValue(false);
57
+ (useCurrentScreenIsHook as jest.Mock).mockReturnValue(false);
58
+ (useCurrentScreenIsStartupHook as jest.Mock).mockReturnValue(false);
59
+
60
+ setupFocusManager({
61
+ isFocusOnMenu: () => false,
62
+ isFocusOnContent: () => false,
63
+ isTabsScreenContentFocused: () => false,
64
+ });
46
65
  });
47
66
 
48
- it("returns PLATFORM_BACK when on root screen, and startup hooks", () => {
67
+ it("returns PLATFORM_BACK for startup hook", () => {
49
68
  expect.assertions(1);
50
69
 
51
- (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(true);
52
-
53
- (useNavigation as jest.Mock).mockReturnValue({
54
- startUpHooks: ["some_startup_hook"],
55
- });
70
+ (useCurrentScreenIsStartupHook as jest.Mock).mockReturnValue(true);
56
71
 
57
72
  render(<Wrapped />);
58
73
 
59
74
  expect(receivedProps.backToTopAction()).toBe("PLATFORM_BACK");
60
75
  });
61
76
 
62
- it("returns PLATFORM_BACK when on root screen, focus on menu, and is home", () => {
77
+ it("returns GO_BACK_FROM_HOOK when isHook", () => {
63
78
  expect.assertions(1);
64
79
 
65
- (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(true);
66
- (useCurrentScreenIsHome as jest.Mock).mockReturnValue(true);
67
- (useCurrentScreenIsTabs as jest.Mock).mockReturnValue(false);
80
+ (useCurrentScreenIsHook as jest.Mock).mockReturnValue(true);
68
81
 
69
- (useNavigation as jest.Mock).mockReturnValue({
70
- startUpHooks: [],
71
- });
82
+ render(<Wrapped />);
83
+
84
+ expect(receivedProps.backToTopAction()).toBe("GO_BACK_FROM_HOOK");
85
+ });
86
+
87
+ it("returns GO_HOME for standalone full screen", () => {
88
+ expect.assertions(1);
72
89
 
73
- (focusManager.isFocusOnMenu as jest.Mock).mockReturnValue(true);
74
- (focusManager.isFocusOnContent as jest.Mock).mockReturnValue(false);
90
+ (useIsStandaloneFullscreen as jest.Mock).mockReturnValue(true);
75
91
 
76
92
  render(<Wrapped />);
77
93
 
78
- expect(receivedProps.backToTopAction()).toBe("PLATFORM_BACK");
94
+ expect(receivedProps.backToTopAction()).toBe("GO_HOME");
79
95
  });
80
96
 
81
- it("returns GO_HOME when on root screen, focus on menu, and not home", () => {
97
+ it("returns PLATFORM_BACK when root + menu focus + home", () => {
82
98
  expect.assertions(1);
83
99
 
84
100
  (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(true);
85
- (useCurrentScreenIsHome as jest.Mock).mockReturnValue(false);
86
- (useCurrentScreenIsTabs as jest.Mock).mockReturnValue(false);
101
+ (useCurrentScreenIsHome as jest.Mock).mockReturnValue(true);
87
102
 
88
- (useNavigation as jest.Mock).mockReturnValue({
89
- startUpHooks: [],
103
+ setupFocusManager({
104
+ isFocusOnMenu: () => true,
90
105
  });
91
106
 
92
- (focusManager.isFocusOnMenu as jest.Mock).mockReturnValue(true);
93
- (focusManager.isFocusOnContent as jest.Mock).mockReturnValue(false);
94
-
95
107
  render(<Wrapped />);
96
- expect(receivedProps.backToTopAction()).toBe("GO_HOME");
108
+
109
+ expect(receivedProps.backToTopAction()).toBe("PLATFORM_BACK");
97
110
  });
98
111
 
99
- it("returns FOCUS_ON_SELECTED_TOP_MENU_ITEM when on root screen and focus on content without tabs_screen", () => {
112
+ it("returns GO_HOME when root + menu focus + NOT home", () => {
113
+ expect.assertions(1);
114
+
100
115
  (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(true);
101
116
  (useCurrentScreenIsHome as jest.Mock).mockReturnValue(false);
102
- (useCurrentScreenIsTabs as jest.Mock).mockReturnValue(false);
103
117
 
104
- (useNavigation as jest.Mock).mockReturnValue({
105
- startUpHooks: [],
118
+ setupFocusManager({
119
+ isFocusOnMenu: () => true,
106
120
  });
107
121
 
108
- (focusManager.isFocusOnMenu as jest.Mock).mockReturnValue(false);
109
- (focusManager.isFocusOnContent as jest.Mock).mockReturnValue(true);
110
-
111
122
  render(<Wrapped />);
112
123
 
113
- expect(receivedProps.backToTopAction()).toBe(
114
- "FOCUS_ON_SELECTED_TOP_MENU_ITEM"
115
- );
124
+ expect(receivedProps.backToTopAction()).toBe("GO_HOME");
116
125
  });
117
126
 
118
- it("returns FOCUS_ON_SELECTED_TAB_ITEM when on root screen and focus on content with tabs_screen", () => {
127
+ it("returns FOCUS_ON_SELECTED_TAB_ITEM when tabs content focused", () => {
128
+ expect.assertions(1);
129
+
119
130
  (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(true);
120
- (useCurrentScreenIsHome as jest.Mock).mockReturnValue(false);
121
131
  (useCurrentScreenIsTabs as jest.Mock).mockReturnValue(true);
122
132
 
123
- (useNavigation as jest.Mock).mockReturnValue({
124
- startUpHooks: [],
133
+ setupFocusManager({
134
+ isTabsScreenContentFocused: () => true,
125
135
  });
126
136
 
127
- (focusManager.isFocusOnMenu as jest.Mock).mockReturnValue(false);
128
- (focusManager.isFocusOnContent as jest.Mock).mockReturnValue(true);
129
-
130
- (focusManager.isTabsScreenContentFocused as jest.Mock).mockReturnValue(
131
- true
132
- );
133
-
134
137
  render(<Wrapped />);
135
138
 
136
139
  expect(receivedProps.backToTopAction()).toBe("FOCUS_ON_SELECTED_TAB_ITEM");
137
140
  });
138
141
 
139
- it("returns GO_BACK in default case", () => {
142
+ it("returns FOCUS_ON_SELECTED_TOP_MENU_ITEM when content focused", () => {
140
143
  expect.assertions(1);
141
144
 
142
- (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(false);
143
- (useCurrentScreenIsHome as jest.Mock).mockReturnValue(false);
144
- (useCurrentScreenIsTabs as jest.Mock).mockReturnValue(false);
145
+ (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(true);
145
146
 
146
- (useNavigation as jest.Mock).mockReturnValue({
147
- startUpHooks: [],
147
+ setupFocusManager({
148
+ isFocusOnContent: () => true,
148
149
  });
149
150
 
150
- (focusManager.isFocusOnMenu as jest.Mock).mockReturnValue(false);
151
- (focusManager.isFocusOnContent as jest.Mock).mockReturnValue(false);
151
+ render(<Wrapped />);
152
152
 
153
- (focusManager.isTabsScreenContentFocused as jest.Mock).mockReturnValue(
154
- false
153
+ expect(receivedProps.backToTopAction()).toBe(
154
+ "FOCUS_ON_SELECTED_TOP_MENU_ITEM"
155
155
  );
156
-
157
- render(<Wrapped />);
158
- expect(receivedProps.backToTopAction()).toBe("GO_BACK");
159
156
  });
160
157
 
161
- it("returns FORCE_GO_BACK in hook case", () => {
158
+ it("returns default GO_BACK", () => {
162
159
  expect.assertions(1);
163
160
 
164
- (useCurrentScreenIsRoot as jest.Mock).mockReturnValue(false);
165
- (useCurrentScreenIsHome as jest.Mock).mockReturnValue(false);
166
- (useCurrentScreenIsTabs as jest.Mock).mockReturnValue(false);
167
-
168
- (useNavigation as jest.Mock).mockReturnValue({
169
- startUpHooks: [],
170
- currentRoute: "/hooks/some_route",
171
- });
172
-
173
- (focusManager.isFocusOnMenu as jest.Mock).mockReturnValue(false);
174
- (focusManager.isFocusOnContent as jest.Mock).mockReturnValue(false);
175
-
176
- (focusManager.isTabsScreenContentFocused as jest.Mock).mockReturnValue(
177
- false
178
- );
179
-
180
161
  render(<Wrapped />);
181
- expect(receivedProps.backToTopAction()).toBe("FORCE_GO_BACK");
162
+
163
+ expect(receivedProps.backToTopAction()).toBe("GO_BACK");
182
164
  });
183
165
  });
@@ -4,6 +4,7 @@ import {
4
4
  useRivers,
5
5
  } from "@applicaster/zapp-react-native-utils/reactHooks/state";
6
6
  import { last } from "@applicaster/zapp-react-native-utils/utils";
7
+ import { toBooleanWithDefaultFalse } from "@applicaster/zapp-react-native-utils/booleanUtils";
7
8
 
8
9
  export const useCurrentScreenIsHome = (): boolean => {
9
10
  const navigator = useNavigation();
@@ -32,3 +33,12 @@ export const useCurrentScreenIsTabs = (): boolean => {
32
33
 
33
34
  return river?.type === "tabs_screen";
34
35
  };
36
+
37
+ export const useIsStandaloneFullscreen = (): boolean => {
38
+ const navigator = useNavigation();
39
+
40
+ return toBooleanWithDefaultFalse(
41
+ !navigator?.canGoBack() &&
42
+ navigator?.screenData?.general?.allow_screen_plugin_presentation
43
+ );
44
+ };
@@ -1,4 +1 @@
1
- export {
2
- withBackToTopActionHOC,
3
- type BackToTopAction,
4
- } from "./withBackToTopAction";
1
+ export { withBackToTopActionHOC } from "./withBackToTopAction";
@@ -1,5 +1,4 @@
1
1
  import * as React from "react";
2
- import { isFilledArray } from "@applicaster/zapp-react-native-utils/arrayUtils";
3
2
  import { focusManager } from "@applicaster/zapp-react-native-utils/appUtils";
4
3
 
5
4
  import { useSubscriberFor } from "@applicaster/zapp-react-native-utils/reactHooks/useSubscriberFor";
@@ -9,18 +8,13 @@ import {
9
8
  useCurrentScreenIsHome,
10
9
  useCurrentScreenIsRoot,
11
10
  useCurrentScreenIsTabs,
11
+ useIsStandaloneFullscreen,
12
12
  } from "./hooks";
13
- import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks";
14
13
 
15
- export type BACK_TO_TOP_ACTION =
16
- | "PLATFORM_BACK"
17
- | "GO_HOME"
18
- | "GO_BACK"
19
- | "FOCUS_ON_SELECTED_TOP_MENU_ITEM"
20
- | "FORCE_GO_BACK"
21
- | "FOCUS_ON_SELECTED_TAB_ITEM";
22
-
23
- export type BackToTopAction = () => BACK_TO_TOP_ACTION;
14
+ import {
15
+ useCurrentScreenIsHook,
16
+ useCurrentScreenIsStartupHook,
17
+ } from "@applicaster/zapp-react-native-utils/reactHooks/screen";
24
18
 
25
19
  export function withBackToTopActionHOC(Component) {
26
20
  return function WrappedComponent(props) {
@@ -28,11 +22,11 @@ export function withBackToTopActionHOC(Component) {
28
22
  const isRoot = useCurrentScreenIsRoot();
29
23
  const isTabsScreen = useCurrentScreenIsTabs();
30
24
 
31
- const navigator = useNavigation();
25
+ const isStartUpHook = useCurrentScreenIsStartupHook();
32
26
 
33
- const isStartUpHook = isFilledArray(navigator.startUpHooks);
27
+ const isHook = useCurrentScreenIsHook();
34
28
 
35
- const isHook = navigator.currentRoute?.includes("hook");
29
+ const isStandaloneFullscreen = useIsStandaloneFullscreen();
36
30
 
37
31
  const emitFocusOnSelectedTab = useSubscriberFor(
38
32
  QBUIComponentEvents.focusOnSelectedTab
@@ -42,11 +36,20 @@ export function withBackToTopActionHOC(Component) {
42
36
  QBUIComponentEvents.focusOnSelectedTopMenuItem
43
37
  );
44
38
 
45
- const backToTopAction = React.useCallback((): BACK_TO_TOP_ACTION => {
46
- if (isRoot && isStartUpHook) {
39
+ const backToTopAction = React.useCallback((): BackToTopAction => {
40
+ if (isStartUpHook) {
47
41
  return "PLATFORM_BACK";
48
42
  }
49
43
 
44
+ if (isHook) {
45
+ return "GO_BACK_FROM_HOOK";
46
+ }
47
+
48
+ // Handling case where is not top menu visible
49
+ if (isStandaloneFullscreen) {
50
+ return "GO_HOME";
51
+ }
52
+
50
53
  if (isRoot && focusManager.isFocusOnMenu() && isHome) {
51
54
  return "PLATFORM_BACK";
52
55
  }
@@ -63,13 +66,16 @@ export function withBackToTopActionHOC(Component) {
63
66
  return "FOCUS_ON_SELECTED_TOP_MENU_ITEM";
64
67
  }
65
68
 
66
- if (isHook) {
67
- return "FORCE_GO_BACK";
68
- }
69
-
70
69
  // default
71
70
  return "GO_BACK";
72
- }, [isHome, isRoot, isTabsScreen, isStartUpHook, isHook]);
71
+ }, [
72
+ isHome,
73
+ isRoot,
74
+ isTabsScreen,
75
+ isStartUpHook,
76
+ isHook,
77
+ isStandaloneFullscreen,
78
+ ]);
73
79
 
74
80
  return (
75
81
  <Component
@@ -54,7 +54,7 @@ import { OnScreenKeyboard } from "@applicaster/zapp-react-dom-ui-components/Comp
54
54
  import { KeyboardLongPressManager } from "@applicaster/zapp-react-dom-ui-components/Utils/KeyboardLongPressManager";
55
55
  import { KeyInputHandler } from "@applicaster/zapp-react-native-utils/appUtils/keyInputHandler/KeyInputHandler";
56
56
  import { getHomeRiver } from "@applicaster/zapp-react-native-utils/reactHooks/state";
57
- import { withBackToTopActionHOC, BackToTopAction } from "./hoc";
57
+ import { withBackToTopActionHOC } from "./hoc";
58
58
 
59
59
  const { withXray } = getXray();
60
60
  const globalAny: any = global;
@@ -76,7 +76,7 @@ type Props = {
76
76
  rivers: {};
77
77
  xray: XRayContext;
78
78
  confirmDialog: typeof confirmationDialogStore;
79
- backToTopAction: BackToTopAction;
79
+ backToTopAction: () => BackToTopAction;
80
80
  emitFocusOnSelectedTopMenuItem: Callback;
81
81
  emitFocusOnSelectedTab: Callback;
82
82
  };
@@ -461,7 +461,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
461
461
  }
462
462
  }
463
463
 
464
- if (action === "FORCE_GO_BACK") {
464
+ if (action === "GO_BACK_FROM_HOOK") {
465
465
  log_info(action);
466
466
 
467
467
  const fallbackToHome = false;
@@ -271,10 +271,11 @@ export const getDeviceData = async () => {
271
271
  ]);
272
272
 
273
273
  deviceData = {
274
- platform: "lg_tv",
275
274
  ...webOSInfo,
276
275
  ...webOSConnectionInfo,
277
- device_type: getDeviceType(),
276
+ platform: "lg_tv",
277
+ deviceMake: "LG",
278
+ deviceType: getDeviceType(),
278
279
  ...deviceDimensions,
279
280
  };
280
281
  } else if (isSamsungPlatform()) {
@@ -284,10 +285,11 @@ export const getDeviceData = async () => {
284
285
  ]);
285
286
 
286
287
  deviceData = {
287
- platform: "samsung_tv",
288
288
  ...tizenInfo,
289
289
  ...tizenConnectionInfo,
290
- device_type: getDeviceType(),
290
+ platform: "samsung_tv",
291
+ deviceMake: "Samsung",
292
+ deviceType: getDeviceType(),
291
293
  ...deviceDimensions,
292
294
  };
293
295
  } else if (isVizioPlatform()) {
package/main.css CHANGED
@@ -1,7 +1,7 @@
1
1
  html,
2
2
  body {
3
3
  width: 100vw;
4
- height: 100vw;
4
+ height: 100vh;
5
5
  max-width: 1920px;
6
6
  max-height: 1080px;
7
7
  overflow: hidden;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-dom-app",
3
- "version": "15.0.0-rc.99",
3
+ "version": "16.0.0-rc.1",
4
4
  "description": "Zapp App Component for Applicaster's Quick Brick React Native App",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -22,11 +22,11 @@
22
22
  },
23
23
  "homepage": "https://github.com/applicaster/zapp-react-dom-app#readme",
24
24
  "dependencies": {
25
- "@applicaster/zapp-react-dom-ui-components": "15.0.0-rc.99",
26
- "@applicaster/zapp-react-native-bridge": "15.0.0-rc.99",
27
- "@applicaster/zapp-react-native-redux": "15.0.0-rc.99",
28
- "@applicaster/zapp-react-native-ui-components": "15.0.0-rc.99",
29
- "@applicaster/zapp-react-native-utils": "15.0.0-rc.99",
25
+ "@applicaster/zapp-react-dom-ui-components": "16.0.0-rc.1",
26
+ "@applicaster/zapp-react-native-bridge": "16.0.0-rc.1",
27
+ "@applicaster/zapp-react-native-redux": "16.0.0-rc.1",
28
+ "@applicaster/zapp-react-native-ui-components": "16.0.0-rc.1",
29
+ "@applicaster/zapp-react-native-utils": "16.0.0-rc.1",
30
30
  "abortcontroller-polyfill": "^1.7.5",
31
31
  "typeface-montserrat": "^0.0.54",
32
32
  "video.js": "7.14.3",