@applicaster/zapp-react-native-ui-components 14.0.0-alpha.4517121861 → 14.0.0-alpha.4520122433

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 (126) hide show
  1. package/Components/AnimatedInOut/index.tsx +5 -3
  2. package/Components/AudioPlayer/mobile/Layout.tsx +1 -1
  3. package/Components/AudioPlayer/tv/helpers.tsx +10 -3
  4. package/Components/BaseFocusable/index.tsx +23 -12
  5. package/Components/Cell/Cell.tsx +91 -64
  6. package/Components/Cell/CellWithFocusable.tsx +3 -0
  7. package/Components/Cell/__tests__/CellWIthFocusable.test.js +3 -2
  8. package/Components/Cell/index.js +1 -1
  9. package/Components/ComponentResolver/index.ts +1 -1
  10. package/Components/FeedLoader/FeedLoader.tsx +7 -16
  11. package/Components/FeedLoader/FeedLoaderHOC.tsx +21 -0
  12. package/Components/FeedLoader/index.js +2 -8
  13. package/Components/Focusable/Focusable.tsx +12 -3
  14. package/Components/Focusable/FocusableTvOS.tsx +5 -5
  15. package/Components/Focusable/FocusableiOS.tsx +2 -2
  16. package/Components/Focusable/Touchable.tsx +5 -3
  17. package/Components/Focusable/index.android.tsx +8 -4
  18. package/Components/Focusable/index.tsx +1 -1
  19. package/Components/FocusableGroup/FocusableTvOS.tsx +1 -1
  20. package/Components/FocusableList/FocusableItem.tsx +4 -3
  21. package/Components/FocusableList/FocusableListItemWrapper.tsx +2 -1
  22. package/Components/FocusableList/hooks/useCellState.android.ts +13 -3
  23. package/Components/FocusableList/index.tsx +20 -9
  24. package/Components/FreezeWithCallback/__tests__/index.test.tsx +67 -43
  25. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +42 -59
  26. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +13 -10
  27. package/Components/HandlePlayable/HandlePlayable.tsx +17 -10
  28. package/Components/Layout/TV/LayoutBackground.tsx +1 -1
  29. package/Components/Layout/TV/__tests__/index.test.tsx +0 -1
  30. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +6 -2
  31. package/Components/MasterCell/DefaultComponents/Button.tsx +1 -1
  32. package/Components/MasterCell/DefaultComponents/FocusableView/index.tsx +4 -39
  33. package/Components/MasterCell/DefaultComponents/Image/hoc/withDimensions.tsx +1 -1
  34. package/Components/MasterCell/DefaultComponents/ImageContainer/index.tsx +1 -1
  35. package/Components/MasterCell/DefaultComponents/SecondaryImage/Image.tsx +65 -17
  36. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/Image.test.tsx +21 -3
  37. package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/__snapshots__/Image.test.tsx.snap +6 -3
  38. package/Components/MasterCell/DefaultComponents/Text/index.tsx +26 -6
  39. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +10 -10
  40. package/Components/MasterCell/DefaultComponents/__tests__/text.test.tsx +18 -18
  41. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/index.test.tsx +10 -10
  42. package/Components/MasterCell/elementMapper.tsx +1 -2
  43. package/Components/MasterCell/utils/behaviorProvider.ts +82 -14
  44. package/Components/MasterCell/utils/index.ts +11 -5
  45. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +13 -18
  46. package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +9 -0
  47. package/Components/OfflineHandler/__tests__/index.test.tsx +26 -35
  48. package/Components/PlayerContainer/ErrorDisplay/index.ts +1 -1
  49. package/Components/PlayerContainer/PlayerContainer.tsx +45 -29
  50. package/Components/PlayerContainer/ProgramInfo/index.tsx +1 -1
  51. package/Components/PlayerContainer/index.ts +1 -1
  52. package/Components/River/ComponentsMap/ComponentsMap.tsx +0 -1
  53. package/Components/River/ComponentsMap/hooks/__tests__/useLoadingState.test.ts +378 -0
  54. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +2 -2
  55. package/Components/River/RefreshControl.tsx +11 -17
  56. package/Components/River/TV/River.tsx +2 -17
  57. package/Components/River/TV/index.tsx +3 -1
  58. package/Components/River/TV/withPipesV1DataLoader.tsx +43 -0
  59. package/Components/River/TV/withRiverDataLoader.tsx +17 -0
  60. package/Components/River/TV/withTVEventHandler.tsx +1 -1
  61. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +2 -0
  62. package/Components/River/__tests__/river.test.js +12 -26
  63. package/Components/River/index.tsx +1 -1
  64. package/Components/Screen/__tests__/Screen.test.tsx +28 -29
  65. package/Components/Screen/__tests__/navigationHandler.test.ts +133 -22
  66. package/Components/Screen/navigationHandler.ts +20 -2
  67. package/Components/ScreenRevealManager/ScreenRevealManager.ts +76 -0
  68. package/Components/ScreenRevealManager/__tests__/ScreenRevealManager.test.ts +107 -0
  69. package/Components/ScreenRevealManager/__tests__/withScreenRevealManager.test.tsx +96 -0
  70. package/Components/ScreenRevealManager/index.ts +1 -0
  71. package/Components/ScreenRevealManager/withScreenRevealManager.tsx +79 -0
  72. package/Components/Tabs/TV/Tabs.android.tsx +1 -3
  73. package/Components/Tabs/Tabs.tsx +2 -3
  74. package/Components/TextInputTv/__tests__/__snapshots__/TextInputTv.test.js.snap +13 -0
  75. package/Components/TextInputTv/index.tsx +11 -0
  76. package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +34 -0
  77. package/Components/Touchable/__tests__/touchable.test.tsx +12 -17
  78. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +15 -9
  79. package/Components/VideoLive/animationUtils.ts +3 -3
  80. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +3 -9
  81. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.web.tsx +294 -0
  82. package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.web.tsx +93 -0
  83. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +73 -29
  84. package/Components/VideoModal/PlayerDetails.tsx +24 -2
  85. package/Components/VideoModal/PlayerWrapper.tsx +26 -142
  86. package/Components/VideoModal/VideoModal.tsx +3 -17
  87. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -5
  88. package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +1 -7
  89. package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +44 -240
  90. package/Components/VideoModal/hooks/__tests__/useDelayedPlayerDetails.test.ts +9 -1
  91. package/Components/VideoModal/hooks/index.ts +0 -2
  92. package/Components/VideoModal/hooks/useDelayedPlayerDetails.ts +40 -15
  93. package/Components/VideoModal/hooks/useModalSize.ts +18 -2
  94. package/Components/VideoModal/hooks/utils/__tests__/showDetails.test.ts +2 -2
  95. package/Components/VideoModal/hooks/utils/index.ts +4 -0
  96. package/Components/VideoModal/utils.ts +6 -0
  97. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -16
  98. package/Components/Viewport/ViewportTracker/__tests__/viewportTracker.test.js +84 -24
  99. package/Contexts/CellFocusedStateContext/index.tsx +27 -0
  100. package/Contexts/ConfigutaionContext/__tests__/ConfigurationProvider.test.tsx +3 -3
  101. package/Contexts/ScreenContext/index.tsx +46 -6
  102. package/Decorators/ConfigurationWrapper/__tests__/withConfigurationProvider.test.tsx +3 -3
  103. package/Decorators/ConfigurationWrapper/withConfigurationProvider.tsx +2 -2
  104. package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +221 -209
  105. package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +14 -16
  106. package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -20
  107. package/Decorators/RiverFeedLoader/index.tsx +22 -4
  108. package/Decorators/RiverFeedLoader/utils/index.ts +0 -18
  109. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +3 -6
  110. package/Decorators/ZappPipesDataConnector/ResolverSelector.tsx +25 -0
  111. package/Decorators/ZappPipesDataConnector/__tests__/NullFeedResolver.test.tsx +78 -0
  112. package/Decorators/ZappPipesDataConnector/__tests__/ResolverSelector.test.tsx +205 -0
  113. package/Decorators/ZappPipesDataConnector/__tests__/StaticFeedResolver.test.tsx +251 -0
  114. package/Decorators/ZappPipesDataConnector/__tests__/UrlFeedResolver.test.tsx +368 -0
  115. package/Decorators/ZappPipesDataConnector/__tests__/utils.test.ts +39 -0
  116. package/Decorators/ZappPipesDataConnector/index.tsx +26 -293
  117. package/Decorators/ZappPipesDataConnector/resolvers/NullFeedResolver.tsx +25 -0
  118. package/Decorators/ZappPipesDataConnector/resolvers/StaticFeedResolver.tsx +87 -0
  119. package/Decorators/ZappPipesDataConnector/resolvers/UrlFeedResolver.tsx +266 -0
  120. package/Decorators/ZappPipesDataConnector/types.ts +29 -0
  121. package/Decorators/ZappPipesDataConnector/utils/mongoFilter.ts +738 -0
  122. package/Decorators/ZappPipesDataConnector/utils/useFilter.tsx +157 -0
  123. package/events/index.ts +3 -0
  124. package/package.json +5 -10
  125. package/Components/River/__tests__/__snapshots__/river.test.js.snap +0 -27
  126. package/Components/VideoModal/hooks/useBackgroundColor.ts +0 -10
@@ -0,0 +1,157 @@
1
+ import React, { useCallback, useEffect } from "react";
2
+
3
+ import { filterObjects } from "./mongoFilter";
4
+ import { getNamespaceAndKey } from "@applicaster/zapp-react-native-utils/appUtils/contextKeysManager/utils";
5
+ import { localStorage } from "@applicaster/zapp-react-native-bridge/ZappStorage/LocalStorage";
6
+ import { sessionStorage } from "@applicaster/zapp-react-native-bridge/ZappStorage/SessionStorage";
7
+
8
+ import {
9
+ extractAtValues,
10
+ resolveObjectValues,
11
+ } from "@applicaster/zapp-react-native-utils/appUtils/contextKeysManager/contextResolver";
12
+ import { createLogger } from "@applicaster/zapp-react-native-utils/logger";
13
+ import { ScreenSingleValueProvider } from "@applicaster/zapp-react-native-utils/storage/ScreenSingleValueProvider";
14
+ import { useScreenStateStore } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useScreenStateStore";
15
+ import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks";
16
+ import { useScreenResolvers } from "@applicaster/zapp-react-native-utils/actionsExecutor/screenResolver";
17
+
18
+ const { log_debug, log_error } = createLogger({
19
+ subsystem: "General",
20
+ category: "UseFilter",
21
+ });
22
+
23
+ export const useFilter: (
24
+ zappPipesData: ZappPipesData,
25
+ _component // In future filter will come from the component
26
+ ) => (zappPipesData: ZappPipesData) => ZappPipesData = (
27
+ zappPipesData: ZappPipesData,
28
+ _component
29
+ ) => {
30
+ const { pathname } = useRoute();
31
+ const screenStateStore = useScreenStateStore();
32
+ const [filter, setFilter] = React.useState(null);
33
+ const [inflatedFilter, setInflatedFilter] = React.useState(null);
34
+ const screenResolvers = useScreenResolvers();
35
+
36
+ useEffect(() => {
37
+ if (!filter) {
38
+ setInflatedFilter(null);
39
+
40
+ return;
41
+ }
42
+
43
+ const atValues = extractAtValues(filter);
44
+
45
+ log_debug("Extracted @ values from filter", { atValues });
46
+
47
+ if (!atValues.length) {
48
+ // no dynamic values - can apply right now
49
+ setInflatedFilter(filter);
50
+ } else {
51
+ const rebuildFilter = () =>
52
+ resolveObjectValues(filter, screenResolvers)
53
+ .then((resolvedFilter) => {
54
+ log_debug("Resolved filter values", { resolvedFilter });
55
+ setInflatedFilter(resolvedFilter);
56
+ })
57
+ .catch((error) => {
58
+ log_error(`Error resolving filter values: ${error.message}`);
59
+ setInflatedFilter(null);
60
+ });
61
+
62
+ rebuildFilter(); // have dynamic values - need to resolve before applying
63
+
64
+ // subscribe for future changes of dynamic values
65
+ const screenSubscriptions: (() => void)[] = atValues
66
+ .filter((data) => data.startsWith("screen/"))
67
+ .map((data: string) => {
68
+ const keyName = data.replace("screen/", "");
69
+
70
+ const provider = ScreenSingleValueProvider.getProvider(
71
+ keyName,
72
+ pathname,
73
+ screenStateStore
74
+ );
75
+
76
+ const subscription = provider.getObservable().subscribe((value) => {
77
+ if (value !== undefined) {
78
+ rebuildFilter();
79
+ }
80
+ });
81
+
82
+ return () => subscription.unsubscribe();
83
+ });
84
+
85
+ const storageSubscriptions: (() => void)[] = atValues
86
+ .filter((data) => !data.startsWith("screen/"))
87
+ .flatMap((data: string) => {
88
+ const keyName = data.replace("ctx/", "");
89
+ const { namespace, key } = getNamespaceAndKey(keyName);
90
+
91
+ return [
92
+ localStorage.addListener({ key, namespace }, rebuildFilter),
93
+ sessionStorage.addListener({ key, namespace }, rebuildFilter),
94
+ ];
95
+ });
96
+
97
+ const subscriptions = [...screenSubscriptions, ...storageSubscriptions];
98
+
99
+ return () => subscriptions.forEach((listener) => listener());
100
+ }
101
+ }, [filter]);
102
+
103
+ const filterFunc = useCallback(
104
+ (zappPipesData: ZappPipesData) => {
105
+ const { data } = zappPipesData;
106
+
107
+ if (!data || !data.entry) {
108
+ return zappPipesData;
109
+ }
110
+
111
+ const noResultBehavior =
112
+ data?.extensions?.filter?.no_result_behavior || "show_nothing";
113
+
114
+ const filterExpression = data?.extensions?.filter?.expression;
115
+
116
+ if (filterExpression) {
117
+ setFilter(filterExpression);
118
+
119
+ // if there is a filter, but it is not inflated yet,
120
+ // and the behavior is "show_nothing" - return no results
121
+ if (noResultBehavior === "show_nothing" && !inflatedFilter) {
122
+ return {
123
+ ...zappPipesData,
124
+ data: { ...data, entry: [] },
125
+ } as ZappPipesData;
126
+ }
127
+ }
128
+
129
+ if (!inflatedFilter) {
130
+ return zappPipesData;
131
+ }
132
+
133
+ log_debug("Applying filter to data", { filter, inflatedFilter });
134
+
135
+ const filteredEntries = filterObjects(data.entry, inflatedFilter);
136
+
137
+ if (!filteredEntries.length && noResultBehavior === "show_all") {
138
+ return zappPipesData;
139
+ }
140
+
141
+ return {
142
+ ...zappPipesData,
143
+ data: {
144
+ ...data,
145
+ entry: filteredEntries,
146
+ },
147
+ } as ZappPipesData;
148
+ },
149
+ [inflatedFilter, setFilter]
150
+ );
151
+
152
+ if (!zappPipesData || !zappPipesData.data) {
153
+ return (zappPipesData) => zappPipesData;
154
+ }
155
+
156
+ return filterFunc;
157
+ };
package/events/index.ts CHANGED
@@ -2,4 +2,7 @@ export enum QBUIComponentEvents {
2
2
  toggleGradient = "toggleGradient",
3
3
  topMenuBarTV_onFocus = "topMenuBarTV_onFocus",
4
4
  navigatorReplaceItem = "navigatorReplaceItem",
5
+ scrollVerticallyToInitialOffset = "scrollVerticallyToInitialOffset",
6
+ focusOnSelectedTab = "focusOnSelectedTab",
7
+ focusOnSelectedTopMenuItem = "focusOnSelectedTopMenuItem",
5
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-native-ui-components",
3
- "version": "14.0.0-alpha.4517121861",
3
+ "version": "14.0.0-alpha.4520122433",
4
4
  "description": "Applicaster Zapp React Native ui components for the Quick Brick App",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -27,14 +27,11 @@
27
27
  "url": "https://github.com/applicaster/quickbrick/issues"
28
28
  },
29
29
  "homepage": "https://github.com/applicaster/quickbrick#readme",
30
- "devDependencies": {
31
- "redux-mock-store": "^1.5.3"
32
- },
33
30
  "dependencies": {
34
- "@applicaster/applicaster-types": "14.0.0-alpha.4517121861",
35
- "@applicaster/zapp-react-native-bridge": "14.0.0-alpha.4517121861",
36
- "@applicaster/zapp-react-native-redux": "14.0.0-alpha.4517121861",
37
- "@applicaster/zapp-react-native-utils": "14.0.0-alpha.4517121861",
31
+ "@applicaster/applicaster-types": "14.0.0-alpha.4520122433",
32
+ "@applicaster/zapp-react-native-bridge": "14.0.0-alpha.4520122433",
33
+ "@applicaster/zapp-react-native-redux": "14.0.0-alpha.4520122433",
34
+ "@applicaster/zapp-react-native-utils": "14.0.0-alpha.4520122433",
38
35
  "promise": "^8.3.0",
39
36
  "url": "^0.11.0",
40
37
  "uuid": "^3.3.2"
@@ -42,10 +39,8 @@
42
39
  "peerDependencies": {
43
40
  "@applicaster/zapp-pipes-v2-client": "*",
44
41
  "@react-native-community/netinfo": "*",
45
- "immer": "*",
46
42
  "react": "*",
47
43
  "react-native": "*",
48
- "react-native-safe-area-context": "*",
49
44
  "react-native-svg": "*",
50
45
  "uglify-js": "*",
51
46
  "validate-color": "*",
@@ -1,27 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`When River has a general_content type renders River component correctly 1`] = `
4
- <View
5
- onLayout={[Function]}
6
- style={
7
- {
8
- "flex": 1,
9
- }
10
- }
11
- testID="on-layout-view"
12
- >
13
- <View
14
- style={
15
- {
16
- "display": "none",
17
- "flex": 1,
18
- }
19
- }
20
- >
21
- <View
22
- screenId="A1234"
23
- testID="general-content-screen"
24
- />
25
- </View>
26
- </View>
27
- `;
@@ -1,10 +0,0 @@
1
- import { useTheme } from "@applicaster/zapp-react-native-utils/theme";
2
- import { useConfiguration } from "../utils";
3
-
4
- export const useBackgroundColor = (): string => {
5
- const { modal_background_color: modalBackgroundColor } = useConfiguration();
6
-
7
- const theme = useTheme<BaseThemePropertiesMobile>();
8
-
9
- return modalBackgroundColor || theme?.status_background_color;
10
- };