@applicaster/zapp-react-native-ui-components 14.0.0-alpha.1887720441 → 14.0.0-alpha.2012126431

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 (39) hide show
  1. package/Components/BaseFocusable/index.tsx +23 -12
  2. package/Components/Cell/__tests__/CellWIthFocusable.test.js +3 -2
  3. package/Components/FeedLoader/FeedLoader.tsx +6 -15
  4. package/Components/FeedLoader/FeedLoaderHOC.tsx +21 -0
  5. package/Components/FeedLoader/index.js +2 -8
  6. package/Components/FreezeWithCallback/__tests__/index.test.tsx +67 -43
  7. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +5 -6
  8. package/Components/Layout/TV/__tests__/index.test.tsx +0 -1
  9. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -0
  10. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +10 -10
  11. package/Components/MasterCell/DefaultComponents/__tests__/text.test.tsx +18 -18
  12. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/index.test.tsx +10 -10
  13. package/Components/MasterCell/utils/behaviorProvider.ts +82 -14
  14. package/Components/MasterCell/utils/index.ts +11 -5
  15. package/Components/OfflineHandler/__tests__/index.test.tsx +6 -13
  16. package/Components/River/ComponentsMap/hooks/__tests__/useLoadingState.test.ts +0 -1
  17. package/Components/River/RefreshControl.tsx +11 -19
  18. package/Components/River/__tests__/river.test.js +12 -26
  19. package/Components/Screen/__tests__/Screen.test.tsx +5 -17
  20. package/Components/Screen/navigationHandler.ts +20 -2
  21. package/Components/Tabs/Tabs.tsx +2 -3
  22. package/Components/Touchable/__tests__/touchable.test.tsx +12 -17
  23. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +3 -9
  24. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -5
  25. package/Contexts/ConfigutaionContext/__tests__/ConfigurationProvider.test.tsx +3 -3
  26. package/Contexts/ScreenContext/index.tsx +46 -6
  27. package/Decorators/ConfigurationWrapper/__tests__/withConfigurationProvider.test.tsx +3 -3
  28. package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +221 -209
  29. package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +14 -16
  30. package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -20
  31. package/Decorators/RiverFeedLoader/index.tsx +22 -4
  32. package/Decorators/RiverFeedLoader/utils/index.ts +0 -18
  33. package/Decorators/ZappPipesDataConnector/__tests__/UrlFeedResolver.test.tsx +27 -27
  34. package/Decorators/ZappPipesDataConnector/resolvers/UrlFeedResolver.tsx +35 -10
  35. package/Decorators/ZappPipesDataConnector/utils/mongoFilter.ts +738 -0
  36. package/Decorators/ZappPipesDataConnector/utils/useFilter.tsx +136 -0
  37. package/events/index.ts +1 -0
  38. package/package.json +5 -5
  39. package/Components/River/__tests__/__snapshots__/river.test.js.snap +0 -27
@@ -0,0 +1,136 @@
1
+ import React, { useCallback } 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_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
+ const rebuildFilter = useCallback(() => {
37
+ if (!filter) {
38
+ setInflatedFilter(null);
39
+
40
+ return;
41
+ }
42
+
43
+ resolveObjectValues(filter, screenResolvers)
44
+ .then((resolvedFilter) => {
45
+ setInflatedFilter(resolvedFilter);
46
+ })
47
+ .catch((error) => {
48
+ log_error(`Error resolving filter values: ${error.message}`);
49
+ setInflatedFilter(null);
50
+ });
51
+
52
+ rebuildFilter();
53
+
54
+ const atValues = extractAtValues(filter);
55
+
56
+ if (atValues.length) {
57
+ const screenSubscriptions: (() => void)[] = atValues
58
+ .filter((data) => data.startsWith("screen/"))
59
+ .map((data: string) => {
60
+ const keyName = data.replace("screen/", "");
61
+
62
+ const provider = ScreenSingleValueProvider.getProvider(
63
+ keyName,
64
+ pathname,
65
+ screenStateStore
66
+ );
67
+
68
+ const subscription = provider.getObservable().subscribe((value) => {
69
+ if (value !== undefined) {
70
+ rebuildFilter();
71
+ }
72
+ });
73
+
74
+ return () => subscription.unsubscribe();
75
+ });
76
+
77
+ const storageSubscriptions: (() => void)[] = atValues
78
+ .filter((data) => !data.startsWith("screen/"))
79
+ .flatMap((data: string) => {
80
+ const keyName = data.replace("ctx/", "");
81
+ const { namespace, key } = getNamespaceAndKey(keyName);
82
+
83
+ return [
84
+ localStorage.addListener({ key, namespace }, rebuildFilter),
85
+ sessionStorage.addListener({ key, namespace }, rebuildFilter),
86
+ ];
87
+ });
88
+
89
+ const subscriptions = [...screenSubscriptions, ...storageSubscriptions];
90
+
91
+ return () => subscriptions.forEach((listener) => listener());
92
+ }
93
+ }, [filter]);
94
+
95
+ const filterFunc = useCallback(
96
+ (zappPipesData: ZappPipesData) => {
97
+ const { data } = zappPipesData;
98
+
99
+ if (!data || !data.entry) {
100
+ return zappPipesData;
101
+ }
102
+
103
+ const noResultBehavior =
104
+ data?.extensions?.filter?.no_result_behavior || "show_nothing";
105
+
106
+ if (data.extensions?.filter?.expression) {
107
+ setFilter(data.extensions.filter.expression);
108
+ }
109
+
110
+ if (!inflatedFilter) {
111
+ return zappPipesData;
112
+ }
113
+
114
+ const filteredEntries = filterObjects(data.entry, inflatedFilter);
115
+
116
+ if (!filteredEntries.length && noResultBehavior === "show_all") {
117
+ return zappPipesData;
118
+ }
119
+
120
+ return {
121
+ ...zappPipesData,
122
+ data: {
123
+ ...data,
124
+ entry: filteredEntries,
125
+ },
126
+ } as ZappPipesData;
127
+ },
128
+ [inflatedFilter, setFilter]
129
+ );
130
+
131
+ if (!zappPipesData || !zappPipesData.data) {
132
+ return (zappPipesData) => zappPipesData;
133
+ }
134
+
135
+ return filterFunc;
136
+ };
package/events/index.ts CHANGED
@@ -2,4 +2,5 @@ export enum QBUIComponentEvents {
2
2
  toggleGradient = "toggleGradient",
3
3
  topMenuBarTV_onFocus = "topMenuBarTV_onFocus",
4
4
  navigatorReplaceItem = "navigatorReplaceItem",
5
+ scrollVerticallyToInitialOffset = "scrollVerticallyToInitialOffset",
5
6
  }
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.1887720441",
3
+ "version": "14.0.0-alpha.2012126431",
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",
@@ -28,10 +28,10 @@
28
28
  },
29
29
  "homepage": "https://github.com/applicaster/quickbrick#readme",
30
30
  "dependencies": {
31
- "@applicaster/applicaster-types": "14.0.0-alpha.1887720441",
32
- "@applicaster/zapp-react-native-bridge": "14.0.0-alpha.1887720441",
33
- "@applicaster/zapp-react-native-redux": "14.0.0-alpha.1887720441",
34
- "@applicaster/zapp-react-native-utils": "14.0.0-alpha.1887720441",
31
+ "@applicaster/applicaster-types": "14.0.0-alpha.2012126431",
32
+ "@applicaster/zapp-react-native-bridge": "14.0.0-alpha.2012126431",
33
+ "@applicaster/zapp-react-native-redux": "14.0.0-alpha.2012126431",
34
+ "@applicaster/zapp-react-native-utils": "14.0.0-alpha.2012126431",
35
35
  "promise": "^8.3.0",
36
36
  "url": "^0.11.0",
37
37
  "uuid": "^3.3.2"
@@ -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
- `;