@applicaster/zapp-react-native-ui-components 13.0.8-rc.2 → 13.0.9-alpha.9185626032
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/Cell/__tests__/CellWIthFocusable.test.js +3 -2
- package/Components/FeedLoader/FeedLoader.tsx +4 -14
- package/Components/FeedLoader/FeedLoaderHOC.tsx +19 -0
- package/Components/FeedLoader/index.js +2 -8
- package/Components/GeneralContentScreen/utils/useCurationAPI.ts +5 -6
- package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -0
- package/Components/MasterCell/utils/behaviorProvider.ts +82 -14
- package/Components/MasterCell/utils/index.ts +11 -5
- package/Components/River/RefreshControl.tsx +11 -17
- package/Components/River/__tests__/river.test.js +12 -26
- package/Contexts/ScreenContext/index.tsx +46 -6
- package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +221 -209
- package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +14 -16
- package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -20
- package/Decorators/RiverFeedLoader/index.tsx +22 -4
- package/Decorators/RiverFeedLoader/utils/index.ts +0 -18
- package/Decorators/ZappPipesDataConnector/__tests__/UrlFeedResolver.test.tsx +368 -0
- package/Decorators/ZappPipesDataConnector/resolvers/UrlFeedResolver.tsx +266 -0
- package/Decorators/ZappPipesDataConnector/utils/mongoFilter.ts +738 -0
- package/Decorators/ZappPipesDataConnector/utils/useFilter.tsx +136 -0
- package/package.json +5 -5
- 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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-native-ui-components",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.9-alpha.9185626032",
|
|
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",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"redux-mock-store": "^1.5.3"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@applicaster/applicaster-types": "13.0.
|
|
35
|
-
"@applicaster/zapp-react-native-bridge": "13.0.
|
|
36
|
-
"@applicaster/zapp-react-native-redux": "13.0.
|
|
37
|
-
"@applicaster/zapp-react-native-utils": "13.0.
|
|
34
|
+
"@applicaster/applicaster-types": "13.0.9-alpha.9185626032",
|
|
35
|
+
"@applicaster/zapp-react-native-bridge": "13.0.9-alpha.9185626032",
|
|
36
|
+
"@applicaster/zapp-react-native-redux": "13.0.9-alpha.9185626032",
|
|
37
|
+
"@applicaster/zapp-react-native-utils": "13.0.9-alpha.9185626032",
|
|
38
38
|
"promise": "^8.3.0",
|
|
39
39
|
"react-router-native": "^5.1.2",
|
|
40
40
|
"url": "^0.11.0",
|
|
@@ -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
|
-
`;
|