@applicaster/zapp-react-native-ui-components 14.0.0-alpha.5114565431 → 14.0.0-alpha.5203410334

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 (50) hide show
  1. package/Components/BaseFocusable/index.tsx +23 -12
  2. package/Components/Cell/__tests__/CellWIthFocusable.test.js +3 -2
  3. package/Components/Cell/index.js +1 -1
  4. package/Components/ComponentResolver/index.ts +1 -1
  5. package/Components/FeedLoader/FeedLoader.tsx +6 -15
  6. package/Components/FeedLoader/FeedLoaderHOC.tsx +21 -0
  7. package/Components/FeedLoader/index.js +2 -8
  8. package/Components/FreezeWithCallback/__tests__/index.test.tsx +67 -43
  9. package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +42 -59
  10. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +13 -10
  11. package/Components/Layout/TV/LayoutBackground.tsx +1 -1
  12. package/Components/Layout/TV/__tests__/index.test.tsx +0 -1
  13. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -0
  14. package/Components/MasterCell/DefaultComponents/Button.tsx +1 -1
  15. package/Components/MasterCell/DefaultComponents/ImageContainer/index.tsx +1 -1
  16. package/Components/MasterCell/DefaultComponents/__tests__/image.test.js +10 -10
  17. package/Components/MasterCell/DefaultComponents/__tests__/text.test.tsx +18 -18
  18. package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/index.test.tsx +10 -10
  19. package/Components/MasterCell/utils/behaviorProvider.ts +82 -14
  20. package/Components/MasterCell/utils/index.ts +11 -5
  21. package/Components/OfflineHandler/__tests__/index.test.tsx +26 -35
  22. package/Components/PlayerContainer/ErrorDisplay/index.ts +1 -1
  23. package/Components/PlayerContainer/ProgramInfo/index.tsx +1 -1
  24. package/Components/PlayerContainer/index.ts +1 -1
  25. package/Components/River/ComponentsMap/hooks/__tests__/useLoadingState.test.ts +378 -0
  26. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +2 -2
  27. package/Components/River/RefreshControl.tsx +11 -17
  28. package/Components/River/__tests__/river.test.js +12 -26
  29. package/Components/River/index.tsx +1 -1
  30. package/Components/Screen/__tests__/Screen.test.tsx +28 -29
  31. package/Components/Tabs/Tabs.tsx +2 -3
  32. package/Components/Touchable/__tests__/touchable.test.tsx +12 -17
  33. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +3 -9
  34. package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -5
  35. package/Contexts/ConfigutaionContext/__tests__/ConfigurationProvider.test.tsx +3 -3
  36. package/Contexts/ScreenContext/index.tsx +46 -6
  37. package/Decorators/ConfigurationWrapper/__tests__/withConfigurationProvider.test.tsx +3 -3
  38. package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +221 -209
  39. package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +14 -16
  40. package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -20
  41. package/Decorators/RiverFeedLoader/index.tsx +22 -4
  42. package/Decorators/RiverFeedLoader/utils/index.ts +0 -18
  43. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +3 -6
  44. package/Decorators/ZappPipesDataConnector/__tests__/UrlFeedResolver.test.tsx +27 -27
  45. package/Decorators/ZappPipesDataConnector/resolvers/UrlFeedResolver.tsx +35 -10
  46. package/Decorators/ZappPipesDataConnector/utils/mongoFilter.ts +738 -0
  47. package/Decorators/ZappPipesDataConnector/utils/useFilter.tsx +157 -0
  48. package/events/index.ts +1 -0
  49. package/package.json +5 -6
  50. package/Components/River/__tests__/__snapshots__/river.test.js.snap +0 -27
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { View, TouchableOpacity } from "react-native";
3
- import { create, act } from "react-test-renderer";
3
+ import { render } from "@testing-library/react-native";
4
4
 
5
5
  import { Touchable } from "..";
6
6
 
@@ -23,38 +23,31 @@ describe("<Touchable />", () => {
23
23
  });
24
24
 
25
25
  it("has accessible flag set to false", () => {
26
- let wrapper;
26
+ const { toJSON, UNSAFE_getByType } = render(<Touchable {...props} />);
27
27
 
28
- act(() => {
29
- wrapper = create(<Touchable {...props} />);
30
- });
31
-
32
- const touchableWrapper = wrapper.root.findByType(TouchableOpacity);
33
- expect(wrapper.toJSON()).toMatchSnapshot();
28
+ const touchableWrapper = UNSAFE_getByType(TouchableOpacity);
29
+ expect(toJSON()).toMatchSnapshot();
34
30
  expect(touchableWrapper.props).toHaveProperty("accessible", false);
35
31
  });
36
32
  });
37
33
 
38
34
  describe("when not running in automated tests environment", () => {
39
- let wrapper;
40
-
41
- act(() => {
42
- wrapper = create(<Touchable {...props} />);
43
- });
44
-
45
- const touchableWrapper = wrapper.root.findByType(TouchableOpacity);
46
-
47
35
  beforeEach(props.onPress.mockClear);
48
36
 
49
37
  it("renders correctly", () => {
50
- expect(wrapper.toJSON()).toMatchSnapshot();
38
+ const { toJSON } = render(<Touchable {...props} />);
39
+ expect(toJSON()).toMatchSnapshot();
51
40
  });
52
41
 
53
42
  it("has accessible flag set to true", () => {
43
+ const { UNSAFE_getByType } = render(<Touchable {...props} />);
44
+ const touchableWrapper = UNSAFE_getByType(TouchableOpacity);
54
45
  expect(touchableWrapper.props).toHaveProperty("accessible", true);
55
46
  });
56
47
 
57
48
  it("assigns testID and accessibilityLabel props correctly", () => {
49
+ const { UNSAFE_getByType } = render(<Touchable {...props} />);
50
+ const touchableWrapper = UNSAFE_getByType(TouchableOpacity);
58
51
  expect(touchableWrapper.props).toHaveProperty("testID", props.testID);
59
52
 
60
53
  expect(touchableWrapper.props).toHaveProperty(
@@ -64,6 +57,8 @@ describe("<Touchable />", () => {
64
57
  });
65
58
 
66
59
  it("calls the onPress event when it is pressed", () => {
60
+ const { UNSAFE_getByType } = render(<Touchable {...props} />);
61
+ const touchableWrapper = UNSAFE_getByType(TouchableOpacity);
67
62
  touchableWrapper.props.onPress();
68
63
  expect(props.onPress).toHaveBeenCalledTimes(1);
69
64
  });
@@ -1,9 +1,8 @@
1
1
  import React from "react";
2
- import { Animated, Platform, StyleSheet, View } from "react-native";
2
+ import { Animated, StyleSheet, View } from "react-native";
3
3
 
4
4
  import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks";
5
5
  import {
6
- GestureHandlerRootView,
7
6
  NativeViewGestureHandler,
8
7
  PanGestureHandler,
9
8
  State,
@@ -357,15 +356,10 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
357
356
  };
358
357
  }, [playerAnimationState, isAudioItem, isMinimizedModal]);
359
358
 
360
- const Wrapper = React.useMemo(
361
- () => (Platform.OS === "android" ? GestureHandlerRootView : View),
362
- []
363
- );
364
-
365
359
  const scrollEnabled = isMaximizedModal && isNotMinimizeMaximazeAnimation;
366
360
 
367
361
  return (
368
- <Wrapper style={generalStyles.container}>
362
+ <View style={generalStyles.container}>
369
363
  <TapGestureHandler
370
364
  maxDurationMs={100000}
371
365
  ref={tapHandlerRef}
@@ -405,7 +399,7 @@ export const AnimatedScrollModalComponent = ({ children }: Props) => {
405
399
  </PanGestureHandler>
406
400
  </View>
407
401
  </TapGestureHandler>
408
- </Wrapper>
402
+ </View>
409
403
  );
410
404
  };
411
405
 
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import renderer from "react-test-renderer";
2
+ import { render } from "@testing-library/react-native";
3
3
 
4
4
  const props = {
5
5
  entry: {},
@@ -42,16 +42,16 @@ const { PlayerDetails } = require("../PlayerDetails");
42
42
 
43
43
  describe("PlayerDetails", () => {
44
44
  it("renders properly", () => {
45
- const element = renderer.create(<PlayerDetails {...props} />);
45
+ const { toJSON } = render(<PlayerDetails {...props} />);
46
46
 
47
- expect(element).toMatchSnapshot();
47
+ expect(toJSON()).toMatchSnapshot();
48
48
  });
49
49
 
50
50
  it("renders properly on tablet in landscape orientation", () => {
51
- const element = renderer.create(
51
+ const { toJSON } = render(
52
52
  <PlayerDetails {...props} isTabletLandscape={true} />
53
53
  );
54
54
 
55
- expect(element).toMatchSnapshot();
55
+ expect(toJSON()).toMatchSnapshot();
56
56
  });
57
57
  });
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import TestRenderer from "react-test-renderer";
2
+ import { render } from "@testing-library/react-native";
3
3
  import { View } from "react-native";
4
4
  import { useConfiguration } from "@applicaster/zapp-react-native-utils/reactHooks/configuration";
5
5
 
@@ -14,12 +14,12 @@ describe("withConfigurationProvider", () => {
14
14
  };
15
15
 
16
16
  it("provides configuration to children", () => {
17
- const wrapper = TestRenderer.create(
17
+ const { toJSON } = render(
18
18
  <ConfigurationProvider configuration={{ target: "foobar" }}>
19
19
  <TestComponent />
20
20
  </ConfigurationProvider>
21
21
  );
22
22
 
23
- expect(wrapper.toJSON()).toMatchSnapshot();
23
+ expect(toJSON()).toMatchSnapshot();
24
24
  });
25
25
  });
@@ -13,7 +13,8 @@ import {
13
13
  } from "@applicaster/zapp-react-native-utils/reactHooks";
14
14
  import { useModalNavigationContext } from "@applicaster/zapp-react-native-ui-components/Contexts/ModalNavigationContext";
15
15
  import { useNestedNavigationContext } from "@applicaster/zapp-react-native-ui-components/Contexts/NestedNavigationContext";
16
- import { create, StoreApi, UseBoundStore } from "zustand";
16
+ import { create } from "zustand";
17
+ import { subscribeWithSelector } from "zustand/middleware";
17
18
  import { useShallow } from "zustand/react/shallow";
18
19
  import { Animated } from "react-native";
19
20
 
@@ -39,11 +40,26 @@ interface NavBarState {
39
40
  setSummary: (subtitle: string) => void;
40
41
  }
41
42
 
42
- type ScreenContextType = {
43
- _navBarStore: UseBoundStore<StoreApi<NavBarStoreState>>;
44
- navBar: NavBarState;
45
- legacyFormatScreenData: LegacyNavigationScreenData | null;
46
- };
43
+ const createStateStore = () =>
44
+ create(
45
+ subscribeWithSelector<ScreenStateStore>((set) => ({
46
+ data: {},
47
+ setValue: (key, value) =>
48
+ set((state) => ({
49
+ data: {
50
+ ...state.data,
51
+ [key]: value,
52
+ },
53
+ })),
54
+ removeValue: (key) =>
55
+ set((state) => {
56
+ const newData = { ...state.data };
57
+ delete newData[key];
58
+
59
+ return { data: newData };
60
+ }),
61
+ }))
62
+ );
47
63
 
48
64
  const createStore = () =>
49
65
  create<NavBarStoreState>((set) => ({
@@ -65,7 +81,15 @@ const createStore = () =>
65
81
  },
66
82
  }));
67
83
 
84
+ type ScreenContextType = {
85
+ _navBarStore: ReturnType<typeof createStore>;
86
+ _stateStore: ReturnType<typeof createStateStore>;
87
+ navBar: NavBarState;
88
+ legacyFormatScreenData: LegacyNavigationScreenData | null;
89
+ };
90
+
68
91
  export const ScreenContext = createContext<ScreenContextType>({
92
+ _stateStore: createStateStore(),
69
93
  _navBarStore: createStore(),
70
94
  navBar: {
71
95
  visible: true,
@@ -103,6 +127,21 @@ export function ScreenContextProvider({
103
127
  null
104
128
  );
105
129
 
130
+ const screenStateRef = useRef<null | ReturnType<typeof createStateStore>>(
131
+ null
132
+ );
133
+
134
+ const getScreenState = useCallback(() => {
135
+ if (screenStateRef.current !== null) {
136
+ return screenStateRef.current;
137
+ }
138
+
139
+ const stateStore = createStateStore();
140
+ screenStateRef.current = stateStore;
141
+
142
+ return stateStore;
143
+ }, []);
144
+
106
145
  const getScreenNavBarState = useCallback(() => {
107
146
  if (screenNavBarStateRef.current !== null) {
108
147
  return screenNavBarStateRef.current;
@@ -163,6 +202,7 @@ export function ScreenContextProvider({
163
202
  value={useMemo(
164
203
  () => ({
165
204
  _navBarStore: getScreenNavBarState(),
205
+ _stateStore: getScreenState(),
166
206
  navBar: navBarState,
167
207
  legacyFormatScreenData: routeScreenData,
168
208
  }),
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import TestRenderer from "react-test-renderer";
2
+ import { render } from "@testing-library/react-native";
3
3
  import { useConfiguration } from "@applicaster/zapp-react-native-utils/reactHooks/configuration";
4
4
  import { View } from "react-native";
5
5
  import { withConfigurationProvider } from "@applicaster/zapp-react-native-ui-components/Decorators/ConfigurationWrapper";
@@ -15,12 +15,12 @@ describe("withConfigurationProvider", () => {
15
15
  it("correctly passes all the configuration keys child component", () => {
16
16
  const Component = withConfigurationProvider(TestComponent);
17
17
 
18
- const wrapper = TestRenderer.create(
18
+ const { toJSON } = render(
19
19
  <Component
20
20
  screenData={{ styles: {}, general: {}, data: { source: "test" } }}
21
21
  />
22
22
  );
23
23
 
24
- expect(wrapper.toJSON()).toMatchSnapshot();
24
+ expect(toJSON()).toMatchSnapshot();
25
25
  });
26
26
  });
@@ -1,214 +1,226 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`WithRiverFeedLoader renders correctly 1`] = `
4
- <View
5
- dispatch={[MockFunction]}
6
- river={
7
- {
8
- "id": "A1234",
9
- "ui_components": [
10
- {
11
- "data": {
12
- "source": "http://datasource0",
13
- },
14
- "rules": {
15
- "clear_cache_on_reload": false,
16
- },
17
- },
18
- {
19
- "data": {
20
- "source": "http://datasource1",
21
- },
22
- "rules": {
23
- "clear_cache_on_reload": false,
24
- },
25
- },
26
- {
27
- "data": {
28
- "source": "http://datasource2",
29
- },
30
- "rules": {
31
- "clear_cache_on_reload": false,
32
- },
33
- },
34
- {
35
- "data": {
36
- "source": "http://datasource3",
37
- },
38
- "rules": {
39
- "clear_cache_on_reload": false,
40
- },
41
- },
42
- {
43
- "data": {
44
- "source": "http://datasource4",
45
- },
46
- "rules": {
47
- "clear_cache_on_reload": false,
48
- },
49
- },
50
- {
51
- "data": {
52
- "source": "http://datasource5",
53
- },
54
- "rules": {
55
- "clear_cache_on_reload": false,
56
- },
57
- },
58
- {
59
- "data": {
60
- "source": "http://datasource6",
61
- },
62
- "rules": {
63
- "clear_cache_on_reload": false,
64
- },
65
- },
66
- {
67
- "data": {
68
- "source": "http://datasource7",
69
- },
70
- "rules": {
71
- "clear_cache_on_reload": false,
72
- },
73
- },
74
- {
75
- "data": {
76
- "source": "http://datasource8",
77
- },
78
- "rules": {
79
- "clear_cache_on_reload": false,
80
- },
81
- },
82
- {
83
- "data": {
84
- "source": "http://datasource9",
85
- },
86
- "rules": {
87
- "clear_cache_on_reload": false,
88
- },
89
- },
90
- {
91
- "data": {
92
- "source": "http://datasource10",
93
- },
94
- "rules": {
95
- "clear_cache_on_reload": false,
96
- },
97
- },
98
- {
99
- "data": {
100
- "source": "http://datasource11",
101
- },
102
- "rules": {
103
- "clear_cache_on_reload": false,
104
- },
105
- },
106
- {
107
- "data": {
108
- "source": "http://datasource12",
109
- },
110
- "rules": {
111
- "clear_cache_on_reload": true,
112
- },
113
- },
114
- {
115
- "data": {
116
- "source": "http://datasource13",
117
- },
118
- "rules": {
119
- "clear_cache_on_reload": false,
120
- },
121
- },
122
- {
123
- "data": {
124
- "source": "http://datasource14",
125
- },
126
- "rules": {
127
- "clear_cache_on_reload": false,
128
- },
129
- },
130
- {
131
- "data": {
132
- "source": "http://datasource15",
133
- },
134
- "rules": {
135
- "clear_cache_on_reload": false,
136
- },
137
- },
138
- {
139
- "data": {
140
- "source": "http://datasource16",
141
- },
142
- "rules": {
143
- "clear_cache_on_reload": false,
144
- },
145
- },
146
- {
147
- "data": {
148
- "source": "http://datasource17",
149
- },
150
- "rules": {
151
- "clear_cache_on_reload": false,
152
- },
153
- },
154
- {
155
- "data": {
156
- "source": "http://datasource18",
157
- },
158
- "rules": {
159
- "clear_cache_on_reload": false,
160
- },
161
- },
162
- {
163
- "data": {
164
- "source": "http://datasource19",
165
- },
166
- "rules": {
167
- "clear_cache_on_reload": false,
168
- },
169
- },
170
- {
171
- "data": {
172
- "source": "http://datasource20",
173
- },
174
- "rules": {
175
- "clear_cache_on_reload": true,
176
- },
177
- },
178
- {
179
- "data": {
180
- "source": "http://datasource21",
181
- },
182
- "rules": {
183
- "clear_cache_on_reload": false,
184
- },
185
- },
186
- {
187
- "data": {
188
- "source": "http://datasource22",
189
- },
190
- "rules": {
191
- "clear_cache_on_reload": false,
192
- },
193
- },
194
- {
195
- "data": {
196
- "source": "http://datasource23",
197
- },
198
- "rules": {
199
- "clear_cache_on_reload": false,
200
- },
201
- },
202
- {
203
- "data": {
204
- "source": "http://datasource24",
205
- },
206
- "rules": {
207
- "clear_cache_on_reload": false,
208
- },
209
- },
210
- ],
211
- }
4
+ <RNCSafeAreaProvider
5
+ onInsetsChange={[Function]}
6
+ style={
7
+ [
8
+ {
9
+ "flex": 1,
10
+ },
11
+ undefined,
12
+ ]
212
13
  }
213
- />
14
+ >
15
+ <View
16
+ dispatch={[MockFunction]}
17
+ river={
18
+ {
19
+ "id": "A1234",
20
+ "ui_components": [
21
+ {
22
+ "data": {
23
+ "source": "http://datasource0",
24
+ },
25
+ "rules": {
26
+ "clear_cache_on_reload": false,
27
+ },
28
+ },
29
+ {
30
+ "data": {
31
+ "source": "http://datasource1",
32
+ },
33
+ "rules": {
34
+ "clear_cache_on_reload": false,
35
+ },
36
+ },
37
+ {
38
+ "data": {
39
+ "source": "http://datasource2",
40
+ },
41
+ "rules": {
42
+ "clear_cache_on_reload": false,
43
+ },
44
+ },
45
+ {
46
+ "data": {
47
+ "source": "http://datasource3",
48
+ },
49
+ "rules": {
50
+ "clear_cache_on_reload": false,
51
+ },
52
+ },
53
+ {
54
+ "data": {
55
+ "source": "http://datasource4",
56
+ },
57
+ "rules": {
58
+ "clear_cache_on_reload": false,
59
+ },
60
+ },
61
+ {
62
+ "data": {
63
+ "source": "http://datasource5",
64
+ },
65
+ "rules": {
66
+ "clear_cache_on_reload": false,
67
+ },
68
+ },
69
+ {
70
+ "data": {
71
+ "source": "http://datasource6",
72
+ },
73
+ "rules": {
74
+ "clear_cache_on_reload": false,
75
+ },
76
+ },
77
+ {
78
+ "data": {
79
+ "source": "http://datasource7",
80
+ },
81
+ "rules": {
82
+ "clear_cache_on_reload": false,
83
+ },
84
+ },
85
+ {
86
+ "data": {
87
+ "source": "http://datasource8",
88
+ },
89
+ "rules": {
90
+ "clear_cache_on_reload": false,
91
+ },
92
+ },
93
+ {
94
+ "data": {
95
+ "source": "http://datasource9",
96
+ },
97
+ "rules": {
98
+ "clear_cache_on_reload": false,
99
+ },
100
+ },
101
+ {
102
+ "data": {
103
+ "source": "http://datasource10",
104
+ },
105
+ "rules": {
106
+ "clear_cache_on_reload": false,
107
+ },
108
+ },
109
+ {
110
+ "data": {
111
+ "source": "http://datasource11",
112
+ },
113
+ "rules": {
114
+ "clear_cache_on_reload": false,
115
+ },
116
+ },
117
+ {
118
+ "data": {
119
+ "source": "http://datasource12",
120
+ },
121
+ "rules": {
122
+ "clear_cache_on_reload": true,
123
+ },
124
+ },
125
+ {
126
+ "data": {
127
+ "source": "http://datasource13",
128
+ },
129
+ "rules": {
130
+ "clear_cache_on_reload": false,
131
+ },
132
+ },
133
+ {
134
+ "data": {
135
+ "source": "http://datasource14",
136
+ },
137
+ "rules": {
138
+ "clear_cache_on_reload": false,
139
+ },
140
+ },
141
+ {
142
+ "data": {
143
+ "source": "http://datasource15",
144
+ },
145
+ "rules": {
146
+ "clear_cache_on_reload": false,
147
+ },
148
+ },
149
+ {
150
+ "data": {
151
+ "source": "http://datasource16",
152
+ },
153
+ "rules": {
154
+ "clear_cache_on_reload": false,
155
+ },
156
+ },
157
+ {
158
+ "data": {
159
+ "source": "http://datasource17",
160
+ },
161
+ "rules": {
162
+ "clear_cache_on_reload": false,
163
+ },
164
+ },
165
+ {
166
+ "data": {
167
+ "source": "http://datasource18",
168
+ },
169
+ "rules": {
170
+ "clear_cache_on_reload": false,
171
+ },
172
+ },
173
+ {
174
+ "data": {
175
+ "source": "http://datasource19",
176
+ },
177
+ "rules": {
178
+ "clear_cache_on_reload": false,
179
+ },
180
+ },
181
+ {
182
+ "data": {
183
+ "source": "http://datasource20",
184
+ },
185
+ "rules": {
186
+ "clear_cache_on_reload": true,
187
+ },
188
+ },
189
+ {
190
+ "data": {
191
+ "source": "http://datasource21",
192
+ },
193
+ "rules": {
194
+ "clear_cache_on_reload": false,
195
+ },
196
+ },
197
+ {
198
+ "data": {
199
+ "source": "http://datasource22",
200
+ },
201
+ "rules": {
202
+ "clear_cache_on_reload": false,
203
+ },
204
+ },
205
+ {
206
+ "data": {
207
+ "source": "http://datasource23",
208
+ },
209
+ "rules": {
210
+ "clear_cache_on_reload": false,
211
+ },
212
+ },
213
+ {
214
+ "data": {
215
+ "source": "http://datasource24",
216
+ },
217
+ "rules": {
218
+ "clear_cache_on_reload": false,
219
+ },
220
+ },
221
+ ],
222
+ }
223
+ }
224
+ />
225
+ </RNCSafeAreaProvider>
214
226
  `;