@applicaster/quick-brick-core 12.0.0-alpha.5208030571 → 12.0.0-alpha.5230293331

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,15 +1,11 @@
1
- import React, { ReactChild, useCallback, useContext } from "react";
1
+ import React, { useCallback, useContext } from "react";
2
2
 
3
3
  import { URLSchemeHandler } from "../URLSchemeHandler";
4
4
  import { URLSchemeContext } from "./URLSchemeContextProvider";
5
5
  import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
6
6
  import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
7
7
 
8
- type Props = {
9
- children: ReactChild;
10
- };
11
-
12
- export function URLSchemeListener(props: Props) {
8
+ export function URLSchemeListener({ children }) {
13
9
  const { url, done } = useContext(URLSchemeContext);
14
10
 
15
11
  const navigator = useNavigation();
@@ -33,5 +29,5 @@ export function URLSchemeListener(props: Props) {
33
29
  return <URLSchemeHandler url={url} onFinish={onFinish} />;
34
30
  }
35
31
 
36
- return props.children;
32
+ return children;
37
33
  }
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+
3
+ export const LogicAggregatorContainer = ({ components }) => {
4
+ return components.map((Component, index) => <Component key={index} />);
5
+ };
@@ -64,6 +64,8 @@ import { ZappPipesEntryContext } from "@applicaster/zapp-react-native-ui-compone
64
64
  import { PlayNextState } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/OverlayObserver/OverlaysObserver";
65
65
  import { inflateUrl } from "@applicaster/zapp-react-native-ui-components/Components/LinkHandler/LinkHandler";
66
66
  import { useModalStore } from "@applicaster/zapp-react-native-utils/modalState";
67
+ import { useSubscriberFor } from "@applicaster/zapp-react-native-utils/reactHooks/useSubscriberFor";
68
+ import { QBUIComponentEvents } from "@applicaster/zapp-react-native-ui-components/events";
67
69
 
68
70
  const logger = coreAppLogger.addSubsystem("Navigator");
69
71
 
@@ -130,6 +132,10 @@ export function NavigationProvider({ children }: Props) {
130
132
 
131
133
  const online = useConnectionInfo(true);
132
134
 
135
+ const replaceEvent = useSubscriberFor(
136
+ QBUIComponentEvents.navigatorReplaceItem
137
+ );
138
+
133
139
  React.useEffect(() => {
134
140
  stateRef.current = state;
135
141
  pathnameRef.current = pathname;
@@ -259,6 +265,7 @@ export function NavigationProvider({ children }: Props) {
259
265
  item?.id !==
260
266
  legacyScreenData(state?.location?.state as NavigationScreenData)?.id
261
267
  ) {
268
+ replaceEvent();
262
269
  navigateTo(item, ACTIONS.REPLACE, options);
263
270
  }
264
271
  };
@@ -407,9 +414,12 @@ export function NavigationProvider({ children }: Props) {
407
414
  }
408
415
  };
409
416
 
410
- const handleHookCancel = ({ hookPlugin }, dispose) => {
411
- if (hookPlugin?.lastHook) {
412
- dispose();
417
+ const handleHookCancel = ({ hookPlugin, callback }, dispose) => {
418
+ dispose();
419
+ setStartUpHooks(false);
420
+
421
+ if (callback && typeof callback === "function") {
422
+ callback();
413
423
  }
414
424
 
415
425
  if (hookPlugin.isModalHook()) {
@@ -475,7 +485,13 @@ export function NavigationProvider({ children }: Props) {
475
485
  return false;
476
486
  }, [pluginConfigurations, plugins, rivers]);
477
487
 
478
- const [startUpHooks, setStartUpHooks] = React.useState(checkStartUpHooks);
488
+ const [startUpHooks, _setStartUpHooks] = React.useState(checkStartUpHooks);
489
+ const currentStartUpHooks = React.useRef(checkStartUpHooks);
490
+
491
+ const setStartUpHooks = (value) => {
492
+ _setStartUpHooks(value);
493
+ currentStartUpHooks.current = value;
494
+ };
479
495
 
480
496
  const handleHookComplete =
481
497
  (navigationAction, targetRoute, { screen, options }) =>
@@ -483,7 +499,7 @@ export function NavigationProvider({ children }: Props) {
483
499
  if (hookPlugin?.lastHook) {
484
500
  dispose({ disposeAll: true });
485
501
 
486
- startUpHooks && setStartUpHooks(false);
502
+ startUpHooks.current && setStartUpHooks(false);
487
503
  }
488
504
 
489
505
  dispatch(
@@ -592,7 +608,10 @@ export function NavigationProvider({ children }: Props) {
592
608
  targetScreen: screen,
593
609
  rivers,
594
610
  plugins,
595
- startUpHooksData: { startUpHooks, setStartUpHooks },
611
+ startUpHooksData: {
612
+ startUpHooks: currentStartUpHooks.current,
613
+ setStartUpHooks,
614
+ },
596
615
  };
597
616
 
598
617
  HooksManager(hooksOptions)
@@ -1,15 +1,9 @@
1
1
  import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
2
- import * as React from "react";
3
2
  import { usePluginScreenHooks } from "./usePluginScreenHooks";
4
3
 
5
- type Props = {
6
- pathname: string;
7
- children: React.ReactChildren;
8
- };
9
-
10
- export function ApplyScreenHooks({ children }: Props) {
4
+ export function ApplyScreenHooks() {
11
5
  const { currentRoute } = useNavigation();
12
6
  usePluginScreenHooks(currentRoute);
13
7
 
14
- return children;
8
+ return null;
15
9
  }
@@ -3,7 +3,10 @@ import * as R from "ramda";
3
3
 
4
4
  import { NetInfoState } from "@react-native-community/netinfo";
5
5
  import { NETWORK_HOOKS_KEYS } from "./const";
6
- import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
6
+ import {
7
+ isVizioPlatform,
8
+ platformSelect,
9
+ } from "@applicaster/zapp-react-native-utils/reactUtils";
7
10
  import { Platform } from "react-native";
8
11
 
9
12
  type ConnectionStatus = boolean;
@@ -203,6 +206,18 @@ export const subscribeToDeviceNetworkChanges = (callback: NetCb) => {
203
206
  registeredListener = webapis.network.addNetworkStateChangeListener(
204
207
  samsungNetworkChangeHandler(callback)
205
208
  );
209
+
210
+ return;
211
+ }
212
+
213
+ if (isVizioPlatform()) {
214
+ window.addEventListener("online", function () {
215
+ callback({ online: true });
216
+ });
217
+
218
+ window.addEventListener("offline", function () {
219
+ callback({ online: false });
220
+ });
206
221
  }
207
222
  };
208
223
 
@@ -214,5 +229,12 @@ export const subscribeToDeviceNetworkChanges = (callback: NetCb) => {
214
229
  export const unsubscribeToDeviceNetworkChanges = (id = registeredListener) => {
215
230
  if (hasTizenAPIs()) {
216
231
  webapis.network.removeNetworkStateChangeListener(id);
232
+
233
+ return;
234
+ }
235
+
236
+ if (isVizioPlatform()) {
237
+ window.removeEventListener("online", function () {});
238
+ window.removeEventListener("offline", function () {});
217
239
  }
218
240
  };
@@ -9,17 +9,9 @@ import {
9
9
  partitionByKeys,
10
10
  } from "@applicaster/zapp-react-native-utils/objectUtils";
11
11
 
12
- type Plugin = {
13
- name: string;
14
- identifier: string;
15
- module: any;
16
- type: string;
17
- configuration: { [key: string]: any };
18
- };
19
-
20
12
  type Props = {
21
13
  children: React.ReactNode;
22
- plugins: Plugin[];
14
+ plugins: QuickBrickPlugin[];
23
15
  };
24
16
 
25
17
  const DEFAULT_THEME_ID = "base-theme";
package/App/index.tsx CHANGED
@@ -1,8 +1,8 @@
1
1
  import * as React from "react";
2
2
  import * as R from "ramda";
3
3
  import {
4
- SafeAreaProvider,
5
4
  initialWindowMetrics,
5
+ SafeAreaProvider,
6
6
  } from "react-native-safe-area-context";
7
7
 
8
8
  import { ErrorBoundary } from "./ErrorBoundary";
@@ -27,16 +27,15 @@ import {
27
27
  import { withURLSchemeContextProvider } from "./DeepLinking/URLSchemeListener/URLSchemeContextProvider";
28
28
  import { appRemoteDataLoader } from "./appRemoteDataLoader";
29
29
  import { withActionExecutor } from "@applicaster/zapp-react-native-utils/actionsExecutor/ActionExecutorContext";
30
+ import { withScreenDataContextProvider } from "@applicaster/zapp-react-native-ui-components/Contexts/ScreenDataContext";
31
+ import { LogicAggregatorContainer } from "./LogicAggregatorContainer";
30
32
 
31
- /**
32
- * @typedef {Object} AppOptions
33
- * @param {Function} InteractionManager decorator to use for managing complex user interactions in the app
34
- * @param {ReactComponent} Layout Component to use as main layout for the app
35
-
36
- * @param {Object} QuickBrickManager QB manager module
37
- * @param {Function} QuickBrickManager.sendQuickBrickEvent function invoked to pass events to the native side
38
- * @param {[Function]} ContextProviders array of context providers to pass to the app
39
- */
33
+ interface AppOptions {
34
+ Layout: React.ComponentType;
35
+ OfflineHandler: React.ComponentType;
36
+ SplashLoader: React.ComponentType;
37
+ InteractionManager: React.ComponentType;
38
+ }
40
39
 
41
40
  /**
42
41
  * Creates a QuickBrick app with the provided options
@@ -44,12 +43,19 @@ import { withActionExecutor } from "@applicaster/zapp-react-native-utils/actions
44
43
  * @param {AppOptions} options
45
44
  * @returns {ReactComponent}
46
45
  */
47
- const App = ({ Layout, OfflineHandler, SplashLoader }): ZappApp =>
48
- React.memo(function ZappApp({
49
- styles,
50
- components: { AppContainer },
51
- plugins,
52
- }: AppComponentProps) {
46
+ const App = ({
47
+ Layout,
48
+ OfflineHandler,
49
+ SplashLoader,
50
+ InteractionManager,
51
+ }: AppOptions): ZappApp =>
52
+ React.memo(function ZappApp(props: AppComponentProps) {
53
+ const {
54
+ styles,
55
+ components: { AppContainer },
56
+ plugins,
57
+ } = props;
58
+
53
59
  return (
54
60
  <ThemeManager plugins={plugins}>
55
61
  <SafeAreaProvider initialMetrics={initialWindowMetrics}>
@@ -58,15 +64,16 @@ const App = ({ Layout, OfflineHandler, SplashLoader }): ZappApp =>
58
64
  <URLSchemeListener>
59
65
  <SplashLoader>
60
66
  <OfflineHandler>
61
- <ApplyScreenHooks>
62
- <Layout>
63
- <RouteManager />
64
- </Layout>
65
- </ApplyScreenHooks>
67
+ <Layout>
68
+ <RouteManager />
69
+ </Layout>
66
70
  </OfflineHandler>
67
71
  </SplashLoader>
68
72
  <ModalProvider />
69
73
  </URLSchemeListener>
74
+ <LogicAggregatorContainer
75
+ components={[InteractionManager, ApplyScreenHooks]}
76
+ />
70
77
  </ErrorBoundary>
71
78
  </AppContainer>
72
79
  </SafeAreaProvider>
@@ -76,7 +83,7 @@ const App = ({ Layout, OfflineHandler, SplashLoader }): ZappApp =>
76
83
 
77
84
  export function createQuickBrickApp(options): ZappApp {
78
85
  const {
79
- InteractionManager = R.identity,
86
+ InteractionManager = () => null,
80
87
  Layout,
81
88
  QuickBrickManager,
82
89
  OfflineHandler = R.prop("children"),
@@ -94,15 +101,15 @@ export function createQuickBrickApp(options): ZappApp {
94
101
  storeConnector, // storeConnector should be first, as it disregards other props
95
102
  ...ContextProviders, // contexts consumers are only working below this point
96
103
  appRemoteDataLoader,
97
- withAppManager, // provides handlers when the app is going in the background, or comes out of it
104
+ withAppManager, // provides handlers when the app is going in the background, or comes out of it, can be moved to LogicAggregatorContainer
98
105
  ZappPipesEntryContext.withProvider,
99
106
  withURLSchemeContextProvider,
100
107
  withNetworkStatusProvider,
101
108
  withNavigationProvider,
109
+ withScreenDataContextProvider,
102
110
  ZappPipesSearchContext.withProvider,
103
- InteractionManager,
104
111
  withActionExecutor,
105
112
  withActionsProvider,
106
- appLifeCycleManager(appLoader, QuickBrickManager)
107
- )(App({ Layout, OfflineHandler, SplashLoader }));
113
+ appLifeCycleManager(appLoader, QuickBrickManager) // can be moved to LogicAggregatorContainer
114
+ )(App({ Layout, OfflineHandler, SplashLoader, InteractionManager }));
108
115
  }
package/const/index.ts CHANGED
@@ -34,3 +34,7 @@ export const requiredSessionKeys = [
34
34
  "userAgent",
35
35
  "version_name",
36
36
  ];
37
+
38
+ export const QUICK_BRICK_NAVBAR = "quick-brick-navbar";
39
+
40
+ export const QUICK_BRICK_CONTENT = "quick-brick-content";
@@ -20,7 +20,6 @@ Object {
20
20
  "isAvailable": null,
21
21
  "nextState": null,
22
22
  },
23
- "isTransitioning": false,
24
23
  },
25
24
  "cellStyles": Object {},
26
25
  "components": Object {
@@ -7,6 +7,10 @@
7
7
  import * as React from "react";
8
8
  import * as R from "ramda";
9
9
  import { Dimensions } from "react-native";
10
+ import {
11
+ isNotEmpty,
12
+ isNotNil,
13
+ } from "@applicaster/zapp-react-native-utils/reactUtils/helpers";
10
14
 
11
15
  import {
12
16
  createZappReduxStore,
@@ -27,6 +31,9 @@ import { remoteDataLoader } from "../App/appRemoteDataLoader/remoteDataLoader";
27
31
  import * as QuickBrickManager from "@applicaster/zapp-react-native-bridge/QuickBrick";
28
32
  import { isAndroidPlatform } from "@applicaster/zapp-react-native-utils/reactUtils";
29
33
 
34
+ const isNotEmptyObject = (value: unknown) =>
35
+ isNotNil(value) && R.is(Object, value) && isNotEmpty(value);
36
+
30
37
  /**
31
38
  * Creates a Zapp App with the provided options
32
39
  * @export
@@ -55,8 +62,8 @@ export function createZappApp(zappAppConfig: ZappAppConfig) {
55
62
 
56
63
  const useTabletLayout =
57
64
  isTablet({ width, height }, width > height ? "landscape" : "portrait") &&
58
- tabletLayout &&
59
- tabletCellStyles;
65
+ isNotEmptyObject(tabletLayout) &&
66
+ isNotEmptyObject(tabletCellStyles);
60
67
 
61
68
  function fetchPluginConfiguration(plugin) {
62
69
  const configuration = R.compose(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/quick-brick-core",
3
- "version": "12.0.0-alpha.5208030571",
3
+ "version": "12.0.0-alpha.5230293331",
4
4
  "description": "Core package for Applicaster's Quick Brick App",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -30,13 +30,13 @@
30
30
  },
31
31
  "homepage": "https://github.com/applicaster/quickbrick#readme",
32
32
  "dependencies": {
33
- "@applicaster/applicaster-types": "12.0.0-alpha.5208030571",
34
- "@applicaster/quick-brick-core-plugins": "12.0.0-alpha.5208030571",
35
- "@applicaster/zapp-pipes-v2-client": "12.0.0-alpha.5208030571",
36
- "@applicaster/zapp-react-native-bridge": "12.0.0-alpha.5208030571",
37
- "@applicaster/zapp-react-native-redux": "12.0.0-alpha.5208030571",
38
- "@applicaster/zapp-react-native-ui-components": "12.0.0-alpha.5208030571",
39
- "@applicaster/zapp-react-native-utils": "12.0.0-alpha.5208030571",
33
+ "@applicaster/applicaster-types": "12.0.0-alpha.5230293331",
34
+ "@applicaster/quick-brick-core-plugins": "12.0.0-alpha.5230293331",
35
+ "@applicaster/zapp-pipes-v2-client": "12.0.0-alpha.5230293331",
36
+ "@applicaster/zapp-react-native-bridge": "12.0.0-alpha.5230293331",
37
+ "@applicaster/zapp-react-native-redux": "12.0.0-alpha.5230293331",
38
+ "@applicaster/zapp-react-native-ui-components": "12.0.0-alpha.5230293331",
39
+ "@applicaster/zapp-react-native-utils": "12.0.0-alpha.5230293331",
40
40
  "atob": "^2.1.2",
41
41
  "axios": "^0.28.0",
42
42
  "btoa": "^1.2.1",