@applicaster/quick-brick-core 12.0.0-alpha.6236157458 → 12.0.0-alpha.6254111934
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/ActionSetters/index.ts +4 -4
- package/App/AssetCache/__tests__/assetCache.test.ts +1 -1
- package/App/AssetCache/index.ts +17 -4
- package/App/DeepLinking/URLSchemeHandler/SchemeHandlerHooks/usePresentSchemeHandler.ts +3 -5
- package/App/DeepLinking/URLSchemeHandler/__tests__/URLSchemeHandler.test.tsx +3 -3
- package/App/DeepLinking/URLSchemeListener/__tests__/URLSchemeListenerTest.js +0 -2
- package/App/ModalProvider/ModalBottomSheet/index.tsx +5 -1
- package/App/ModalProvider/ModalContent.tsx +1 -1
- package/App/ModalProvider/index.tsx +3 -3
- package/App/NavigationProvider/NavigationProvider.tsx +12 -49
- package/App/NavigationProvider/__tests__/__snapshots__/navigationProvider.test.tsx.snap +4 -21
- package/App/NavigationProvider/__tests__/navigationProvider.test.tsx +6 -6
- package/App/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +15 -8
- package/App/RouteManager/__tests__/routeManager.test.js +18 -7
- package/App/RouteManager/index.tsx +3 -2
- package/App/ThemeManager/index.tsx +8 -15
- package/App/__tests__/createQuickBrickApp.test.js +5 -0
- package/App/index.tsx +0 -5
- package/createZappApp/__tests__/__snapshots__/createZappApp.test.js.snap +1 -0
- package/createZappApp/{index.js → index.tsx} +0 -5
- package/package.json +9 -10
|
@@ -88,10 +88,10 @@ const getActionInitialStateSetters = (key) => {
|
|
|
88
88
|
return R.compose(
|
|
89
89
|
R.map((subscription: { [x: string]: any; pluginId: any }) => {
|
|
90
90
|
return async () => {
|
|
91
|
+
const now = performance.now();
|
|
92
|
+
|
|
91
93
|
logger.info({
|
|
92
|
-
message: `Invocation Started - action plugin ${key}, pluginId: ${
|
|
93
|
-
subscription.pluginId
|
|
94
|
-
}: ${performance.now()}`,
|
|
94
|
+
message: `Invocation Started - action plugin ${key}, pluginId: ${subscription.pluginId}`,
|
|
95
95
|
});
|
|
96
96
|
|
|
97
97
|
const promiseFunc = subscription[key];
|
|
@@ -101,7 +101,7 @@ const getActionInitialStateSetters = (key) => {
|
|
|
101
101
|
logger.info({
|
|
102
102
|
message: `Invocation Completed - action plugin ${key}, pluginId: ${
|
|
103
103
|
subscription.pluginId
|
|
104
|
-
}: ${performance.now()}`,
|
|
104
|
+
}: ${performance.now() - now} ms`,
|
|
105
105
|
});
|
|
106
106
|
|
|
107
107
|
return result;
|
package/App/AssetCache/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="../../" />
|
|
2
2
|
import * as R from "ramda";
|
|
3
|
-
import { log_debug, log_warning } from "./logger";
|
|
3
|
+
import { log_debug, log_verbose, log_warning } from "./logger";
|
|
4
4
|
import { CacheManager } from "./CacheManager";
|
|
5
5
|
|
|
6
6
|
import {
|
|
@@ -84,6 +84,8 @@ export async function cacheAssets({
|
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
+
const time = performance.now();
|
|
88
|
+
|
|
87
89
|
try {
|
|
88
90
|
const { assetFiles, cellAssets, pluginAssets, layoutAssets } =
|
|
89
91
|
await getLayoutAssets({
|
|
@@ -141,18 +143,25 @@ export async function cacheAssets({
|
|
|
141
143
|
|
|
142
144
|
newCacheState.forEach(({ file, url }) => (urlFileMap[url] = file));
|
|
143
145
|
|
|
144
|
-
const updatedLayout = remapAssetPath(
|
|
146
|
+
const updatedLayout = remapAssetPath(
|
|
147
|
+
layoutAssets,
|
|
148
|
+
layout,
|
|
149
|
+
urlFileMap,
|
|
150
|
+
"layoutAssets"
|
|
151
|
+
);
|
|
145
152
|
|
|
146
153
|
const updatedPluginConfigurations = remapAssetPath(
|
|
147
154
|
pluginAssets,
|
|
148
155
|
pluginConfigurations,
|
|
149
|
-
urlFileMap
|
|
156
|
+
urlFileMap,
|
|
157
|
+
"pluginAssets"
|
|
150
158
|
);
|
|
151
159
|
|
|
152
160
|
const updatedCellStyles = remapAssetPath(
|
|
153
161
|
cellAssets,
|
|
154
162
|
cellStyles,
|
|
155
|
-
urlFileMap
|
|
163
|
+
urlFileMap,
|
|
164
|
+
"cellStyles"
|
|
156
165
|
);
|
|
157
166
|
|
|
158
167
|
return {
|
|
@@ -164,5 +173,9 @@ export async function cacheAssets({
|
|
|
164
173
|
log_warning(`cacheAssets: Error caching assets, message: ${error.message}`);
|
|
165
174
|
|
|
166
175
|
return { layout, pluginConfigurations, cellStyles };
|
|
176
|
+
} finally {
|
|
177
|
+
log_verbose(
|
|
178
|
+
`cacheAssets: caching assets took ${performance.now() - time} ms`
|
|
179
|
+
);
|
|
167
180
|
}
|
|
168
181
|
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
useActions,
|
|
3
|
-
usePickFromState,
|
|
4
|
-
} from "@applicaster/zapp-react-native-redux/hooks";
|
|
1
|
+
import { useActions } from "@applicaster/zapp-react-native-redux/hooks";
|
|
5
2
|
import * as R from "ramda";
|
|
6
3
|
import * as React from "react";
|
|
7
4
|
import axios from "axios";
|
|
@@ -28,6 +25,7 @@ import {
|
|
|
28
25
|
} from "../../helpers";
|
|
29
26
|
|
|
30
27
|
import { log_error, log_info } from "../../logger";
|
|
28
|
+
import { useRivers } from "@applicaster/zapp-react-native-utils/reactHooks/state";
|
|
31
29
|
|
|
32
30
|
const getFeed = (query) => ({
|
|
33
31
|
content: { src: query.data_source },
|
|
@@ -60,7 +58,7 @@ export function usePresentSchemeHandler({
|
|
|
60
58
|
feedUrl: data_source,
|
|
61
59
|
});
|
|
62
60
|
|
|
63
|
-
const
|
|
61
|
+
const rivers = useRivers();
|
|
64
62
|
const screenRiver = findRiver({ screen_id, rivers });
|
|
65
63
|
const dispatch = useDispatch();
|
|
66
64
|
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { render, waitFor
|
|
3
|
-
|
|
4
|
-
jest.mock("react-native");
|
|
2
|
+
import { cleanup, render, waitFor } from "@testing-library/react-native";
|
|
5
3
|
|
|
6
4
|
const theme = {
|
|
7
5
|
screen_margin_top: 0,
|
|
@@ -10,6 +8,8 @@ const theme = {
|
|
|
10
8
|
|
|
11
9
|
const plugins = [];
|
|
12
10
|
|
|
11
|
+
jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation");
|
|
12
|
+
|
|
13
13
|
jest.mock("@applicaster/zapp-react-native-utils/theme", () => ({
|
|
14
14
|
useTheme: jest.fn(() => theme),
|
|
15
15
|
}));
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
useNavigation,
|
|
14
14
|
} from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
15
15
|
import { useDimensions } from "@applicaster/zapp-react-native-utils/reactHooks/layout";
|
|
16
|
+
import { ModalComponent } from "@applicaster/zapp-react-native-ui-components/Components";
|
|
16
17
|
|
|
17
18
|
const styles = StyleSheet.create({
|
|
18
19
|
container: {
|
|
@@ -55,7 +56,10 @@ export function ModalBottomSheet(props: Props) {
|
|
|
55
56
|
modal_bottom_sheet_tablet_max_width: sheetTabletMaxWidth,
|
|
56
57
|
} = theme;
|
|
57
58
|
|
|
58
|
-
const {
|
|
59
|
+
const {
|
|
60
|
+
ModalBottomSheetContent = ModalComponent,
|
|
61
|
+
modalBottomSheetContentProps,
|
|
62
|
+
} = props;
|
|
59
63
|
|
|
60
64
|
const onLayout = useCallback(({ nativeEvent }) => {
|
|
61
65
|
const calculatedHeight = nativeEvent?.layout?.height;
|
|
@@ -17,7 +17,7 @@ const styles = StyleSheet.create({
|
|
|
17
17
|
export function ModalContent(props: Props) {
|
|
18
18
|
const { modalScreenProps } = props;
|
|
19
19
|
|
|
20
|
-
if (modalScreenProps?.screenData?.
|
|
20
|
+
if (modalScreenProps?.screenData?.modalBottomSheetContentProps) {
|
|
21
21
|
const { ModalBottomSheetContent, modalBottomSheetContentProps } =
|
|
22
22
|
modalScreenProps?.screenData || {};
|
|
23
23
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
|
|
3
|
-
import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
|
|
4
|
-
|
|
5
3
|
import { ModalPresenter } from "./ModalPresenter";
|
|
6
4
|
import { ModalContent } from "./ModalContent";
|
|
7
5
|
import { ModalChildrenWrapper } from "./ModalChildrenWrapper";
|
|
8
6
|
import { PathnameContext } from "@applicaster/zapp-react-native-ui-components/Contexts/PathnameContext";
|
|
9
7
|
import { ScreenContextProvider } from "@applicaster/zapp-react-native-ui-components/Contexts/ScreenContext";
|
|
10
8
|
import { ROUTE_TYPES } from "@applicaster/zapp-react-native-utils/navigationUtils/routeTypes";
|
|
9
|
+
import { useModalStore } from "@applicaster/zapp-react-native-utils/modalState";
|
|
11
10
|
|
|
12
11
|
export function ModalProvider() {
|
|
13
|
-
const { modalState } =
|
|
12
|
+
const { modalState } = useModalStore();
|
|
13
|
+
|
|
14
14
|
const [modalVisible, setModalVisible] = React.useState(false);
|
|
15
15
|
const [modalShown, setModalShown] = React.useState(false);
|
|
16
16
|
|
|
@@ -63,6 +63,7 @@ import { findParent } from "@applicaster/zapp-react-native-ui-components/Context
|
|
|
63
63
|
import { ZappPipesEntryContext } from "@applicaster/zapp-react-native-ui-components/Contexts";
|
|
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
|
+
import { useModalStore } from "@applicaster/zapp-react-native-utils/modalState";
|
|
66
67
|
|
|
67
68
|
const logger = coreAppLogger.addSubsystem("Navigator");
|
|
68
69
|
|
|
@@ -92,13 +93,6 @@ const navigationActions = {
|
|
|
92
93
|
|
|
93
94
|
const platform = getPlatform();
|
|
94
95
|
|
|
95
|
-
const initialModalState = {
|
|
96
|
-
visible: false,
|
|
97
|
-
screen: null,
|
|
98
|
-
options: {},
|
|
99
|
-
props: {},
|
|
100
|
-
};
|
|
101
|
-
|
|
102
96
|
export function NavigationProvider({ children }: Props) {
|
|
103
97
|
const {
|
|
104
98
|
appData: { layoutVersion },
|
|
@@ -130,8 +124,7 @@ export function NavigationProvider({ children }: Props) {
|
|
|
130
124
|
ZappPipesEntryContext.Context
|
|
131
125
|
);
|
|
132
126
|
|
|
133
|
-
const
|
|
134
|
-
React.useState<ModalState>(initialModalState);
|
|
127
|
+
const { openModal, dismissModal } = useModalStore();
|
|
135
128
|
|
|
136
129
|
const playNextOverlayState = React.useRef();
|
|
137
130
|
|
|
@@ -153,6 +146,12 @@ export function NavigationProvider({ children }: Props) {
|
|
|
153
146
|
[pathname, rivers]
|
|
154
147
|
);
|
|
155
148
|
|
|
149
|
+
const getModalState: () => ModalState = () => {
|
|
150
|
+
const { modalState } = useModalStore.getState();
|
|
151
|
+
|
|
152
|
+
return modalState;
|
|
153
|
+
};
|
|
154
|
+
|
|
156
155
|
const homeRiver = React.useMemo(
|
|
157
156
|
() => homeRiverSelector({ rivers }),
|
|
158
157
|
[rivers]
|
|
@@ -168,7 +167,7 @@ export function NavigationProvider({ children }: Props) {
|
|
|
168
167
|
[rivers, homeRiver]
|
|
169
168
|
);
|
|
170
169
|
|
|
171
|
-
const getStack = () => [...
|
|
170
|
+
const getStack = () => [...state?.stack?.mainStack];
|
|
172
171
|
|
|
173
172
|
const openVideoModal = (
|
|
174
173
|
item: ZappEntry,
|
|
@@ -615,31 +614,6 @@ export function NavigationProvider({ children }: Props) {
|
|
|
615
614
|
},
|
|
616
615
|
});
|
|
617
616
|
|
|
618
|
-
const openModal = React.useCallback(
|
|
619
|
-
({ item, options = {}, props = {} }: OpenModalArg) => {
|
|
620
|
-
setModalState({
|
|
621
|
-
visible: true,
|
|
622
|
-
screen: item as ZappRiver,
|
|
623
|
-
options: {
|
|
624
|
-
animated: true,
|
|
625
|
-
animationType: "slide",
|
|
626
|
-
onShow: () => {},
|
|
627
|
-
presentationStyle: "overFullScreen",
|
|
628
|
-
transparent: true,
|
|
629
|
-
...options,
|
|
630
|
-
onDismiss: () => {
|
|
631
|
-
setModalState(initialModalState);
|
|
632
|
-
},
|
|
633
|
-
onRequestClose: () => {
|
|
634
|
-
dismissModal();
|
|
635
|
-
},
|
|
636
|
-
},
|
|
637
|
-
props,
|
|
638
|
-
});
|
|
639
|
-
},
|
|
640
|
-
[]
|
|
641
|
-
);
|
|
642
|
-
|
|
643
617
|
const openPiP = React.useCallback(() => {
|
|
644
618
|
dispatch(setVideoPiP());
|
|
645
619
|
}, []);
|
|
@@ -660,10 +634,6 @@ export function NavigationProvider({ children }: Props) {
|
|
|
660
634
|
}
|
|
661
635
|
}, [state?.options?.videoModal?.previousMode]);
|
|
662
636
|
|
|
663
|
-
const dismissModal = React.useCallback(() => {
|
|
664
|
-
setModalState(() => ({ ...initialModalState }));
|
|
665
|
-
}, []);
|
|
666
|
-
|
|
667
637
|
const openModalBottomSheet = React.useCallback(
|
|
668
638
|
({
|
|
669
639
|
ModalBottomSheetContent,
|
|
@@ -698,7 +668,7 @@ export function NavigationProvider({ children }: Props) {
|
|
|
698
668
|
const getStackForPathname = React.useCallback((pathname: string):
|
|
699
669
|
| NavigationScreenState
|
|
700
670
|
| undefined => {
|
|
701
|
-
const stack =
|
|
671
|
+
const stack = [...stateRef?.current?.stack?.mainStack];
|
|
702
672
|
|
|
703
673
|
const currentStack = stack.find(({ route }) => route === pathname);
|
|
704
674
|
|
|
@@ -730,7 +700,7 @@ export function NavigationProvider({ children }: Props) {
|
|
|
730
700
|
modalData: state.stack.modal?.state ?? null,
|
|
731
701
|
openModal,
|
|
732
702
|
dismissModal,
|
|
733
|
-
|
|
703
|
+
getModalState,
|
|
734
704
|
openModalBottomSheet,
|
|
735
705
|
closeModalBottomSheet,
|
|
736
706
|
videoModalState: state.options.videoModal,
|
|
@@ -748,14 +718,7 @@ export function NavigationProvider({ children }: Props) {
|
|
|
748
718
|
getStack,
|
|
749
719
|
getStackForPathname,
|
|
750
720
|
}),
|
|
751
|
-
[
|
|
752
|
-
rivers,
|
|
753
|
-
plugins,
|
|
754
|
-
JSON.stringify(state),
|
|
755
|
-
modalState,
|
|
756
|
-
appLaunched,
|
|
757
|
-
startUpHooks,
|
|
758
|
-
]
|
|
721
|
+
[rivers, plugins, JSON.stringify(state), appLaunched, startUpHooks]
|
|
759
722
|
);
|
|
760
723
|
|
|
761
724
|
// when running the tests, we pass the dispatch function
|
|
@@ -11,7 +11,9 @@ Object {
|
|
|
11
11
|
"presentationStyle": "overFullScreen",
|
|
12
12
|
"transparent": true,
|
|
13
13
|
},
|
|
14
|
-
"props": Object {
|
|
14
|
+
"props": Object {
|
|
15
|
+
"screenData": Object {},
|
|
16
|
+
},
|
|
15
17
|
"screen": Object {
|
|
16
18
|
"id": "A1234",
|
|
17
19
|
"navigations": Array [],
|
|
@@ -30,26 +32,7 @@ Object {
|
|
|
30
32
|
}
|
|
31
33
|
`;
|
|
32
34
|
|
|
33
|
-
exports[`<NavigationProvider /> modal feature sets the modalState when opening a modal 1`] = `
|
|
34
|
-
Object {
|
|
35
|
-
"options": Object {
|
|
36
|
-
"animated": true,
|
|
37
|
-
"animationType": "slide",
|
|
38
|
-
"onDismiss": [Function],
|
|
39
|
-
"onRequestClose": [Function],
|
|
40
|
-
"onShow": [Function],
|
|
41
|
-
"presentationStyle": "overFullScreen",
|
|
42
|
-
"transparent": true,
|
|
43
|
-
},
|
|
44
|
-
"props": Object {},
|
|
45
|
-
"screen": Object {
|
|
46
|
-
"id": "A1234",
|
|
47
|
-
"navigations": Array [],
|
|
48
|
-
"ui_components": Array [],
|
|
49
|
-
},
|
|
50
|
-
"visible": true,
|
|
51
|
-
}
|
|
52
|
-
`;
|
|
35
|
+
exports[`<NavigationProvider /> modal feature sets the modalState when opening a modal 1`] = `undefined`;
|
|
53
36
|
|
|
54
37
|
exports[`<NavigationProvider /> modal feature should reset state to initial when dismissing a modal ( closeModalBottomSheet ) opened by openModalBottomSheet 1`] = `
|
|
55
38
|
Object {
|
|
@@ -552,7 +552,7 @@ describe("<NavigationProvider />", () => {
|
|
|
552
552
|
|
|
553
553
|
const view = wrapper.root.findByType(View);
|
|
554
554
|
act(() => view.props.navigator.openModal({ item: rivers.A1234 }));
|
|
555
|
-
expect(view.props.navigator.
|
|
555
|
+
expect(view.props.navigator.get).toMatchSnapshot();
|
|
556
556
|
});
|
|
557
557
|
|
|
558
558
|
it("removes the visible flag when dismissing a modal", () => {
|
|
@@ -568,10 +568,10 @@ describe("<NavigationProvider />", () => {
|
|
|
568
568
|
|
|
569
569
|
const view = wrapper.root.findByType(View);
|
|
570
570
|
act(() => view.props.navigator.openModal({ item: rivers.A1234 }));
|
|
571
|
-
expect(view.props.navigator.
|
|
571
|
+
expect(view.props.navigator.getModalState()).toMatchSnapshot();
|
|
572
572
|
act(() => view.props.navigator.dismissModal());
|
|
573
|
-
expect(view.props.navigator.
|
|
574
|
-
expect(view.props.navigator.
|
|
573
|
+
expect(view.props.navigator.getModalState().visible).toBeFalsy();
|
|
574
|
+
expect(view.props.navigator.getModalState()).toMatchSnapshot();
|
|
575
575
|
});
|
|
576
576
|
|
|
577
577
|
it("should reset state to initial when dismissing a modal ( closeModalBottomSheet ) opened by openModalBottomSheet", () => {
|
|
@@ -594,9 +594,9 @@ describe("<NavigationProvider />", () => {
|
|
|
594
594
|
})
|
|
595
595
|
);
|
|
596
596
|
|
|
597
|
-
expect(view.props.navigator.
|
|
597
|
+
expect(view.props.navigator.getModalState()).toMatchSnapshot();
|
|
598
598
|
act(() => view.props.navigator.closeModalBottomSheet());
|
|
599
|
-
expect(view.props.navigator.
|
|
599
|
+
expect(view.props.navigator.getModalState()).toMatchSnapshot();
|
|
600
600
|
});
|
|
601
601
|
});
|
|
602
602
|
});
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`<RouteManager /> renders correctly 1`] = `
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
<RNCSafeAreaProvider
|
|
5
|
+
onInsetsChange={[Function]}
|
|
6
|
+
style={
|
|
7
|
+
Array [
|
|
8
|
+
Object {
|
|
9
|
+
"flex": 1,
|
|
10
|
+
},
|
|
11
|
+
undefined,
|
|
12
|
+
]
|
|
9
13
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
>
|
|
15
|
+
<View
|
|
16
|
+
comp="river"
|
|
17
|
+
testID="river"
|
|
18
|
+
/>
|
|
19
|
+
</RNCSafeAreaProvider>
|
|
13
20
|
`;
|
|
@@ -1,31 +1,42 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { shallow } from "enzyme";
|
|
3
|
-
import { shallowToJson } from "enzyme-to-json";
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
const {
|
|
4
|
+
ScreenResolver,
|
|
5
|
+
} = require("@applicaster/zapp-react-native-ui-components/Components/ScreenResolver");
|
|
6
|
+
|
|
7
|
+
import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
|
|
6
8
|
|
|
7
9
|
jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
|
|
8
10
|
useNavigation: jest.fn(() => ({
|
|
9
11
|
screenId: { id: "A1234" },
|
|
10
12
|
currentRoute: "/river/A1234",
|
|
11
13
|
screenData: { id: "A1234" },
|
|
14
|
+
videoModalState: { mode: "WINDOWED" },
|
|
15
|
+
})),
|
|
16
|
+
useRoute: jest.fn(() => ({
|
|
17
|
+
pathname: "/river/A1234",
|
|
18
|
+
screenData: { id: "A1234-screenData" },
|
|
12
19
|
})),
|
|
13
20
|
}));
|
|
14
21
|
|
|
15
22
|
const { RouteManager } = require("../");
|
|
16
23
|
|
|
17
24
|
describe("<RouteManager />", () => {
|
|
18
|
-
|
|
25
|
+
let wrapper;
|
|
26
|
+
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
wrapper = renderWithProviders(<RouteManager />);
|
|
29
|
+
});
|
|
19
30
|
|
|
20
31
|
it("renders correctly", () => {
|
|
21
|
-
expect(
|
|
32
|
+
expect(wrapper.toJSON()).toMatchSnapshot();
|
|
22
33
|
});
|
|
23
34
|
|
|
24
35
|
it("passes the correct props to ScreenResolver", () => {
|
|
25
|
-
expect(wrapper.
|
|
36
|
+
expect(wrapper.UNSAFE_getByType(ScreenResolver).props).toEqual({
|
|
26
37
|
screenType: "river",
|
|
27
38
|
screenId: "A1234",
|
|
28
|
-
screenData: { id: "A1234" },
|
|
39
|
+
screenData: { id: "A1234-screenData" },
|
|
29
40
|
});
|
|
30
41
|
});
|
|
31
42
|
});
|
|
@@ -4,7 +4,7 @@ import * as R from "ramda";
|
|
|
4
4
|
import { getPathAttributes } from "@applicaster/zapp-react-native-utils/navigationUtils";
|
|
5
5
|
import { ScreenResolver } from "@applicaster/zapp-react-native-ui-components/Components/ScreenResolver";
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
|
|
8
8
|
|
|
9
9
|
type Props = any;
|
|
10
10
|
|
|
@@ -14,7 +14,8 @@ type Props = any;
|
|
|
14
14
|
* @param {Props}: see props above
|
|
15
15
|
*/
|
|
16
16
|
export const RouteManager = React.memo(function RouteManager(props: Props) {
|
|
17
|
-
const {
|
|
17
|
+
const { pathname, screenData } = useRoute();
|
|
18
|
+
|
|
18
19
|
const pathAttributes = getPathAttributes({ pathname });
|
|
19
20
|
|
|
20
21
|
if (!pathAttributes.length) {
|
|
@@ -3,7 +3,7 @@ import * as React from "react";
|
|
|
3
3
|
|
|
4
4
|
import { isEqual } from "@applicaster/zapp-react-native-utils/equalUtils";
|
|
5
5
|
import { ThemeContext } from "@applicaster/zapp-react-native-utils/theme";
|
|
6
|
-
import {
|
|
6
|
+
import { useIsTablet } from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
7
7
|
import {
|
|
8
8
|
mapKeys,
|
|
9
9
|
partitionByKeys,
|
|
@@ -36,7 +36,7 @@ function populateTheme(plugin) {
|
|
|
36
36
|
|
|
37
37
|
const TABLET_PREFIX = "tablet_";
|
|
38
38
|
|
|
39
|
-
const prepareForTablet = (
|
|
39
|
+
const prepareForTablet = (isTablet) => (themeProps) => {
|
|
40
40
|
const [tabletThemeProps, mobileTheme] = partitionByKeys(
|
|
41
41
|
R.compose(R.startsWith(TABLET_PREFIX), R.head),
|
|
42
42
|
themeProps
|
|
@@ -63,12 +63,12 @@ const prepareForTablet = (dimensions) => (themeProps) => {
|
|
|
63
63
|
R.omit(["tablet_theme"])
|
|
64
64
|
)(tabletThemeProps);
|
|
65
65
|
|
|
66
|
-
return
|
|
66
|
+
return isTablet ? tabletTheme : mobileTheme;
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
const selectThemes = (
|
|
69
|
+
const selectThemes = (isTablet, plugins) =>
|
|
70
70
|
R.compose(
|
|
71
|
-
R.map(prepareForTablet(
|
|
71
|
+
R.map(prepareForTablet(isTablet)),
|
|
72
72
|
R.fromPairs,
|
|
73
73
|
R.reject(R.isNil),
|
|
74
74
|
R.map(populateTheme),
|
|
@@ -97,20 +97,13 @@ const MemoizedThemeContextProvider = React.memo(
|
|
|
97
97
|
);
|
|
98
98
|
|
|
99
99
|
function ThemeManagerComponent({ children, plugins }: Props) {
|
|
100
|
-
const
|
|
101
|
-
|
|
100
|
+
const isTablet = useIsTablet();
|
|
101
|
+
|
|
102
|
+
const themes = selectThemes(isTablet, plugins);
|
|
102
103
|
|
|
103
104
|
const [selectedThemeId, setSelectedThemeId] =
|
|
104
105
|
React.useState(DEFAULT_THEME_ID);
|
|
105
106
|
|
|
106
|
-
React.useEffect(() => {
|
|
107
|
-
setThemes((oldThemes) => {
|
|
108
|
-
const newThemes = selectThemes(dimensions, plugins);
|
|
109
|
-
|
|
110
|
-
return R.equals(oldThemes, newThemes) ? oldThemes : newThemes;
|
|
111
|
-
});
|
|
112
|
-
}, [plugins, dimensions]);
|
|
113
|
-
|
|
114
107
|
return (
|
|
115
108
|
<MemoizedThemeContextProvider
|
|
116
109
|
themes={themes}
|
|
@@ -15,6 +15,11 @@ jest.mock(
|
|
|
15
15
|
// This is meant to silence errors with react-native-gesture-handler
|
|
16
16
|
jest.mock("../ModalProvider/ModalBottomSheet", () => () => null);
|
|
17
17
|
|
|
18
|
+
jest.mock(
|
|
19
|
+
"@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation",
|
|
20
|
+
() => () => null
|
|
21
|
+
);
|
|
22
|
+
|
|
18
23
|
jest.mock("react-native-safe-area-context", () => ({
|
|
19
24
|
SafeAreaProvider: jest.fn(
|
|
20
25
|
() =>
|
package/App/index.tsx
CHANGED
|
@@ -5,11 +5,6 @@ import {
|
|
|
5
5
|
initialWindowMetrics,
|
|
6
6
|
} from "react-native-safe-area-context";
|
|
7
7
|
|
|
8
|
-
import type {
|
|
9
|
-
AppComponentProps,
|
|
10
|
-
ZappApp,
|
|
11
|
-
} from "@applicaster/zapp-react-native-flow-types";
|
|
12
|
-
|
|
13
8
|
import { ErrorBoundary } from "./ErrorBoundary";
|
|
14
9
|
import { RouteManager } from "./RouteManager";
|
|
15
10
|
import { withNavigationProvider } from "./NavigationProvider";
|
|
@@ -8,11 +8,6 @@ import * as React from "react";
|
|
|
8
8
|
import * as R from "ramda";
|
|
9
9
|
import { Dimensions } from "react-native";
|
|
10
10
|
|
|
11
|
-
import type {
|
|
12
|
-
AppComponentProps,
|
|
13
|
-
ZappAppConfig,
|
|
14
|
-
} from "@applicaster/zapp-react-native-flow-types";
|
|
15
|
-
|
|
16
11
|
import {
|
|
17
12
|
createZappReduxStore,
|
|
18
13
|
loadAppContextData,
|
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.6254111934",
|
|
4
4
|
"description": "Core package for Applicaster's Quick Brick App",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -30,15 +30,15 @@
|
|
|
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.6254111934",
|
|
34
|
+
"@applicaster/quick-brick-core-plugins": "12.0.0-alpha.6254111934",
|
|
35
|
+
"@applicaster/zapp-pipes-v2-client": "12.0.0-alpha.6254111934",
|
|
36
|
+
"@applicaster/zapp-react-native-bridge": "12.0.0-alpha.6254111934",
|
|
37
|
+
"@applicaster/zapp-react-native-redux": "12.0.0-alpha.6254111934",
|
|
38
|
+
"@applicaster/zapp-react-native-ui-components": "12.0.0-alpha.6254111934",
|
|
39
|
+
"@applicaster/zapp-react-native-utils": "12.0.0-alpha.6254111934",
|
|
40
40
|
"atob": "^2.1.2",
|
|
41
|
-
"axios": "^0.
|
|
41
|
+
"axios": "^0.28.0",
|
|
42
42
|
"btoa": "^1.2.1",
|
|
43
43
|
"camelize": "^1.0.0",
|
|
44
44
|
"md5": "^2.3.0",
|
|
@@ -58,7 +58,6 @@
|
|
|
58
58
|
"react-native-safe-area-context": "*"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@applicaster/zapp-react-native-flow-types": "1.5.0",
|
|
62
61
|
"@types/react-native": "0.69.6",
|
|
63
62
|
"@types/tizen-tv-webapis": "^2.0.1",
|
|
64
63
|
"nock": "^10.0.0",
|