@applicaster/quick-brick-core 12.0.0-alpha.9233494544 → 12.0.0-alpha.9241554284
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/DeepLinking/URLSchemeListener/index.tsx +3 -7
- package/App/LogicAggregatorContainer/index.tsx +5 -0
- package/App/NavigationProvider/NavigationProvider.tsx +25 -6
- package/App/NavigationProvider/ScreenHooks/ApplyScreenHooks.tsx +2 -8
- package/App/NetworkStatusProvider/utils.ts +23 -1
- package/App/ThemeManager/index.tsx +1 -9
- package/App/index.tsx +33 -26
- package/const/index.ts +4 -0
- package/createZappApp/__tests__/__snapshots__/createZappApp.test.js.snap +0 -1
- package/createZappApp/index.tsx +9 -2
- package/package.json +8 -8
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import 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
|
-
|
|
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
|
|
32
|
+
return children;
|
|
37
33
|
}
|
|
@@ -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
|
-
|
|
412
|
-
|
|
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,
|
|
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: {
|
|
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
|
-
|
|
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
|
|
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 {
|
|
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:
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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 = ({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
<
|
|
62
|
-
<
|
|
63
|
-
|
|
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 =
|
|
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
package/createZappApp/index.tsx
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "12.0.0-alpha.9241554284",
|
|
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.
|
|
34
|
-
"@applicaster/quick-brick-core-plugins": "12.0.0-alpha.
|
|
35
|
-
"@applicaster/zapp-pipes-v2-client": "12.0.0-alpha.
|
|
36
|
-
"@applicaster/zapp-react-native-bridge": "12.0.0-alpha.
|
|
37
|
-
"@applicaster/zapp-react-native-redux": "12.0.0-alpha.
|
|
38
|
-
"@applicaster/zapp-react-native-ui-components": "12.0.0-alpha.
|
|
39
|
-
"@applicaster/zapp-react-native-utils": "12.0.0-alpha.
|
|
33
|
+
"@applicaster/applicaster-types": "12.0.0-alpha.9241554284",
|
|
34
|
+
"@applicaster/quick-brick-core-plugins": "12.0.0-alpha.9241554284",
|
|
35
|
+
"@applicaster/zapp-pipes-v2-client": "12.0.0-alpha.9241554284",
|
|
36
|
+
"@applicaster/zapp-react-native-bridge": "12.0.0-alpha.9241554284",
|
|
37
|
+
"@applicaster/zapp-react-native-redux": "12.0.0-alpha.9241554284",
|
|
38
|
+
"@applicaster/zapp-react-native-ui-components": "12.0.0-alpha.9241554284",
|
|
39
|
+
"@applicaster/zapp-react-native-utils": "12.0.0-alpha.9241554284",
|
|
40
40
|
"atob": "^2.1.2",
|
|
41
41
|
"axios": "^0.28.0",
|
|
42
42
|
"btoa": "^1.2.1",
|