@applicaster/zapp-react-native-ui-components 12.0.5 → 13.0.0-alpha.1035032144

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.
Files changed (105) hide show
  1. package/Components/AppContainer/__tests__/__snapshots__/AppContainer.test.js.snap +1 -1
  2. package/Components/AudioPlayer/__tests__/__snapshots__/Runtime.test.js.snap +4 -4
  3. package/Components/AudioPlayer/__tests__/__snapshots__/artWork.test.js.snap +3 -3
  4. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +6 -6
  5. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +7 -7
  6. package/Components/AudioPlayer/__tests__/__snapshots__/channel.test.js.snap +3 -3
  7. package/Components/AudioPlayer/__tests__/__snapshots__/summary.test.js.snap +2 -2
  8. package/Components/AudioPlayer/__tests__/__snapshots__/title.test.js.snap +2 -2
  9. package/Components/Cell/Cell.tsx +4 -8
  10. package/Components/Cell/CellWithFocusable.tsx +60 -44
  11. package/Components/Cell/TvOSCellComponent.tsx +3 -8
  12. package/Components/Cell/__tests__/CellWIthFocusable.test.js +6 -13
  13. package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +20 -20
  14. package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +5 -3
  15. package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +5 -5
  16. package/Components/ComponentResolver/__tests__/componentResolver.test.js +11 -9
  17. package/Components/DisplayState/__tests__/__snapshots__/displayState.test.js.snap +2 -2
  18. package/Components/Focusable/FocusableTvOS.tsx +1 -1
  19. package/Components/FocusableList/index.tsx +0 -1
  20. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +9 -0
  21. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +1 -1
  22. package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +1 -0
  23. package/Components/Layout/TV/__tests__/__snapshots__/LayoutContainer.test.tsx.snap +1 -1
  24. package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +3 -3
  25. package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +9 -9
  26. package/Components/Layout/TV/__tests__/__snapshots__/index.test.tsx.snap +1 -1
  27. package/Components/Layout/TV/__tests__/index.test.tsx +7 -3
  28. package/Components/MasterCell/DefaultComponents/BorderContainerView/__tests__/index.test.tsx +66 -0
  29. package/Components/MasterCell/DefaultComponents/BorderContainerView/index.tsx +4 -1
  30. package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +5 -11
  31. package/Components/MasterCell/DefaultComponents/ImageBorderContainer/__tests__/index.test.ts +93 -0
  32. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/__snapshots__/Image.test.tsx.snap +3 -3
  33. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +1 -1
  34. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/__snapshots__/index.test.tsx.snap +1 -1
  35. package/Components/MasterCell/__tests__/__snapshots__/dataAdapter.test.js.snap +180 -180
  36. package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +7 -7
  37. package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +34 -34
  38. package/Components/MasterCell/hooks/useAsyncRendering/MasterCellAsyncRenderManager.ts +2 -2
  39. package/Components/MasterCell/hooks/useAsyncRendering/index.ts +2 -2
  40. package/Components/NativeFocusables/{index.js → index.ts} +4 -2
  41. package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +7 -7
  42. package/Components/OfflineHandler/__tests__/index.test.tsx +28 -25
  43. package/Components/PlayerContainer/PlayerContainer.tsx +5 -11
  44. package/Components/River/ComponentsMap/ComponentsMap.tsx +39 -65
  45. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +78 -51
  46. package/Components/River/RefreshControl.tsx +1 -1
  47. package/Components/River/RiverFooter.tsx +39 -9
  48. package/Components/River/RiverItem.tsx +37 -2
  49. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +114 -45
  50. package/Components/River/__tests__/__snapshots__/river.test.js.snap +12 -12
  51. package/Components/River/__tests__/componentsMap.test.js +64 -17
  52. package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +1 -1
  53. package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +1 -1
  54. package/Components/Screen/__tests__/Screen.test.tsx +41 -27
  55. package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +4 -4
  56. package/Components/Screen/hooks.ts +56 -0
  57. package/Components/Screen/index.tsx +13 -39
  58. package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +2 -2
  59. package/Components/ScreenResolver/__tests__/screenResolver.test.js +31 -27
  60. package/Components/Tabs/Tab.tsx +1 -0
  61. package/Components/TextInputTv/__tests__/TextInputTv.test.js +42 -42
  62. package/Components/TextInputTv/__tests__/__snapshots__/TextInputTv.test.js.snap +7 -0
  63. package/Components/TextInputTv/index.tsx +2 -2
  64. package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +2 -2
  65. package/Components/Transitioner/Scene.tsx +52 -23
  66. package/Components/Transitioner/__tests__/__snapshots__/AnimationManager.test.js.snap +26 -26
  67. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +62 -46
  68. package/Components/Transitioner/__tests__/__snapshots__/config.test.js.snap +20 -20
  69. package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +4 -4
  70. package/Components/Transitioner/index.js +8 -4
  71. package/Components/VideoLive/PlayerLiveImageComponent.tsx +5 -2
  72. package/Components/VideoLive/__tests__/PlayerLiveImageComponent.test.tsx +14 -9
  73. package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +5 -10
  74. package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +1 -1
  75. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +4 -10
  76. package/Components/VideoModal/ModalAnimation/index.ts +2 -1
  77. package/Components/VideoModal/ModalAnimation/useModalAnimationContext.ts +6 -0
  78. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -2
  79. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +12 -9
  80. package/Components/VideoModal/__tests__/__snapshots__/PlayerDetails.test.tsx.snap +4 -4
  81. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +66 -66
  82. package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +89 -0
  83. package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +1 -1
  84. package/Components/VideoModal/utils.ts +2 -4
  85. package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +2 -2
  86. package/Components/Viewport/ViewportTracker/__tests__/__snapshots__/viewportTracker.test.js.snap +1 -1
  87. package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +11 -11
  88. package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +30 -30
  89. package/Contexts/ConfigutaionContext/__tests__/__snapshots__/ConfigurationProvider.test.tsx.snap +1 -1
  90. package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +2 -2
  91. package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +77 -77
  92. package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +34 -39
  93. package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -9
  94. package/Decorators/RiverFeedLoader/index.tsx +1 -1
  95. package/Decorators/RiverFeedLoader/utils/getDatasourceUrl.ts +39 -0
  96. package/Decorators/RiverFeedLoader/utils/index.ts +29 -0
  97. package/Decorators/RiverFeedLoader/utils/usePipesContexts.ts +40 -0
  98. package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +5 -5
  99. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +16 -10
  100. package/Decorators/ZappPipesDataConnector/index.tsx +32 -2
  101. package/README.md +1 -13
  102. package/package.json +12 -6
  103. package/Components/Cell/CellWithFocusable.ios.tsx +0 -126
  104. package/Decorators/RiverFeedLoader/utils.ts +0 -100
  105. /package/Decorators/Analytics/{index.js → index.tsx} +0 -0
@@ -3,7 +3,7 @@
3
3
  exports[`<AppContainer /> renders correctly 1`] = `
4
4
  <View
5
5
  style={
6
- Object {
6
+ {
7
7
  "backgroundColor": "rgba(255, 255, 255, 1)",
8
8
  "flex": 1,
9
9
  }
@@ -3,7 +3,7 @@
3
3
  exports[`<Runtime /> LTR renders correctly 1`] = `
4
4
  <View
5
5
  style={
6
- Object {
6
+ {
7
7
  "height": 40,
8
8
  "justifyContent": "flex-start",
9
9
  "width": 600,
@@ -12,7 +12,7 @@ exports[`<Runtime /> LTR renders correctly 1`] = `
12
12
  >
13
13
  <Text
14
14
  style={
15
- Object {
15
+ {
16
16
  "alignItems": "flex-end",
17
17
  "color": "white",
18
18
  "flexDirection": "row",
@@ -32,7 +32,7 @@ exports[`<Runtime /> LTR renders correctly 1`] = `
32
32
  exports[`<Runtime /> RTL renders correctly 1`] = `
33
33
  <View
34
34
  style={
35
- Object {
35
+ {
36
36
  "height": 40,
37
37
  "justifyContent": "flex-end",
38
38
  "width": 600,
@@ -41,7 +41,7 @@ exports[`<Runtime /> RTL renders correctly 1`] = `
41
41
  >
42
42
  <Text
43
43
  style={
44
- Object {
44
+ {
45
45
  "alignItems": "flex-start",
46
46
  "color": "white",
47
47
  "flexDirection": "row-reverse",
@@ -3,7 +3,7 @@
3
3
  exports[`<Artwork /> renders correctly 1`] = `
4
4
  <View
5
5
  style={
6
- Object {
6
+ {
7
7
  "marginHorizontal": 24,
8
8
  }
9
9
  }
@@ -12,12 +12,12 @@ exports[`<Artwork /> renders correctly 1`] = `
12
12
  fadeDuration={0}
13
13
  resizeMode="cover"
14
14
  source={
15
- Object {
15
+ {
16
16
  "uri": "https://example.com",
17
17
  }
18
18
  }
19
19
  style={
20
- Object {
20
+ {
21
21
  "height": 400,
22
22
  "width": 400,
23
23
  }
@@ -3,7 +3,7 @@
3
3
  exports[`<AudioPlayer /> renders correctly 1`] = `
4
4
  <AudioPlayerLayout
5
5
  config={
6
- Object {
6
+ {
7
7
  "artworkAspectRatio": "1:1",
8
8
  "audioPlayerBackgroundImageQuery": "",
9
9
  "backgroundColor": "black",
@@ -21,11 +21,11 @@ exports[`<AudioPlayer /> renders correctly 1`] = `
21
21
  "titleFontSize": undefined,
22
22
  }
23
23
  }
24
- style={Object {}}
24
+ style={{}}
25
25
  >
26
26
  <Channel
27
27
  config={
28
- Object {
28
+ {
29
29
  "artworkAspectRatio": "1:1",
30
30
  "audioPlayerBackgroundImageQuery": "",
31
31
  "backgroundColor": "black",
@@ -47,7 +47,7 @@ exports[`<AudioPlayer /> renders correctly 1`] = `
47
47
  />
48
48
  <Title
49
49
  config={
50
- Object {
50
+ {
51
51
  "artworkAspectRatio": "1:1",
52
52
  "audioPlayerBackgroundImageQuery": "",
53
53
  "backgroundColor": "black",
@@ -69,7 +69,7 @@ exports[`<AudioPlayer /> renders correctly 1`] = `
69
69
  />
70
70
  <Summary
71
71
  config={
72
- Object {
72
+ {
73
73
  "artworkAspectRatio": "1:1",
74
74
  "audioPlayerBackgroundImageQuery": "",
75
75
  "backgroundColor": "black",
@@ -98,7 +98,7 @@ exports[`<AudioPlayer /> renders correctly 1`] = `
98
98
  audio_player_summary_color="white"
99
99
  audio_player_title_color="white"
100
100
  config={
101
- Object {
101
+ {
102
102
  "artworkAspectRatio": "1:1",
103
103
  "audioPlayerBackgroundImageQuery": "",
104
104
  "backgroundColor": "black",
@@ -4,7 +4,7 @@ exports[`<AudioPlayerLayout /> renders correctly 1`] = `
4
4
  <View
5
5
  pointerEvents="none"
6
6
  style={
7
- Object {
7
+ {
8
8
  "backgroundColor": "transparent",
9
9
  "overflow": "hidden",
10
10
  }
@@ -12,12 +12,12 @@ exports[`<AudioPlayerLayout /> renders correctly 1`] = `
12
12
  >
13
13
  <ForwardRef(AnimatedComponentWrapper)
14
14
  style={
15
- Array [
16
- Object {
15
+ [
16
+ {
17
17
  "backgroundColor": "transparent",
18
18
  "overflow": "hidden",
19
19
  },
20
- Object {
20
+ {
21
21
  "opacity": 0,
22
22
  },
23
23
  ]
@@ -26,19 +26,19 @@ exports[`<AudioPlayerLayout /> renders correctly 1`] = `
26
26
  <ImageBackground
27
27
  resizeMode="cover"
28
28
  source={
29
- Object {
29
+ {
30
30
  "uri": "https://example.com",
31
31
  }
32
32
  }
33
33
  style={
34
- Object {
34
+ {
35
35
  "flex": 1,
36
36
  }
37
37
  }
38
38
  >
39
39
  <View
40
40
  style={
41
- Object {
41
+ {
42
42
  "backgroundColor": "transparent",
43
43
  "overflow": "hidden",
44
44
  }
@@ -3,7 +3,7 @@
3
3
  exports[`<Channel /> renders correctly 1`] = `
4
4
  <View
5
5
  style={
6
- Object {
6
+ {
7
7
  "height": 72,
8
8
  "marginBottom": 30,
9
9
  "width": 128,
@@ -13,12 +13,12 @@ exports[`<Channel /> renders correctly 1`] = `
13
13
  <Image
14
14
  fadeDuration={0}
15
15
  source={
16
- Object {
16
+ {
17
17
  "uri": "https://example.com",
18
18
  }
19
19
  }
20
20
  style={
21
- Object {
21
+ {
22
22
  "height": 72,
23
23
  "width": 128,
24
24
  }
@@ -3,7 +3,7 @@
3
3
  exports[`<Summary /> renders correctly 1`] = `
4
4
  <View
5
5
  style={
6
- Object {
6
+ {
7
7
  "height": 80,
8
8
  "marginBottom": 30,
9
9
  "width": 600,
@@ -13,7 +13,7 @@ exports[`<Summary /> renders correctly 1`] = `
13
13
  <Text
14
14
  numberOfLines={2}
15
15
  style={
16
- Object {
16
+ {
17
17
  "color": "white",
18
18
  "fontFamily": null,
19
19
  "fontSize": 20,
@@ -3,7 +3,7 @@
3
3
  exports[`<Title /> renders correctly 1`] = `
4
4
  <View
5
5
  style={
6
- Object {
6
+ {
7
7
  "height": 100,
8
8
  "marginBottom": 12,
9
9
  "width": 600,
@@ -13,7 +13,7 @@ exports[`<Title /> renders correctly 1`] = `
13
13
  <Text
14
14
  numberOfLines={2}
15
15
  style={
16
- Object {
16
+ {
17
17
  "color": "white",
18
18
  "fontFamily": null,
19
19
  "fontSize": 38,
@@ -14,10 +14,7 @@ import { BaseFocusable } from "../BaseFocusable";
14
14
  import { AccessibilityManager } from "@applicaster/zapp-react-native-utils/appUtils/accessibilityManager";
15
15
 
16
16
  type Props = {
17
- item: {
18
- id: string;
19
- title: string;
20
- };
17
+ item: ZappEntry;
21
18
  index: number;
22
19
  shouldScrollHorizontally: (arg1: [any]) => boolean | null | undefined;
23
20
  shouldScrollVertically: (...args: any) => boolean | null | undefined;
@@ -33,10 +30,9 @@ type Props = {
33
30
  id: string;
34
31
  };
35
32
  selected?: boolean;
36
- CellRenderer: React.ComponentType<{
37
- item: any;
38
- state: string;
39
- }> & { hasFocusableInside: (item: Record<string, string>) => boolean };
33
+ CellRenderer: React.FunctionComponent<any> & {
34
+ hasFocusableInside: (item: ZappEntry) => boolean;
35
+ };
40
36
  preferredFocus: boolean;
41
37
  navigator: {
42
38
  push: (arg1: Record<any, any>) => void;
@@ -1,14 +1,52 @@
1
1
  import * as React from "react";
2
2
 
3
+ import { focusManager } from "@applicaster/zapp-react-native-utils/appUtils/focusManager";
4
+ import * as FOCUS_EVENTS from "@applicaster/zapp-react-native-utils/appUtils/focusManager/events";
3
5
  import { noop } from "@applicaster/zapp-react-native-utils/functionUtils";
4
6
  import { toBooleanWithDefaultFalse } from "@applicaster/zapp-react-native-utils/booleanUtils";
5
7
 
8
+ import { isAppleTV } from "../../Helpers/Platform";
6
9
  import { useCellState } from "../MasterCell/utils";
7
- import { FocusableGroup } from "../FocusableGroup";
10
+
11
+ const useCellFocusedState = (
12
+ skipFocusManagerRegistration: boolean,
13
+ groupId: string,
14
+ id: string
15
+ ) => {
16
+ const [currentCellFocused, setCurrentCellFocused] = React.useState(false);
17
+
18
+ React.useEffect(() => {
19
+ const isGroupItemFocused = () => {
20
+ if (!skipFocusManagerRegistration) {
21
+ const isFocused = focusManager.isGroupItemFocused(groupId, id);
22
+ setCurrentCellFocused(isFocused);
23
+ }
24
+ };
25
+
26
+ const handler = () => {
27
+ // tvOS hack for properly checking focus
28
+ if (isAppleTV()) {
29
+ setTimeout(() => {
30
+ isGroupItemFocused();
31
+ }, 0);
32
+ } else {
33
+ isGroupItemFocused();
34
+ }
35
+ };
36
+
37
+ focusManager.on(FOCUS_EVENTS.FOCUS, handler);
38
+
39
+ return () => {
40
+ focusManager.removeHandler(FOCUS_EVENTS.FOCUS, handler);
41
+ };
42
+ }, [groupId, skipFocusManagerRegistration]);
43
+
44
+ return currentCellFocused;
45
+ };
8
46
 
9
47
  type Props = {
10
48
  item: ZappEntry;
11
- CellRenderer: React.ComponentType<{ item: Object; state: string }>;
49
+ CellRenderer: React.FunctionComponent<any>;
12
50
  id: string;
13
51
  groupId: string;
14
52
  onFocus: Function;
@@ -37,7 +75,11 @@ export function CellWithFocusable(props: Props) {
37
75
  focused,
38
76
  } = props;
39
77
 
40
- const [isFocused, setIsFocused] = React.useState(false);
78
+ const isFocused = useCellFocusedState(
79
+ skipFocusManagerRegistration,
80
+ groupId,
81
+ id
82
+ );
41
83
 
42
84
  const state = useCellState({
43
85
  id: item.id,
@@ -54,52 +96,26 @@ export function CellWithFocusable(props: Props) {
54
96
  }
55
97
  }, [focusedButtonId]);
56
98
 
57
- const handleToggleFocus = React.useCallback(
58
- (value) => {
59
- setFocusedButtonId(value.focusedButtonId);
60
-
61
- if (value.focusable) {
62
- onFocus(value.focusable, value.mouse);
63
- }
64
- },
65
- [onFocus]
66
- );
67
-
68
- const onGroupFocus = React.useCallback(() => {
69
- if (!skipFocusManagerRegistration) {
70
- setIsFocused(true);
71
- }
72
- }, [skipFocusManagerRegistration]);
99
+ const handleToggleFocus = (value) => {
100
+ setFocusedButtonId(value.focusedButtonId);
73
101
 
74
- const onGroupBlur = React.useCallback(() => {
75
- if (!skipFocusManagerRegistration) {
76
- setIsFocused(false);
102
+ if (value.focusable) {
103
+ onFocus(value.focusable, value.mouse);
77
104
  }
78
- }, [skipFocusManagerRegistration]);
105
+ };
79
106
 
80
107
  return (
81
- <FocusableGroup
82
- id={`focusable-cell-wrapper-${id}`}
83
- testID={"cell-with-focusable-cell-renderer-focusable-group"}
108
+ <CellRenderer
109
+ item={item}
84
110
  groupId={groupId}
111
+ onToggleFocus={handleToggleFocus}
112
+ state={state}
113
+ prefixId={id}
114
+ focusedButtonId={focusedButtonId}
85
115
  preferredFocus={preferredFocus}
86
- shouldUsePreferredFocus
87
- onFocus={onGroupFocus}
88
- onBlur={onGroupBlur}
89
- >
90
- <CellRenderer
91
- testID={"cell-with-focusable-cell-renderer"}
92
- item={item}
93
- groupId={`focusable-cell-wrapper-${id}`}
94
- onToggleFocus={handleToggleFocus}
95
- state={state}
96
- prefixId={id}
97
- focusedButtonId={focusedButtonId}
98
- preferredFocus={true}
99
- skipFocusManagerRegistration={skipFocusManagerRegistration}
100
- isFocusable={isFocusable}
101
- focused={focused}
102
- />
103
- </FocusableGroup>
116
+ skipFocusManagerRegistration={skipFocusManagerRegistration}
117
+ isFocusable={isFocusable}
118
+ focused={focused}
119
+ />
104
120
  );
105
121
  }
@@ -10,10 +10,6 @@ import { focusManager } from "@applicaster/zapp-react-native-utils/appUtils/focu
10
10
  import { sendSelectCellEvent } from "@applicaster/zapp-react-native-utils/analyticsUtils";
11
11
  import { noop } from "@applicaster/zapp-react-native-utils/functionUtils";
12
12
  import { CellWithFocusable } from "./CellWithFocusable";
13
- import { getCellState } from "./utils";
14
-
15
- const _getCellState = (focused, selected) =>
16
- getCellState({ focused, selected });
17
13
 
18
14
  type Props = {
19
15
  item: ZappEntry;
@@ -36,10 +32,9 @@ type Props = {
36
32
  component_type: string;
37
33
  };
38
34
  selected: boolean;
39
- CellRenderer: React.ComponentType<{
40
- item: any;
41
- state: string;
42
- }> & { hasFocusableInside: (item: any) => boolean };
35
+ CellRenderer: React.FunctionComponent<any> & {
36
+ hasFocusableInside: (item: any) => boolean;
37
+ };
43
38
  preferredFocus: boolean;
44
39
  navigator: {
45
40
  push: (arg1: Record<any, any>) => void;
@@ -1,7 +1,7 @@
1
1
  import { View } from "react-native";
2
2
  import React from "react";
3
3
  import { act, render } from "@testing-library/react-native";
4
- import { CellWithFocusable } from "../CellWithFocusable.tsx";
4
+ import { CellWithFocusable } from "../CellWithFocusable";
5
5
 
6
6
  import { focusManager } from "@applicaster/zapp-react-native-utils/appUtils/focusManager";
7
7
 
@@ -23,9 +23,7 @@ describe("CellWithFocusable", () => {
23
23
 
24
24
  const wrapper = renderWith(props);
25
25
 
26
- const element = wrapper.getByTestId("cell-with-focusable-cell-renderer");
27
-
28
- expect(element.props.state).toBe("default");
26
+ expect(wrapper.UNSAFE_getByType("View").props.state).toBe("default");
29
27
  });
30
28
 
31
29
  it("should render in default state", () => {
@@ -42,9 +40,8 @@ describe("CellWithFocusable", () => {
42
40
  focusManager.isGroupItemFocused = jest.fn(() => true);
43
41
 
44
42
  const wrapper = renderWith(props);
45
- const element = wrapper.getByTestId("cell-with-focusable-cell-renderer");
46
43
 
47
- expect(element.props.state).toBe("default");
44
+ expect(wrapper.UNSAFE_getByType("View").props.state).toBe("default");
48
45
  });
49
46
 
50
47
  it("should render in focused state", () => {
@@ -58,17 +55,13 @@ describe("CellWithFocusable", () => {
58
55
  scrollTo: jest.fn(),
59
56
  };
60
57
 
58
+ focusManager.isGroupItemFocused = jest.fn(() => true);
61
59
  const wrapper = renderWith(props);
62
60
 
63
- const focusableGroupComponent = wrapper.getByTestId(
64
- "cell-with-focusable-cell-renderer-focusable-group"
65
- );
66
-
67
61
  act(() => {
68
- focusableGroupComponent.props.onFocus();
62
+ focusManager.on.mock.calls[focusManager.on.mock.calls.length - 1][1]();
69
63
  });
70
64
 
71
- const element = wrapper.getByTestId("cell-with-focusable-cell-renderer");
72
- expect(element.props.state).toBe("focused");
65
+ expect(wrapper.UNSAFE_getByType("View").props.state).toBe("focused");
73
66
  });
74
67
  });
@@ -3,24 +3,24 @@
3
3
  exports[`CellRendererResolver renders correctly 1`] = `
4
4
  <View
5
5
  someProp={
6
- Object {
7
- "cellOptions": Object {},
8
- "cellStyles": Object {
9
- "ABCDE-123456": Object {
10
- "configuration": Object {},
6
+ {
7
+ "cellOptions": {},
8
+ "cellStyles": {
9
+ "ABCDE-123456": {
10
+ "configuration": {},
11
11
  "plugin_identifier": "custom_renderer_plugin",
12
12
  },
13
- "FGHIJ-123456": Object {
14
- "configuration": Object {},
13
+ "FGHIJ-123456": {
14
+ "configuration": {},
15
15
  "plugin_identifier": "unknown_plugin",
16
16
  },
17
17
  },
18
- "component": Object {
19
- "styles": Object {
18
+ "component": {
19
+ "styles": {
20
20
  "cell_plugin_configuration_id": "ABCDE-123456",
21
21
  },
22
22
  },
23
- "styles": Object {},
23
+ "styles": {},
24
24
  }
25
25
  }
26
26
  />
@@ -29,24 +29,24 @@ exports[`CellRendererResolver renders correctly 1`] = `
29
29
  exports[`CellRendererResolver with a default renderer plugin renders correctly 1`] = `
30
30
  <View
31
31
  someProp={
32
- Object {
33
- "cellOptions": Object {},
34
- "cellStyles": Object {
35
- "ABCDE-123456": Object {
36
- "configuration": Object {},
32
+ {
33
+ "cellOptions": {},
34
+ "cellStyles": {
35
+ "ABCDE-123456": {
36
+ "configuration": {},
37
37
  "plugin_identifier": "custom_renderer_plugin",
38
38
  },
39
- "FGHIJ-123456": Object {
40
- "configuration": Object {},
39
+ "FGHIJ-123456": {
40
+ "configuration": {},
41
41
  "plugin_identifier": "unknown_plugin",
42
42
  },
43
43
  },
44
- "component": Object {
45
- "styles": Object {
44
+ "component": {
45
+ "styles": {
46
46
  "cell_plugin_configuration_id": "ABCDE-123456",
47
47
  },
48
48
  },
49
- "styles": Object {},
49
+ "styles": {},
50
50
  }
51
51
  }
52
52
  />
@@ -2,9 +2,11 @@ import * as React from "react";
2
2
  import { View } from "react-native";
3
3
  import { shallow } from "enzyme";
4
4
 
5
- jest.mock("../../default-cell-renderer", () =>
6
- jest.fn((prop) => <View whoAmI="default renderer" someProp={prop} />)
7
- );
5
+ jest.mock("../../default-cell-renderer", () => {
6
+ const View = jest.requireActual("react-native").View;
7
+
8
+ return jest.fn((prop) => <View whoAmI="default renderer" someProp={prop} />);
9
+ });
8
10
 
9
11
  const { CellRendererResolver } = require("../index");
10
12
 
@@ -5,22 +5,22 @@ exports[`ComponentResolver renders correctly 1`] = `
5
5
  value={null}
6
6
  >
7
7
  <Memo(ComponentResolver)
8
- cellStyles={Object {}}
8
+ cellStyles={{}}
9
9
  component={
10
- Object {
10
+ {
11
11
  "component_type": "some_component",
12
12
  }
13
13
  }
14
14
  components={
15
- Object {
15
+ {
16
16
  "SomeComponent": [MockFunction],
17
17
  }
18
18
  }
19
19
  decorators={[MockFunction]}
20
20
  dispatch={[Function]}
21
- plugins={Array []}
21
+ plugins={[]}
22
22
  store={
23
- Object {
23
+ {
24
24
  "clearActions": [Function],
25
25
  "dispatch": [Function],
26
26
  "getActions": [Function],
@@ -4,19 +4,21 @@ import { shallow } from "enzyme";
4
4
  import { shallowToJson } from "enzyme-to-json";
5
5
  import configureStore from "redux-mock-store";
6
6
 
7
- const logger = {
7
+ const mockLogger = {
8
8
  warning: jest.fn(),
9
9
  };
10
10
 
11
11
  jest.mock("../../../Helpers/logger", () => ({
12
12
  componentsLogger: {
13
- addSubsystem: jest.fn(() => logger),
13
+ addSubsystem: jest.fn(() => mockLogger),
14
14
  },
15
15
  }));
16
16
 
17
- jest.mock("../../default-cell-renderer", () =>
18
- jest.fn((prop) => <View whoAmI="default renderer" someProp={prop} />)
19
- );
17
+ jest.mock("../../default-cell-renderer", () => {
18
+ const View = jest.requireActual("react-native").View;
19
+
20
+ return jest.fn((prop) => <View whoAmI="default renderer" someProp={prop} />);
21
+ });
20
22
 
21
23
  const mock_rtl_flag = false;
22
24
 
@@ -48,7 +50,7 @@ function clearAllMocks() {
48
50
  SomeComponent.mockClear();
49
51
  decorators.mockClear();
50
52
  renderFunction.mockClear();
51
- logger.warning.mockClear();
53
+ mockLogger.warning.mockClear();
52
54
  }
53
55
 
54
56
  describe("ComponentResolver", () => {
@@ -104,16 +106,16 @@ describe("ComponentResolverComponent", () => {
104
106
  expect(shallowToJson(wrapper)).toMatchSnapshot();
105
107
  expect(wrapper.isEmptyRender()).toBe(true);
106
108
 
107
- expect(logger.warning).toHaveBeenCalledTimes(2);
109
+ expect(mockLogger.warning).toHaveBeenCalledTimes(2);
108
110
 
109
- expect(logger.warning).toHaveBeenNthCalledWith(
111
+ expect(mockLogger.warning).toHaveBeenNthCalledWith(
110
112
  1,
111
113
  expect.objectContaining({
112
114
  message: "Could not resolve cell builder plugin",
113
115
  })
114
116
  );
115
117
 
116
- expect(logger.warning).toHaveBeenNthCalledWith(
118
+ expect(mockLogger.warning).toHaveBeenNthCalledWith(
117
119
  2,
118
120
  expect.objectContaining({
119
121
  message: warningMessage,
@@ -1,7 +1,7 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`DISPLAY_STATES matches the snapshot 1`] = `
4
- Object {
4
+ {
5
5
  "CONTENT": "CONTENT",
6
6
  "CONTROLS": "CONTROLS",
7
7
  "DISCOVERY": "DISCOVERY",
@@ -9,7 +9,7 @@ Object {
9
9
  `;
10
10
 
11
11
  exports[`DisplayStateContext has the correct properties 1`] = `
12
- Object {
12
+ {
13
13
  "Consumer": [MockFunction],
14
14
  "Provider": [MockFunction],
15
15
  "withConsumer": [MockFunction],
@@ -90,7 +90,7 @@ export class Focusable extends BaseFocusable<Props> {
90
90
  onBlur(nativeEvent);
91
91
  }
92
92
 
93
- setFocus(direction, callback) {
93
+ setFocus(_direction, callback) {
94
94
  const focusMethods = [
95
95
  { method: this.willReceiveFocus },
96
96
  { method: this.focus, args: [callback] },
@@ -87,7 +87,6 @@ function FocusableListComponent<ItemT>(props: Props<ItemT>, ref) {
87
87
  initialFocusDirection = "down",
88
88
  data = [],
89
89
  // eslint-disable-next-line unused-imports/no-unused-vars
90
- onAllComponentsLoaded, // TODO: re-implement it
91
90
  omitPropsPropagation = [],
92
91
  } = props;
93
92