@applicaster/zapp-react-native-ui-components 13.0.0-alpha.7330390362 → 13.0.0-alpha.7620873141
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/AppContainer/__tests__/AppContainer.test.js +4 -6
- package/Components/AudioPlayer/AudioPlayer.tsx +7 -0
- package/Components/AudioPlayer/__tests__/Runtime.test.js +5 -8
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +54 -111
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +36 -20
- package/Components/AudioPlayer/__tests__/artWork.test.js +3 -5
- package/Components/AudioPlayer/__tests__/audioPlayer.test.js +3 -5
- package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +7 -8
- package/Components/AudioPlayer/__tests__/channel.test.js +3 -5
- package/Components/AudioPlayer/__tests__/summary.test.js +3 -5
- package/Components/AudioPlayer/__tests__/title.test.js +3 -5
- package/Components/AudioPlayer/helpers.tsx +1 -0
- package/Components/BaseFocusable/index.tsx +1 -2
- package/Components/Cell/Cell.tsx +4 -13
- package/Components/Cell/CellWithFocusable.tsx +22 -15
- package/Components/Cell/CellWrapper.tsx +18 -0
- package/Components/Cell/TvOSCellComponent.tsx +20 -22
- package/Components/Cell/index.js +3 -1
- package/Components/Cell/styles.ts +17 -0
- package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +46 -48
- package/Components/CellRendererResolver/index.ts +2 -1
- package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +1 -42
- package/Components/ComponentResolver/__tests__/componentResolver.test.js +16 -22
- package/Components/ContentScreen/__tests__/contentScreen.test.js +3 -3
- package/Components/ErrorScreen/index.tsx +14 -6
- package/Components/Focusable/Focusable.tsx +1 -0
- package/Components/Focusable/FocusableTvOS.tsx +5 -1
- package/Components/Focusable/index.android.tsx +10 -3
- package/Components/FocusableCell/index.tsx +1 -1
- package/Components/FocusableGroup/FocusableTvOS.tsx +34 -86
- package/Components/FocusableGroup/index.tsx +0 -3
- package/Components/FocusableList/index.tsx +26 -9
- package/Components/FocusableScrollView/index.tsx +43 -13
- package/Components/HandlePlayable/HandlePlayable.tsx +21 -27
- package/Components/Layout/TV/LayoutBackground.tsx +28 -0
- package/Components/Layout/TV/NavBarContainer.tsx +19 -23
- package/Components/Layout/TV/ScreenContainer.tsx +8 -2
- package/Components/Layout/TV/ScreenLayoutContextProvider.tsx +5 -0
- package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +2 -1
- package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +3 -2
- package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +3 -2
- package/Components/Layout/TV/__tests__/__snapshots__/index.test.tsx.snap +15 -10
- package/Components/Layout/TV/__tests__/index.test.tsx +8 -2
- package/Components/Layout/TV/index.tsx +6 -20
- package/Components/Layout/TV/index.web.tsx +4 -1
- package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -3
- package/Components/MasterCell/DefaultComponents/Image/Image.android.tsx +0 -6
- package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +4 -9
- package/Components/MasterCell/DefaultComponents/Image/hooks/useImage.ts +11 -7
- package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +2 -2
- package/Components/MasterCell/DefaultComponents/tv/TvActionButtons/const.ts +3 -0
- package/Components/MasterCell/DefaultComponents/tv/TvActionButtons/index.ts +6 -6
- package/Components/MasterCell/SharedUI/ProgressBar/hooks/useFillInPercent.ts +2 -8
- package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +4 -12
- package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +0 -229
- package/Components/MasterCell/__tests__/elementMapper.test.js +18 -5
- package/Components/MasterCell/__tests__/masterCell.test.js +26 -26
- package/Components/MasterCell/utils/behaviorProvider.ts +136 -0
- package/Components/MasterCell/utils/index.ts +8 -134
- package/Components/ModalComponent/BottomSheetModalContent.tsx +45 -19
- package/Components/ModalComponent/Button/Item.tsx +6 -5
- package/Components/ModalComponent/Button/assets.ts +1 -1
- package/Components/ModalComponent/Button/index.tsx +30 -43
- package/Components/ModalComponent/utils.ts +55 -7
- package/Components/OfflineHandler/NotificationView/NotificationView.lg.tsx +2 -2
- package/Components/OfflineHandler/NotificationView/NotificationView.samsung.tsx +2 -2
- package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +0 -5
- package/Components/OfflineHandler/utils/index.ts +1 -1
- package/Components/PlayerContainer/PlayerContainer.tsx +40 -14
- package/Components/PlayerContainer/ProgramInfo/index.tsx +2 -2
- package/Components/PlayerImageBackground/index.tsx +1 -1
- package/Components/River/ComponentsMap/ComponentsMap.tsx +3 -0
- package/Components/River/ComponentsMap/hooks/useLoadingState.ts +3 -3
- package/Components/River/RiverItem.tsx +2 -1
- package/Components/River/TV/index.tsx +6 -1
- package/Components/River/__tests__/__snapshots__/river.test.js.snap +20 -82
- package/Components/River/__tests__/river.test.js +75 -40
- package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +11 -4
- package/Components/RouteManager/__tests__/routeManager.test.js +29 -14
- package/Components/RouteManager/__tests__/testId.test.js +8 -6
- package/Components/Screen/TV/index.web.tsx +5 -6
- package/Components/Screen/hooks.ts +3 -6
- package/Components/Screen/index.tsx +4 -4
- package/Components/ScreenResolver/__tests__/screenResolver.test.js +91 -70
- package/Components/Tabs/Tab.tsx +5 -3
- package/Components/TextInputTv/index.tsx +2 -1
- package/Components/TopMarginApplicator/TopMarginApplicator.tsx +2 -3
- package/Components/TrackedView/index.tsx +1 -0
- package/Components/Transitioner/AnimationManager.js +15 -15
- package/Components/Transitioner/Scene.tsx +1 -1
- package/Components/Transitioner/Transitioner.tsx +3 -3
- package/Components/Transitioner/__tests__/Scene.test.js +25 -14
- package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +12 -68
- package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +2 -2
- package/Components/Transitioner/__tests__/transitioner.test.js +13 -4
- package/Components/VideoLive/PlayerLiveImageComponent.tsx +7 -3
- package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +1 -0
- package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +1 -1
- package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +46 -30
- package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +3 -3
- package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +45 -20
- package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +10 -3
- package/Components/VideoModal/ModalAnimation/__tests__/getMoveUpValue.test.ts +108 -0
- package/Components/VideoModal/ModalAnimation/const.ts +5 -0
- package/Components/VideoModal/ModalAnimation/index.ts +2 -0
- package/Components/VideoModal/ModalAnimation/utils.ts +36 -0
- package/Components/VideoModal/PlayerDetails.tsx +18 -10
- package/Components/VideoModal/PlayerWrapper.tsx +28 -5
- package/Components/VideoModal/VideoModal.tsx +19 -4
- package/Components/VideoModal/__tests__/__snapshots__/PlayerDetails.test.tsx.snap +2 -40
- package/Components/VideoModal/utils.ts +3 -4
- package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +24 -36
- package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -18
- package/Components/Viewport/__tests__/utils.test.js +5 -4
- package/Components/ZappUIComponent/Placeholder.tsx +3 -1
- package/Components/ZappUIComponent/__tests__/{ZappUIComponent.test.js → ZappUIComponent.test.tsx} +26 -10
- package/Components/ZappUIComponent/index.tsx +4 -17
- package/Components/default-cell-renderer/__tests__/defaultCellRenderer.test.tsx +20 -17
- package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/__tests__/DefaultCell.test.tsx +15 -11
- package/Contexts/ComponentsMapOffsetContext/index.tsx +49 -0
- package/Contexts/FocusableGroupContext/withFocusableContext.tsx +4 -10
- package/Contexts/HeaderOffsetContext/index.tsx +4 -6
- package/Contexts/ScreenContext/index.tsx +3 -10
- package/Contexts/ScreenLayoutContext/index.tsx +5 -3
- package/Decorators/Navigator/__tests__/navigator.test.js +16 -16
- package/Decorators/Navigator/index.tsx +1 -1
- package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +18 -24
- package/Decorators/RiverResolver/index.tsx +6 -8
- package/Decorators/ZappPipesDataConnector/__tests__/zappPipesDataConnector.test.js +29 -22
- package/Decorators/ZappPipesDataConnector/index.tsx +4 -30
- package/package.json +7 -11
- package/tsconfig.json +2 -3
- package/.babelrc +0 -8
- package/Components/Cell/CellStyles/FallbackCellStyle/index.js +0 -157
- package/Components/Cell/CellStyles/Hero/index.js +0 -111
- package/Components/Cell/CellStyles/ScreenSelector/index.js +0 -68
- package/Components/Cell/CellStyles/cellStylesResolver.ts +0 -19
- package/Components/Cell/CellStyles/colors.js +0 -40
- package/Components/Cell/CellStyles/index.js +0 -15
- package/Components/Cell/CellWithFocusable.ios.tsx +0 -126
- package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +0 -53
- package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +0 -17
- package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +0 -17
- package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +0 -91
- package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +0 -338
- package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +0 -18
- package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +0 -28
|
@@ -5,6 +5,14 @@ import { render } from "@testing-library/react-native";
|
|
|
5
5
|
import { Provider } from "react-redux";
|
|
6
6
|
import { NavigationContext } from "@applicaster/zapp-react-native-ui-components/Contexts/NavigationContext";
|
|
7
7
|
import configureStore from "redux-mock-store";
|
|
8
|
+
import Layout from "../index.web";
|
|
9
|
+
|
|
10
|
+
// mock useTheme to provide app_background_color
|
|
11
|
+
jest.mock("@applicaster/zapp-react-native-utils/theme", () => ({
|
|
12
|
+
useTheme: () => ({
|
|
13
|
+
app_background_color: "#000000",
|
|
14
|
+
}),
|
|
15
|
+
}));
|
|
8
16
|
|
|
9
17
|
const withoutChildren = omit(["children"]);
|
|
10
18
|
|
|
@@ -16,8 +24,6 @@ jest.mock("../../../Screen/TV/index.web", () => {
|
|
|
16
24
|
};
|
|
17
25
|
});
|
|
18
26
|
|
|
19
|
-
const Layout = require("../index.web").default;
|
|
20
|
-
|
|
21
27
|
const mockStore = configureStore()({
|
|
22
28
|
appState: { appReady: true },
|
|
23
29
|
});
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as R from "ramda";
|
|
3
2
|
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
|
|
4
3
|
import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
|
|
5
|
-
import { useTheme } from "@applicaster/zapp-react-native-utils/theme";
|
|
6
4
|
|
|
7
|
-
import { getBackgroundImageUrl } from "../utils";
|
|
8
5
|
import { LayoutContainer } from "./LayoutContainer";
|
|
9
6
|
import { ScreenContainer } from "./ScreenContainer";
|
|
10
7
|
|
|
@@ -12,6 +9,7 @@ import { ScreenLayoutContextProvider } from "./ScreenLayoutContextProvider";
|
|
|
12
9
|
import { PathnameContext } from "../../../Contexts/PathnameContext";
|
|
13
10
|
import { ScreenDataContext } from "../../../Contexts/ScreenDataContext";
|
|
14
11
|
import { ScreenContextProvider } from "../../../Contexts/ScreenContext";
|
|
12
|
+
import { LayoutBackground } from "./LayoutBackground";
|
|
15
13
|
|
|
16
14
|
type Components = {
|
|
17
15
|
NavBar: React.ComponentType<any>;
|
|
@@ -19,7 +17,6 @@ type Components = {
|
|
|
19
17
|
};
|
|
20
18
|
|
|
21
19
|
type ComponentsExtraProps = {
|
|
22
|
-
Background?: Record<string, any>;
|
|
23
20
|
NavBar?: Record<string, any>;
|
|
24
21
|
};
|
|
25
22
|
|
|
@@ -31,17 +28,10 @@ type Props = {
|
|
|
31
28
|
|
|
32
29
|
const Layout = ({ Components, ComponentsExtraProps, children }: Props) => {
|
|
33
30
|
const navigator = useNavigation();
|
|
34
|
-
const theme = useTheme();
|
|
35
31
|
|
|
36
|
-
const { appState: { appReady = false } = {}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const backgroundColor = React.useMemo(() => theme.app_background_color, []);
|
|
40
|
-
|
|
41
|
-
const backgroundImageUrl = React.useMemo(
|
|
42
|
-
() => getBackgroundImageUrl(remoteConfigurations),
|
|
43
|
-
[remoteConfigurations]
|
|
44
|
-
);
|
|
32
|
+
const { appState: { appReady = false } = {} } = usePickFromState([
|
|
33
|
+
"appState",
|
|
34
|
+
]);
|
|
45
35
|
|
|
46
36
|
if (!appReady) {
|
|
47
37
|
return null;
|
|
@@ -50,11 +40,7 @@ const Layout = ({ Components, ComponentsExtraProps, children }: Props) => {
|
|
|
50
40
|
return (
|
|
51
41
|
<LayoutContainer>
|
|
52
42
|
<ScreenLayoutContextProvider>
|
|
53
|
-
<Components.Background
|
|
54
|
-
backgroundColor={backgroundColor}
|
|
55
|
-
backgroundImageUrl={backgroundImageUrl}
|
|
56
|
-
{...R.omit(["ref"])(ComponentsExtraProps?.Background)}
|
|
57
|
-
>
|
|
43
|
+
<LayoutBackground Background={Components.Background}>
|
|
58
44
|
<ScreenDataContext.Provider value={navigator.data}>
|
|
59
45
|
<PathnameContext.Provider value={navigator.currentRoute}>
|
|
60
46
|
<ScreenContextProvider pathname={navigator.currentRoute}>
|
|
@@ -67,7 +53,7 @@ const Layout = ({ Components, ComponentsExtraProps, children }: Props) => {
|
|
|
67
53
|
</ScreenContextProvider>
|
|
68
54
|
</PathnameContext.Provider>
|
|
69
55
|
</ScreenDataContext.Provider>
|
|
70
|
-
</
|
|
56
|
+
</LayoutBackground>
|
|
71
57
|
</ScreenLayoutContextProvider>
|
|
72
58
|
</LayoutContainer>
|
|
73
59
|
);
|
|
@@ -5,6 +5,7 @@ import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
|
|
|
5
5
|
|
|
6
6
|
import { ScreenLayoutContextProvider } from "./ScreenLayoutContextProvider";
|
|
7
7
|
import { StackNavigator } from "../../Navigator";
|
|
8
|
+
import { LayoutBackground } from "./LayoutBackground";
|
|
8
9
|
|
|
9
10
|
type Components = {
|
|
10
11
|
NavBar: React.ComponentType<any>;
|
|
@@ -25,7 +26,9 @@ const Layout = ({ Components }: Props) => {
|
|
|
25
26
|
|
|
26
27
|
return (
|
|
27
28
|
<ScreenLayoutContextProvider>
|
|
28
|
-
<
|
|
29
|
+
<LayoutBackground Background={Components.Background}>
|
|
30
|
+
<StackNavigator Components={Components} />
|
|
31
|
+
</LayoutBackground>
|
|
29
32
|
</ScreenLayoutContextProvider>
|
|
30
33
|
);
|
|
31
34
|
};
|
|
@@ -4,7 +4,6 @@ import { TouchableOpacity, ViewStyle } from "react-native";
|
|
|
4
4
|
import { useActions } from "@applicaster/zapp-react-native-utils/reactHooks/actions";
|
|
5
5
|
|
|
6
6
|
import Image from "./Image";
|
|
7
|
-
|
|
8
7
|
type Props = {
|
|
9
8
|
item: ZappEntry | ZappFeed;
|
|
10
9
|
flavour?: "flavour_1" | "flavour_2";
|
|
@@ -69,7 +68,7 @@ export function ActionButton(props: Props) {
|
|
|
69
68
|
if (!((actionDisabled || !actionContext) && actionState !== null)) {
|
|
70
69
|
setActionState(actionContext.initialEntryState(item));
|
|
71
70
|
}
|
|
72
|
-
}, [actionDisabled, item?.id, actionContext, action]);
|
|
71
|
+
}, [actionDisabled, item?.id, actionContext, action, setActionState]);
|
|
73
72
|
|
|
74
73
|
const onPress = useCallback(() => {
|
|
75
74
|
actionContext.invokeAction(item, {
|
|
@@ -85,7 +84,7 @@ export function ActionButton(props: Props) {
|
|
|
85
84
|
setActionState(state);
|
|
86
85
|
});
|
|
87
86
|
}
|
|
88
|
-
}, [item?.id]);
|
|
87
|
+
}, [item?.id, setActionState, actionContext]);
|
|
89
88
|
|
|
90
89
|
if (actionDisabled || !actionContext) return null;
|
|
91
90
|
const AssetComponent = actionState?.asset;
|
|
@@ -43,8 +43,6 @@ export default function Image({
|
|
|
43
43
|
// toFiniteNumberWithDefault(0, style.height)
|
|
44
44
|
// );
|
|
45
45
|
|
|
46
|
-
// const index = R.pathOr(-1, ["item", "index"], otherProps);
|
|
47
|
-
|
|
48
46
|
const source = useImageSourceWithDefault({
|
|
49
47
|
uri,
|
|
50
48
|
entry,
|
|
@@ -53,10 +51,6 @@ export default function Image({
|
|
|
53
51
|
otherProps,
|
|
54
52
|
});
|
|
55
53
|
|
|
56
|
-
// const source = {
|
|
57
|
-
// uri: `https://placehold.co/200x200/orange/white.png?text=${index}`,
|
|
58
|
-
// };
|
|
59
|
-
|
|
60
54
|
const onError = React.useCallback(() => {
|
|
61
55
|
appendFailedToLoadUri(uri);
|
|
62
56
|
setShowDefault(true);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { Image as RnImage, ImageStyle } from "react-native";
|
|
3
|
-
import
|
|
3
|
+
import { equals, omit } from "ramda";
|
|
4
4
|
|
|
5
5
|
import { useImageSource } from "./hooks";
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ type Props = Record<string, any> & {
|
|
|
17
17
|
withDimensions: (source: Source) => Source;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
const MemoizedImage = React.memo(RnImage,
|
|
20
|
+
const MemoizedImage = React.memo(RnImage, equals);
|
|
21
21
|
|
|
22
22
|
function Image({
|
|
23
23
|
style,
|
|
@@ -31,12 +31,6 @@ function Image({
|
|
|
31
31
|
|
|
32
32
|
const source = useImageSource({ uri, entry, otherProps });
|
|
33
33
|
|
|
34
|
-
// const index = R.pathOr(-1, ["item", "index"], otherProps);
|
|
35
|
-
|
|
36
|
-
// const source = {
|
|
37
|
-
// uri: `https://placehold.co/200x200/orange/white.png?text=${index}`,
|
|
38
|
-
// };
|
|
39
|
-
|
|
40
34
|
React.useEffect(() => {
|
|
41
35
|
// reset error state on URI change as the error is referencing previous uri
|
|
42
36
|
setErrorState(null);
|
|
@@ -50,11 +44,12 @@ function Image({
|
|
|
50
44
|
|
|
51
45
|
return (
|
|
52
46
|
<MemoizedImage
|
|
47
|
+
key={_source?.uri || "no-image"}
|
|
53
48
|
style={style as ImageStyle}
|
|
54
49
|
onError={React.useCallback(() => setErrorState(true), [])}
|
|
55
50
|
// as we have defaults as "" for placeholder image, we need to pass undefined to source to not throw warnings
|
|
56
51
|
source={_source?.uri ? _source : undefined}
|
|
57
|
-
{...
|
|
52
|
+
{...omit(["source"], otherProps)}
|
|
58
53
|
/>
|
|
59
54
|
);
|
|
60
55
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import
|
|
2
|
+
import { path } from "ramda";
|
|
3
3
|
|
|
4
4
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
5
5
|
import { useActions } from "@applicaster/zapp-react-native-utils/reactHooks/actions";
|
|
@@ -7,9 +7,13 @@ import { extractAsset } from "./utils";
|
|
|
7
7
|
|
|
8
8
|
type Return = { uri: string } | null;
|
|
9
9
|
|
|
10
|
+
const getSourceContext = path(["source", "context"]);
|
|
11
|
+
const getSourceUri = path(["source", "uri"]);
|
|
12
|
+
const getState = path(["state"]);
|
|
13
|
+
|
|
10
14
|
export const useImageSource = ({ uri, entry, otherProps }): Return => {
|
|
11
|
-
const uriContext =
|
|
12
|
-
const uriState =
|
|
15
|
+
const uriContext = getSourceContext(otherProps);
|
|
16
|
+
const uriState = getState(otherProps);
|
|
13
17
|
|
|
14
18
|
const action = useActions(uriContext);
|
|
15
19
|
|
|
@@ -34,7 +38,7 @@ export const useImageSource = ({ uri, entry, otherProps }): Return => {
|
|
|
34
38
|
return { uri };
|
|
35
39
|
}
|
|
36
40
|
|
|
37
|
-
const uriFromSource =
|
|
41
|
+
const uriFromSource = getSourceUri(otherProps);
|
|
38
42
|
|
|
39
43
|
if (uriFromSource) {
|
|
40
44
|
return { uri: uriFromSource };
|
|
@@ -56,7 +60,7 @@ const getSource = (uri, showDefault, placeholderImage, otherProps) => {
|
|
|
56
60
|
return { uri };
|
|
57
61
|
}
|
|
58
62
|
|
|
59
|
-
const uriFromSource =
|
|
63
|
+
const uriFromSource = getSourceUri(otherProps);
|
|
60
64
|
|
|
61
65
|
if (uriFromSource) {
|
|
62
66
|
return { uri: uriFromSource };
|
|
@@ -72,8 +76,8 @@ export const useImageSourceWithDefault = ({
|
|
|
72
76
|
placeholderImage,
|
|
73
77
|
otherProps,
|
|
74
78
|
}): Return => {
|
|
75
|
-
const uriContext =
|
|
76
|
-
const uriState =
|
|
79
|
+
const uriContext = getSourceContext(otherProps);
|
|
80
|
+
const uriState = getState(otherProps);
|
|
77
81
|
|
|
78
82
|
const action = useActions(uriContext);
|
|
79
83
|
|
|
@@ -244,7 +244,7 @@ const LiveImageComponent = (props: LiveImageProps) => {
|
|
|
244
244
|
return (
|
|
245
245
|
<>
|
|
246
246
|
<Image {...props} applyMaxSize />
|
|
247
|
-
{isShouldRender
|
|
247
|
+
{isShouldRender ? (
|
|
248
248
|
<View style={[style, positionAbsolute]}>
|
|
249
249
|
<PlayerLiveImage
|
|
250
250
|
uri={props.uri}
|
|
@@ -257,7 +257,7 @@ const LiveImageComponent = (props: LiveImageProps) => {
|
|
|
257
257
|
audioMutedByDefault={audio_muted_by_default}
|
|
258
258
|
/>
|
|
259
259
|
</View>
|
|
260
|
-
)}
|
|
260
|
+
) : null}
|
|
261
261
|
</>
|
|
262
262
|
);
|
|
263
263
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { times } from "@applicaster/zapp-react-native-utils/utils";
|
|
2
2
|
import { toNumberWithDefaultZero } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
3
3
|
|
|
4
4
|
import { Button } from "./Button";
|
|
@@ -9,13 +9,14 @@ import {
|
|
|
9
9
|
} from "./utils";
|
|
10
10
|
|
|
11
11
|
import { compact } from "@applicaster/zapp-react-native-utils/cellUtils";
|
|
12
|
+
import { PREFIX, BUTTON_PREFIX } from "./const";
|
|
12
13
|
|
|
13
14
|
export {
|
|
14
15
|
insertButtonsBetweenLabels,
|
|
15
16
|
insertButtonsBetweenLabelContainers,
|
|
16
17
|
} from "./utils";
|
|
17
18
|
|
|
18
|
-
const
|
|
19
|
+
const buttonId = (index: number) => `${BUTTON_PREFIX}_${index}`;
|
|
19
20
|
|
|
20
21
|
type Props = {
|
|
21
22
|
value: Function;
|
|
@@ -42,7 +43,6 @@ export const TvActionButtons = ({
|
|
|
42
43
|
return null;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
const prefix1Button = `${PREFIX}_button_1`;
|
|
46
46
|
const independentStyles = value(`${PREFIX}_container_independent_styles`);
|
|
47
47
|
|
|
48
48
|
return {
|
|
@@ -73,11 +73,11 @@ export const TvActionButtons = ({
|
|
|
73
73
|
buttonsCount,
|
|
74
74
|
},
|
|
75
75
|
elements: compact(
|
|
76
|
-
|
|
77
|
-
const prefixSpecificButton =
|
|
76
|
+
times((index) => {
|
|
77
|
+
const prefixSpecificButton = buttonId(index + 1);
|
|
78
78
|
|
|
79
79
|
return Button({
|
|
80
|
-
prefix: independentStyles ? prefixSpecificButton :
|
|
80
|
+
prefix: independentStyles ? prefixSpecificButton : buttonId(1),
|
|
81
81
|
value,
|
|
82
82
|
platformValue,
|
|
83
83
|
pluginIdentifier: getPluginIdentifier(configuration, PREFIX, index),
|
|
@@ -34,7 +34,6 @@ export const useFillInPercent = (entry: ZappEntry): number => {
|
|
|
34
34
|
React.useState<number>(DEFAULT_FILL);
|
|
35
35
|
|
|
36
36
|
React.useEffect(() => {
|
|
37
|
-
// setup progress in UI on mount
|
|
38
37
|
getProgressValue(action, entry, (progress) => {
|
|
39
38
|
setFillInPercent(progress);
|
|
40
39
|
});
|
|
@@ -45,17 +44,12 @@ export const useFillInPercent = (entry: ZappEntry): number => {
|
|
|
45
44
|
return;
|
|
46
45
|
}
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
const unsubscribe = action?.addDataSourceListener?.(() => {
|
|
47
|
+
return action?.addDataSourceListener?.(() => {
|
|
50
48
|
getProgressValue(action, entry, (progress) => {
|
|
51
49
|
setFillInPercent(progress);
|
|
52
50
|
});
|
|
53
51
|
});
|
|
54
|
-
|
|
55
|
-
return () => {
|
|
56
|
-
unsubscribe?.();
|
|
57
|
-
};
|
|
58
|
-
}, [isActive]);
|
|
52
|
+
}, [isActive, action, entry, setFillInPercent]);
|
|
59
53
|
|
|
60
54
|
return fillInPercent;
|
|
61
55
|
};
|
|
@@ -3,12 +3,10 @@
|
|
|
3
3
|
exports[`elementMapper renders the nodes 1`] = `
|
|
4
4
|
<View>
|
|
5
5
|
<View
|
|
6
|
-
key="View_0"
|
|
7
6
|
testProp={true}
|
|
8
7
|
viewProp={true}
|
|
9
8
|
>
|
|
10
|
-
<
|
|
11
|
-
key="0"
|
|
9
|
+
<View
|
|
12
10
|
style={
|
|
13
11
|
{
|
|
14
12
|
"borderTopLeftRadius": 4,
|
|
@@ -20,7 +18,6 @@ exports[`elementMapper renders the nodes 1`] = `
|
|
|
20
18
|
uri="http://urlOfTheImage.net/img.png"
|
|
21
19
|
/>
|
|
22
20
|
<View
|
|
23
|
-
key="1"
|
|
24
21
|
style={
|
|
25
22
|
{
|
|
26
23
|
"height": 30,
|
|
@@ -32,8 +29,7 @@ exports[`elementMapper renders the nodes 1`] = `
|
|
|
32
29
|
testProp={true}
|
|
33
30
|
viewProp={true}
|
|
34
31
|
>
|
|
35
|
-
<
|
|
36
|
-
key="0"
|
|
32
|
+
<View
|
|
37
33
|
label="Test Entry"
|
|
38
34
|
numberOfLines={1}
|
|
39
35
|
style={
|
|
@@ -47,7 +43,6 @@ exports[`elementMapper renders the nodes 1`] = `
|
|
|
47
43
|
/>
|
|
48
44
|
</View>
|
|
49
45
|
<View
|
|
50
|
-
key="2"
|
|
51
46
|
style={
|
|
52
47
|
{
|
|
53
48
|
"height": 60,
|
|
@@ -58,8 +53,7 @@ exports[`elementMapper renders the nodes 1`] = `
|
|
|
58
53
|
}
|
|
59
54
|
testProp={true}
|
|
60
55
|
>
|
|
61
|
-
<
|
|
62
|
-
key="0"
|
|
56
|
+
<View
|
|
63
57
|
label="Summary of the test entry"
|
|
64
58
|
numberOfLines={2}
|
|
65
59
|
style={
|
|
@@ -74,7 +68,6 @@ exports[`elementMapper renders the nodes 1`] = `
|
|
|
74
68
|
/>
|
|
75
69
|
</View>
|
|
76
70
|
<View
|
|
77
|
-
key="3"
|
|
78
71
|
style={
|
|
79
72
|
{
|
|
80
73
|
"height": 42,
|
|
@@ -85,8 +78,7 @@ exports[`elementMapper renders the nodes 1`] = `
|
|
|
85
78
|
testProp={true}
|
|
86
79
|
viewProp={true}
|
|
87
80
|
>
|
|
88
|
-
<
|
|
89
|
-
key="0"
|
|
81
|
+
<View
|
|
90
82
|
style={
|
|
91
83
|
{
|
|
92
84
|
"height": 42,
|
|
@@ -1,35 +1,5 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
|
-
exports[`masterCellBuilder when using a custom data adapter renders correctly 1`] = `
|
|
4
|
-
<View
|
|
5
|
-
style={
|
|
6
|
-
{
|
|
7
|
-
"flex": 1,
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
>
|
|
11
|
-
<View
|
|
12
|
-
cellUUID="mocked-uuid"
|
|
13
|
-
key="0"
|
|
14
|
-
skipButtons={false}
|
|
15
|
-
style={
|
|
16
|
-
{
|
|
17
|
-
"backgroundColor": "#2F2F2F",
|
|
18
|
-
"borderRadius": 4,
|
|
19
|
-
"height": 436,
|
|
20
|
-
"marginRight": 20,
|
|
21
|
-
"width": 384,
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
wrapperRef={
|
|
25
|
-
{
|
|
26
|
-
"current": null,
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/>
|
|
30
|
-
</View>
|
|
31
|
-
`;
|
|
32
|
-
|
|
33
3
|
exports[`masterCellBuilder when using custom containerStyle renders correctly 1`] = `
|
|
34
4
|
<View
|
|
35
5
|
style={
|
|
@@ -73,202 +43,3 @@ exports[`masterCellBuilder when using custom default components renders correctl
|
|
|
73
43
|
/>
|
|
74
44
|
</mockConstructor>
|
|
75
45
|
`;
|
|
76
|
-
|
|
77
|
-
exports[`masterCellBuilder when using default options can be invoked as a React Component 1`] = `
|
|
78
|
-
<View
|
|
79
|
-
style={
|
|
80
|
-
{
|
|
81
|
-
"flex": 1,
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
>
|
|
85
|
-
<View
|
|
86
|
-
cellUUID="mocked-uuid"
|
|
87
|
-
key="0"
|
|
88
|
-
skipButtons={false}
|
|
89
|
-
style={
|
|
90
|
-
{
|
|
91
|
-
"backgroundColor": "#2F2F2F",
|
|
92
|
-
"borderRadius": 4,
|
|
93
|
-
"height": 436,
|
|
94
|
-
"marginRight": 20,
|
|
95
|
-
"width": 384,
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
whoAmI={
|
|
99
|
-
{
|
|
100
|
-
"contentType": "feed",
|
|
101
|
-
"state": "default",
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
wrapperRef={
|
|
105
|
-
{
|
|
106
|
-
"current": null,
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
>
|
|
110
|
-
<ImageContainer
|
|
111
|
-
cellUUID="mocked-uuid"
|
|
112
|
-
key="0"
|
|
113
|
-
numberOfLines={1}
|
|
114
|
-
skipButtons={false}
|
|
115
|
-
style={
|
|
116
|
-
{
|
|
117
|
-
"borderTopLeftRadius": 4,
|
|
118
|
-
"borderTopRightRadius": 4,
|
|
119
|
-
"height": 216,
|
|
120
|
-
"width": 384,
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
uri="http://urlOfTheImage.net/img.png"
|
|
124
|
-
/>
|
|
125
|
-
<View
|
|
126
|
-
cellUUID="mocked-uuid"
|
|
127
|
-
key="1"
|
|
128
|
-
skipButtons={false}
|
|
129
|
-
style={
|
|
130
|
-
{
|
|
131
|
-
"height": 30,
|
|
132
|
-
"marginHorizontal": 24,
|
|
133
|
-
"marginTop": 24,
|
|
134
|
-
"width": 336,
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
wrapperRef={
|
|
138
|
-
{
|
|
139
|
-
"current": null,
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
>
|
|
143
|
-
<_Text
|
|
144
|
-
key="0"
|
|
145
|
-
label="Test Entry"
|
|
146
|
-
numberOfLines={1}
|
|
147
|
-
skipButtons={false}
|
|
148
|
-
style={
|
|
149
|
-
{
|
|
150
|
-
"color": "#EFEFEF",
|
|
151
|
-
"fontSize": 26,
|
|
152
|
-
"fontStyle": "normal",
|
|
153
|
-
"fontWeight": "bold",
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/>
|
|
157
|
-
</View>
|
|
158
|
-
<View
|
|
159
|
-
cellUUID="mocked-uuid"
|
|
160
|
-
key="2"
|
|
161
|
-
skipButtons={false}
|
|
162
|
-
style={
|
|
163
|
-
{
|
|
164
|
-
"height": 60,
|
|
165
|
-
"marginHorizontal": 24,
|
|
166
|
-
"marginTop": 10,
|
|
167
|
-
"width": 336,
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
wrapperRef={
|
|
171
|
-
{
|
|
172
|
-
"current": null,
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
>
|
|
176
|
-
<_Text
|
|
177
|
-
key="0"
|
|
178
|
-
label="Summary of the test entry"
|
|
179
|
-
numberOfLines={2}
|
|
180
|
-
skipButtons={false}
|
|
181
|
-
style={
|
|
182
|
-
{
|
|
183
|
-
"color": "#EFEFEF",
|
|
184
|
-
"fontSize": 24,
|
|
185
|
-
"fontStyle": "normal",
|
|
186
|
-
"fontWeight": "normal",
|
|
187
|
-
"opacity": 0.8,
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
/>
|
|
191
|
-
</View>
|
|
192
|
-
<View
|
|
193
|
-
cellUUID="mocked-uuid"
|
|
194
|
-
key="3"
|
|
195
|
-
skipButtons={false}
|
|
196
|
-
style={
|
|
197
|
-
{
|
|
198
|
-
"height": 42,
|
|
199
|
-
"margin": 24,
|
|
200
|
-
"width": 56,
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
wrapperRef={
|
|
204
|
-
{
|
|
205
|
-
"current": null,
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
>
|
|
209
|
-
<ImageContainer
|
|
210
|
-
cellUUID="mocked-uuid"
|
|
211
|
-
key="0"
|
|
212
|
-
skipButtons={false}
|
|
213
|
-
style={
|
|
214
|
-
{
|
|
215
|
-
"height": 42,
|
|
216
|
-
"width": 56,
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
uri="http://urlOfTheImage.net/channelLogo.png"
|
|
220
|
-
/>
|
|
221
|
-
</View>
|
|
222
|
-
</View>
|
|
223
|
-
</View>
|
|
224
|
-
`;
|
|
225
|
-
|
|
226
|
-
exports[`masterCellBuilder when using default options renders correctly 1`] = `
|
|
227
|
-
<View>
|
|
228
|
-
<Memo(MasterCell)
|
|
229
|
-
item={
|
|
230
|
-
{
|
|
231
|
-
"author": {
|
|
232
|
-
"name": "John Doe",
|
|
233
|
-
},
|
|
234
|
-
"id": "A1234",
|
|
235
|
-
"media_group": [
|
|
236
|
-
{
|
|
237
|
-
"media_item": [
|
|
238
|
-
{
|
|
239
|
-
"key": "image_base",
|
|
240
|
-
"src": "http://urlOfTheImage.net/img.png",
|
|
241
|
-
},
|
|
242
|
-
],
|
|
243
|
-
"type": "image",
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
"media_item": [
|
|
247
|
-
{
|
|
248
|
-
"key": "logo_thumbnail",
|
|
249
|
-
"src": "http://urlOfTheImage.net/channelLogo.png",
|
|
250
|
-
},
|
|
251
|
-
],
|
|
252
|
-
"type": "thumbnail",
|
|
253
|
-
},
|
|
254
|
-
],
|
|
255
|
-
"published": "2019/03/17 02:17:46 +0000",
|
|
256
|
-
"summary": "Summary of the test entry",
|
|
257
|
-
"title": "Test Entry",
|
|
258
|
-
"type": {
|
|
259
|
-
"value": "feed",
|
|
260
|
-
},
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
/>
|
|
264
|
-
</View>
|
|
265
|
-
`;
|
|
266
|
-
|
|
267
|
-
exports[`masterCellBuilder when using default options returns a function 1`] = `
|
|
268
|
-
{
|
|
269
|
-
"$$typeof": Symbol(react.memo),
|
|
270
|
-
"compare": null,
|
|
271
|
-
"hasFocusableInside": [Function],
|
|
272
|
-
"type": [Function],
|
|
273
|
-
}
|
|
274
|
-
`;
|
|
@@ -1,20 +1,33 @@
|
|
|
1
1
|
import * as R from "ramda";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { View } from "react-native";
|
|
4
|
-
import {
|
|
5
|
-
import { shallowToJson } from "enzyme-to-json";
|
|
4
|
+
import { render } from "@testing-library/react-native";
|
|
6
5
|
import { elementMapper } from "../elementMapper";
|
|
7
6
|
import { elements } from "./testElements";
|
|
8
7
|
import { defaultComponents } from "../DefaultComponents";
|
|
9
8
|
|
|
9
|
+
jest.mock(
|
|
10
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation"
|
|
11
|
+
);
|
|
12
|
+
|
|
10
13
|
describe("elementMapper", () => {
|
|
11
14
|
it("renders the nodes", () => {
|
|
12
|
-
const wrapper =
|
|
15
|
+
const wrapper = render(
|
|
13
16
|
<View key={1}>
|
|
14
|
-
{R.map(
|
|
17
|
+
{R.map(
|
|
18
|
+
elementMapper(
|
|
19
|
+
Object.entries(defaultComponents).reduce((acc, [key]) => {
|
|
20
|
+
acc[key] = View;
|
|
21
|
+
|
|
22
|
+
return acc;
|
|
23
|
+
}, {}),
|
|
24
|
+
{ testProp: true }
|
|
25
|
+
),
|
|
26
|
+
elements
|
|
27
|
+
)}
|
|
15
28
|
</View>
|
|
16
29
|
);
|
|
17
30
|
|
|
18
|
-
expect(
|
|
31
|
+
expect(wrapper.toJSON()).toMatchSnapshot();
|
|
19
32
|
});
|
|
20
33
|
});
|