@applicaster/zapp-react-native-ui-components 14.0.0-alpha.3126393935 → 14.0.0-alpha.3471443312

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.
@@ -1,6 +1,6 @@
1
1
  import * as R from "ramda";
2
2
 
3
- import { connectToStore } from "@applicaster/zapp-react-native-redux";
3
+ import { connectToStore } from "@applicaster/zapp-react-native-redux/utils/connectToStore";
4
4
  import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
5
5
 
6
6
  import {
@@ -1,6 +1,6 @@
1
1
  import * as R from "ramda";
2
2
 
3
- import { connectToStore } from "@applicaster/zapp-react-native-redux";
3
+ import { connectToStore } from "@applicaster/zapp-react-native-redux/utils/connectToStore";
4
4
 
5
5
  import { ComponentResolverComponent } from "./ComponentResolver";
6
6
 
@@ -1,6 +1,6 @@
1
1
  import * as R from "ramda";
2
2
 
3
- import { connectToStore } from "@applicaster/zapp-react-native-redux";
3
+ import { connectToStore } from "@applicaster/zapp-react-native-redux/utils/connectToStore";
4
4
  import { loadPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
5
5
 
6
6
  import { FeedLoaderComponent } from "./FeedLoader";
@@ -8,13 +8,10 @@ import {
8
8
  useCurationAPI,
9
9
  } from "../useCurationAPI";
10
10
  import * as redux from "react-redux";
11
- import * as layoutPresets from "@applicaster/zapp-react-native-redux/hooks/useLayoutPresets";
12
- import * as pipesFeeds from "@applicaster/zapp-react-native-redux/hooks/useZappPipesFeeds";
13
11
  import { NavigationContext } from "@applicaster/zapp-react-native-ui-components/Contexts/NavigationContext";
14
12
  import { PathnameContext } from "@applicaster/zapp-react-native-ui-components/Contexts/PathnameContext";
15
13
 
16
- import { Provider } from "react-redux";
17
- import configureStore from "redux-mock-store";
14
+ import { WrappedWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
18
15
 
19
16
  jest.mock(
20
17
  "@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute",
@@ -42,19 +39,20 @@ const mainStackNavigator = {
42
39
  },
43
40
  };
44
41
 
45
- const store = configureStore()({});
46
-
47
- const wrapper = ({ children }) => (
48
- <Provider store={store}>
49
- <NavigationContext.Provider
50
- value={{ ...mainStackNavigator, currentRoute: homeStack.route }}
51
- >
52
- <PathnameContext.Provider value={homeStack.route}>
53
- {children}
54
- </PathnameContext.Provider>
55
- </NavigationContext.Provider>
56
- </Provider>
57
- );
42
+ const getWrapper =
43
+ (store) =>
44
+ // eslint-disable-next-line react/display-name, react/prop-types
45
+ ({ children }) => (
46
+ <WrappedWithProviders store={store}>
47
+ <NavigationContext.Provider
48
+ value={{ ...mainStackNavigator, currentRoute: homeStack.route }}
49
+ >
50
+ <PathnameContext.Provider value={homeStack.route}>
51
+ {children}
52
+ </PathnameContext.Provider>
53
+ </NavigationContext.Provider>
54
+ </WrappedWithProviders>
55
+ );
58
56
 
59
57
  describe("getTransformedPreset should return the passed components if smartComponents is empty", () => {
60
58
  describe("getTransformedPreset function", () => {
@@ -312,19 +310,10 @@ describe("getTransformedPreset should return the passed components if smartCompo
312
310
  { id: "02", component_type: "not_smart_another" },
313
311
  ];
314
312
 
315
- // mock the hooks
316
- const mockUseZappPipesFeeds = jest.spyOn(pipesFeeds, "useZappPipesFeeds");
317
- mockUseZappPipesFeeds.mockReturnValue({});
318
-
319
- const mockUseLayoutPresets = jest.spyOn(
320
- layoutPresets,
321
- "useLayoutPresets"
322
- );
323
-
324
- mockUseLayoutPresets.mockReturnValue({});
325
-
326
313
  const { result } = renderHook(() => useCurationAPI(mockComponents), {
327
- wrapper,
314
+ wrapper: getWrapper({
315
+ zappPipes: {},
316
+ }),
328
317
  });
329
318
 
330
319
  // if there are no smart components, it should return the original array
@@ -366,18 +355,15 @@ describe("getTransformedPreset should return the passed components if smartCompo
366
355
  "http://curation": { loading: false, data: { entry: mockPresetEntry } },
367
356
  };
368
357
 
369
- const mockUseZappPipesFeeds = jest.spyOn(pipesFeeds, "useZappPipesFeeds");
370
- mockUseZappPipesFeeds.mockReturnValue(mockFeeds);
371
-
372
- const mockUseLayoutPresets = jest.spyOn(
373
- layoutPresets,
374
- "useLayoutPresets"
375
- );
376
-
377
- mockUseLayoutPresets.mockReturnValue(mockLayoutPresets);
378
-
379
358
  const { result } = renderHook(() => useCurationAPI(mockComponents), {
380
- wrapper,
359
+ wrapper: getWrapper({
360
+ zappPipes: mockFeeds,
361
+ presetsMapping: {
362
+ presets_mappings: {
363
+ ...mockLayoutPresets,
364
+ },
365
+ },
366
+ }),
381
367
  });
382
368
 
383
369
  expect(result.current).toEqual(mockTransformedComponents);
@@ -437,19 +423,15 @@ describe("getTransformedPreset should return the passed components if smartCompo
437
423
  },
438
424
  };
439
425
 
440
- // mock the hooks
441
- const mockUseZappPipesFeeds = jest.spyOn(pipesFeeds, "useZappPipesFeeds");
442
- mockUseZappPipesFeeds.mockReturnValue(mockFeeds);
443
-
444
- const mockUseLayoutPresets = jest.spyOn(
445
- layoutPresets,
446
- "useLayoutPresets"
447
- );
448
-
449
- mockUseLayoutPresets.mockReturnValue(mockLayoutPresets);
450
-
451
426
  const { result } = renderHook(() => useCurationAPI(mockComponents), {
452
- wrapper,
427
+ wrapper: getWrapper({
428
+ zappPipes: mockFeeds,
429
+ presetsMapping: {
430
+ presets_mappings: {
431
+ ...mockLayoutPresets,
432
+ },
433
+ },
434
+ }),
453
435
  });
454
436
 
455
437
  expect(result.current).toEqual(mockTransformedComponents);
@@ -495,14 +477,15 @@ describe("getTransformedPreset should return the passed components if smartCompo
495
477
  "http://curation": { loading: false, data: { entry: mockPresetEntry } },
496
478
  };
497
479
 
498
- // mock the hooks
499
- const mockUseZappPipesFeeds = jest.spyOn(pipesFeeds, "useZappPipesFeeds");
500
- mockUseZappPipesFeeds.mockReturnValue(mockFeeds);
501
- const mockUseLayoutPresets = jest.spyOn(layoutPresets, "useLayoutPresets");
502
- mockUseLayoutPresets.mockReturnValue(mockLayoutPresets);
503
-
504
480
  const { result } = renderHook(() => useCurationAPI(mockComponents), {
505
- wrapper,
481
+ wrapper: getWrapper({
482
+ zappPipes: mockFeeds,
483
+ presetsMapping: {
484
+ presets_mappings: {
485
+ ...mockLayoutPresets,
486
+ },
487
+ },
488
+ }),
506
489
  });
507
490
 
508
491
  expect(result.current).toEqual(mockTransformedComponents);
@@ -1,17 +1,18 @@
1
1
  import { all, equals, path, prop, isEmpty, pluck, values } from "ramda";
2
2
 
3
3
  import { useEffect, useMemo } from "react";
4
- import { useDispatch } from "react-redux";
5
4
 
6
5
  import {
6
+ ZappPipes,
7
+ useAppDispatch,
7
8
  useLayoutPresets,
8
- useZappPipesFeeds,
9
- } from "@applicaster/zapp-react-native-redux/hooks";
10
- import { loadPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
9
+ useZappPipesFeed,
10
+ } from "@applicaster/zapp-react-native-redux";
11
11
  import { isEmptyOrNil } from "@applicaster/zapp-react-native-utils/cellUtils";
12
12
  import { Categories } from "./logger";
13
13
  import { createLogger } from "@applicaster/zapp-react-native-utils/logger";
14
14
  import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute";
15
+
15
16
  import {
16
17
  ZappPipesEntryContext,
17
18
  ZappPipesScreenContext,
@@ -26,7 +27,10 @@ import {
26
27
  import { produce } from "immer";
27
28
  // types reference
28
29
 
29
- declare type CurationEntry = { preset_name: string; feed_url: string };
30
+ declare interface CurationEntry {
31
+ preset_name: string;
32
+ feed_url: string;
33
+ }
30
34
 
31
35
  type Feeds = Record<string, ZappPipesData>;
32
36
 
@@ -122,7 +126,7 @@ export const getFinalComponents = (
122
126
  export const useCurationAPI = (
123
127
  components: Array<ZappUIComponent>
124
128
  ): ZappUIComponent[] => {
125
- const dispatch = useDispatch();
129
+ const dispatch = useAppDispatch();
126
130
 
127
131
  const smartComponents = useMemo(
128
132
  () => components?.filter?.(isSmartComponent) ?? [],
@@ -162,7 +166,7 @@ export const useCurationAPI = (
162
166
  useEffect(() => {
163
167
  urls.forEach((url, index) => {
164
168
  if (url) {
165
- dispatch(loadPipesData(url, { clearCache: false }));
169
+ dispatch(ZappPipes.loadPipesData(url, { clearCache: false }));
166
170
  } else {
167
171
  logger.log_error("Curation url is empty", {
168
172
  componentId: smartComponents?.[index]?.id,
@@ -171,7 +175,7 @@ export const useCurationAPI = (
171
175
  });
172
176
  }, [urls]);
173
177
 
174
- const feeds = useZappPipesFeeds(urls);
178
+ const feeds = useZappPipesFeed(urls);
175
179
  const layoutPresets = useLayoutPresets();
176
180
 
177
181
  const enrichedComponents = useMemo(() => {
@@ -7,12 +7,14 @@ import {
7
7
  import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
8
8
  import {
9
9
  useDimensions,
10
+ useIsTablet as isTablet,
10
11
  useNavigation,
11
12
  } from "@applicaster/zapp-react-native-utils/reactHooks";
12
13
 
13
14
  import { BufferAnimation } from "../PlayerContainer/BufferAnimation";
14
15
  import { PlayerContainer } from "../PlayerContainer";
15
16
  import { useModalSize } from "../VideoModal/hooks";
17
+ import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
16
18
 
17
19
  type Props = {
18
20
  item: ZappEntry;
@@ -83,6 +85,13 @@ type PlayableComponent = {
83
85
  Component: React.ComponentType<any>;
84
86
  };
85
87
 
88
+ const dimensionsContext: "window" | "screen" = platformSelect({
89
+ android_tv: "window",
90
+ amazon: "window",
91
+ // eslint-disable-next-line react-hooks/rules-of-hooks
92
+ default: isTablet() ? "window" : "screen", // on tablet, window represents correct values, on phone it's not as the screen could be rotated
93
+ });
94
+
86
95
  export function HandlePlayable({
87
96
  item,
88
97
  isModal,
@@ -135,7 +144,8 @@ export function HandlePlayable({
135
144
  });
136
145
  }, [casting]);
137
146
 
138
- const { width: screenWidth, height: screenHeight } = useDimensions("window");
147
+ const { width: screenWidth, height: screenHeight } =
148
+ useDimensions(dimensionsContext);
139
149
 
140
150
  const modalSize = useModalSize();
141
151
 
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks/usePickFromState";
2
+ import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
3
3
  import { getBackgroundImageUrl } from "../utils";
4
4
  import { useTheme } from "@applicaster/zapp-react-native-utils/theme";
5
5
 
@@ -4,7 +4,7 @@ import * as R from "ramda";
4
4
  import { TouchableOpacity } from "react-native";
5
5
  // import { SvgUri } from "react-native-svg";
6
6
 
7
- import { connectToStore } from "@applicaster/zapp-react-native-redux";
7
+ import { connectToStore } from "@applicaster/zapp-react-native-redux/utils/connectToStore";
8
8
  import { useActions } from "@applicaster/zapp-react-native-utils/reactHooks/actions";
9
9
 
10
10
  import Image from "./Image";
@@ -1,58 +1,28 @@
1
1
  import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils";
2
- import { StorageSingleValueProvider } from "@applicaster/zapp-react-native-utils/storage/StorageSingleSelectProvider";
2
+ import { StorageSingleValueProvider } from "@applicaster/zapp-react-native-bridge/ZappStorage/StorageSingleSelectProvider";
3
3
  import { PushTopicManager } from "@applicaster/zapp-react-native-bridge/PushNotifications/PushTopicManager";
4
- import { StorageMultiSelectProvider } from "@applicaster/zapp-react-native-utils/storage/StorageMultiSelectProvider";
4
+ import { StorageMultiSelectProvider } from "@applicaster/zapp-react-native-bridge/ZappStorage/StorageMultiSelectProvider";
5
5
  import React, { useEffect } from "react";
6
6
  import { usePlayer } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayer";
7
7
  import { BehaviorSubject } from "rxjs";
8
8
  import { masterCellLogger } from "../logger";
9
9
  import get from "lodash/get";
10
- import { ScreenMultiSelectProvider } from "@applicaster/zapp-react-native-utils/storage/ScreenStateMultiSelectProvider";
11
- import { ScreenSingleValueProvider } from "@applicaster/zapp-react-native-utils/storage/ScreenSingleValueProvider";
12
- import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks";
13
- import { useScreenStateStore } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useScreenStateStore";
14
-
15
- const parseContextKey = (
16
- key: string,
17
- context: string = "ctx"
18
- ): string | null => {
19
- if (!key?.startsWith(`@{${context}/`)) return null;
20
-
21
- return key.substring(`@{${context}/`.length, key.length - 1);
10
+
11
+ const parseContextKey = (key: string): string | null => {
12
+ if (!key?.startsWith("@{ctx/")) return null;
13
+
14
+ return key.substring("@{ctx/".length, key.length - 1);
22
15
  };
23
16
 
24
17
  const getDataSourceProvider = (
25
- behavior: Behavior,
26
- screenRoute: string,
27
- screenStateStore: ScreenStateStore
18
+ behavior: Behavior
28
19
  ): BehaviorSubject<string[] | string> | null => {
29
20
  if (!behavior) return null;
30
21
 
31
22
  const selection = String(behavior.current_selection);
32
- const screenKey = parseContextKey(selection, "screen");
33
-
34
- if (screenKey) {
35
- if (behavior.select_mode === "multi") {
36
- return ScreenMultiSelectProvider.getProvider(
37
- screenKey,
38
- screenRoute,
39
- screenStateStore
40
- ).getObservable();
41
- }
42
-
43
- if (behavior.select_mode === "single") {
44
- return ScreenSingleValueProvider.getProvider(
45
- screenKey,
46
- screenRoute,
47
- screenStateStore
48
- ).getObservable();
49
- }
50
- }
51
-
52
23
  const contextKey = parseContextKey(selection);
53
24
 
54
25
  if (contextKey) {
55
- // TODO: Add storage scope to behavior
56
26
  if (behavior.select_mode === "multi") {
57
27
  return StorageMultiSelectProvider.getProvider(contextKey).getObservable();
58
28
  }
@@ -71,8 +41,6 @@ const getDataSourceProvider = (
71
41
 
72
42
  export const useBehaviorUpdate = (behavior: Behavior) => {
73
43
  const [lastUpdate, setLastUpdate] = React.useState<number | null>(null);
74
- const screenRoute = useRoute()?.pathname || "";
75
- const screenStateStore = useScreenStateStore();
76
44
  const player = usePlayer();
77
45
 
78
46
  const triggerUpdate = () => setLastUpdate(Date.now());
@@ -80,11 +48,7 @@ export const useBehaviorUpdate = (behavior: Behavior) => {
80
48
  useEffect(() => {
81
49
  if (!behavior) return;
82
50
 
83
- const dataSource = getDataSourceProvider(
84
- behavior,
85
- screenRoute,
86
- screenStateStore
87
- );
51
+ const dataSource = getDataSourceProvider(behavior);
88
52
 
89
53
  if (dataSource) {
90
54
  const subscription = dataSource.subscribe(triggerUpdate);
@@ -108,17 +72,10 @@ export const useBehaviorUpdate = (behavior: Behavior) => {
108
72
 
109
73
  // We cant use async in this function (its inside render),
110
74
  // so we rely on useBehaviorUpdate to update current value and trigger re-render
111
- export const isCellSelected = ({
112
- item,
113
- screenRoute,
114
- screenStateStore,
115
- behavior,
116
- }: {
117
- item: ZappEntry;
118
- screenRoute: string;
119
- screenStateStore: ScreenStateStore;
120
- behavior?: Behavior;
121
- }): boolean => {
75
+ export const isCellSelected = (
76
+ item: ZappEntry,
77
+ behavior?: Behavior
78
+ ): boolean => {
122
79
  if (!behavior) return false;
123
80
 
124
81
  const id = behavior.selector ? get(item, behavior.selector) : item.id;
@@ -142,32 +99,7 @@ export const isCellSelected = ({
142
99
  }
143
100
 
144
101
  const selection = String(behavior.current_selection);
145
-
146
- const screenKey = parseContextKey(selection, "screen");
147
-
148
- if (screenKey) {
149
- if (behavior.select_mode === "single") {
150
- const selectedItem = ScreenSingleValueProvider.getProvider(
151
- screenKey,
152
- screenRoute,
153
- screenStateStore
154
- ).getValue();
155
-
156
- return selectedItem === String(id);
157
- }
158
-
159
- if (behavior.select_mode === "multi") {
160
- const selectedItems = ScreenMultiSelectProvider.getProvider(
161
- screenKey,
162
- screenRoute,
163
- screenStateStore
164
- ).getSelectedItems();
165
-
166
- return selectedItems?.includes(String(id));
167
- }
168
- }
169
-
170
- const contextKey = parseContextKey(selection, "ctx");
102
+ const contextKey = parseContextKey(selection);
171
103
 
172
104
  if (contextKey) {
173
105
  if (behavior.select_mode === "single") {
@@ -8,8 +8,6 @@ import { masterCellLogger } from "../logger";
8
8
  import { getCellState } from "../../Cell/utils";
9
9
  import { getColorFromData } from "@applicaster/zapp-react-native-utils/cellUtils";
10
10
  import { isCellSelected, useBehaviorUpdate } from "./behaviorProvider";
11
- import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks";
12
- import { useScreenStateStore } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useScreenStateStore";
13
11
 
14
12
  const hasElementSpecificViewType = (viewType) => (element) => {
15
13
  if (R.isNil(element)) {
@@ -192,18 +190,8 @@ export const getFocusedButtonId = (focusable) => {
192
190
  });
193
191
  };
194
192
 
195
- export const isSelected = ({
196
- item,
197
- screenRoute,
198
- screenStateStore,
199
- behavior,
200
- }: {
201
- item: ZappEntry;
202
- screenRoute: string;
203
- screenStateStore: ScreenStateStore;
204
- behavior?: Behavior;
205
- }) => {
206
- return isCellSelected({ item, screenRoute, screenStateStore, behavior });
193
+ export const isSelected = (item: ZappEntry, behavior?: Behavior) => {
194
+ return isCellSelected(item, behavior);
207
195
  };
208
196
 
209
197
  export const useCellState = ({
@@ -216,17 +204,9 @@ export const useCellState = ({
216
204
  focused: boolean;
217
205
  }): CellState => {
218
206
  const lastUpdate = useBehaviorUpdate(behavior);
219
- const router = useRoute();
220
- const screenStateStore = useScreenStateStore();
221
207
 
222
208
  const _isSelected = useMemo(
223
- () =>
224
- isSelected({
225
- item,
226
- screenRoute: router?.pathname,
227
- screenStateStore,
228
- behavior,
229
- }),
209
+ () => isSelected(item, behavior),
230
210
  [behavior, item, lastUpdate]
231
211
  );
232
212
 
@@ -19,29 +19,27 @@ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/utils", () => {
19
19
  };
20
20
  });
21
21
 
22
- jest.mock(
23
- "@applicaster/zapp-react-native-redux/hooks/usePickFromState",
24
- () => ({
25
- usePickFromState: () => ({
26
- plugins: [
27
- {
28
- name: "offline experience",
29
- identifier: "offline-experience",
30
- type: "general",
31
- module: {
32
- useOfflineExperienceConfiguration: () => ({
33
- configurationFields: {},
34
- localizations: {
35
- offline_toast_message: "No internet connection",
36
- online_toast_message: "You are back online",
37
- },
38
- }),
39
- },
22
+ jest.mock("@applicaster/zapp-react-native-redux/hooks", () => ({
23
+ ...jest.requireActual("@applicaster/zapp-react-native-redux/hooks"),
24
+ usePickFromState: () => ({
25
+ plugins: [
26
+ {
27
+ name: "offline experience",
28
+ identifier: "offline-experience",
29
+ type: "general",
30
+ module: {
31
+ useOfflineExperienceConfiguration: () => ({
32
+ configurationFields: {},
33
+ localizations: {
34
+ offline_toast_message: "No internet connection",
35
+ online_toast_message: "You are back online",
36
+ },
37
+ }),
40
38
  },
41
- ],
42
- }),
43
- })
44
- );
39
+ },
40
+ ],
41
+ }),
42
+ }));
45
43
 
46
44
  jest.mock("react-native-safe-area-context", () => ({
47
45
  useSafeAreaInsets: () => ({ top: 44 }),
@@ -1,6 +1,6 @@
1
1
  import * as R from "ramda";
2
2
 
3
- import { connectToStore } from "@applicaster/zapp-react-native-redux";
3
+ import { connectToStore } from "@applicaster/zapp-react-native-redux/utils/connectToStore";
4
4
 
5
5
  import { ErrorDisplayComponent } from "./ErrorDisplay";
6
6
 
@@ -1,4 +1,4 @@
1
- import { connectToStore } from "@applicaster/zapp-react-native-redux";
1
+ import { connectToStore } from "@applicaster/zapp-react-native-redux/utils/connectToStore";
2
2
  import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
3
3
  import { styleKeys } from "@applicaster/zapp-react-native-utils/styleKeysUtils";
4
4
  import { transformColorCode as fixColorHexCode } from "@applicaster/zapp-react-native-utils/transform";
@@ -1,6 +1,6 @@
1
1
  import * as R from "ramda";
2
2
 
3
- import { connectToStore } from "@applicaster/zapp-react-native-redux";
3
+ import { connectToStore } from "@applicaster/zapp-react-native-redux/utils/connectToStore";
4
4
  import { loadPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
5
5
 
6
6
  import { PlayerContainer as PlayerContainerComponent } from "./PlayerContainer";
@@ -10,11 +10,13 @@ import { useLocalizedStrings } from "@applicaster/zapp-react-native-utils/locali
10
10
  import { useAnalytics } from "@applicaster/zapp-react-native-utils/analyticsUtils";
11
11
  import { useSendAnalyticsEventWithFunction } from "@applicaster/zapp-react-native-utils/analyticsUtils/helpers/hooks";
12
12
  import { useCurrentScreenData } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useCurrentScreenData";
13
- import { loadPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
14
- import { useDispatch } from "react-redux";
15
13
  import { useShallow } from "zustand/react/shallow";
16
14
  import { useScreenContextV2 } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext";
17
15
  import { useSafeAreaInsets } from "react-native-safe-area-context";
16
+ import {
17
+ ZappPipes,
18
+ useAppDispatch,
19
+ } from "@applicaster/zapp-react-native-redux";
18
20
 
19
21
  const BRIGHTNESS_THRESHOLD = 160;
20
22
  const ABOVE_DEFAULT_COLOR = "gray";
@@ -61,7 +63,7 @@ export const usePullToRefresh = (
61
63
  ) => {
62
64
  const isPipesV1 = !!pullToRefreshPipesV1RefreshingStateUpdater;
63
65
 
64
- const dispatch = useDispatch();
66
+ const dispatch = useAppDispatch();
65
67
 
66
68
  const [refreshing, setRefreshing] = React.useState(false);
67
69
 
@@ -81,7 +83,7 @@ export const usePullToRefresh = (
81
83
  if (refreshing && !isPipesV1) {
82
84
  feeds.forEach((feed) => {
83
85
  dispatch(
84
- loadPipesData(feed, {
86
+ ZappPipes.loadPipesData(feed, {
85
87
  silentRefresh: true,
86
88
  clearCache: true,
87
89
  callback: () => {
@@ -1,5 +1,5 @@
1
1
  import * as R from "ramda";
2
- import { connectToStore } from "@applicaster/zapp-react-native-redux";
2
+ import { connectToStore } from "@applicaster/zapp-react-native-redux/utils/connectToStore";
3
3
 
4
4
  import { withRiver } from "../../Decorators/RiverResolver";
5
5
  import { withNavigator } from "../../Decorators/Navigator";
@@ -68,12 +68,33 @@ jest.mock(
68
68
  })
69
69
  );
70
70
 
71
+ jest.mock(
72
+ "@applicaster/zapp-react-native-utils/reactHooks/state/useRivers",
73
+ () => ({
74
+ useRivers: jest.fn(() => ({
75
+ rivers: [{ id: "testId", name: "Test River" }],
76
+ })),
77
+ })
78
+ );
79
+
71
80
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
72
81
  isNavBarVisible: mockIsNavBarVisible,
73
82
  useIsScreenActive: jest.fn().mockReturnValue(true),
83
+ useNavigation: jest.fn(() => ({
84
+ canGoBack: () => false,
85
+ currentRoute: "/river/testId",
86
+ activeRiver: { id: "testId" },
87
+ screenData: { id: "testId" },
88
+ data: { screen: { id: "testId" } },
89
+ })),
90
+ useRoute: jest.fn(() => ({
91
+ pathname: "/river/testId",
92
+ screenData: { id: "testId" },
93
+ })),
74
94
  }));
75
95
 
76
96
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
97
+ ...jest.requireActual("@applicaster/zapp-react-native-utils/reactHooks"),
77
98
  useCurrentScreenData: jest.fn(() => ({
78
99
  id: "testId",
79
100
  })),
@@ -84,17 +105,6 @@ jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
84
105
  id: "testId",
85
106
  navigations: [{ id: "testId", category: "nav_bar" }],
86
107
  })),
87
- useNavigation: jest.fn(() => ({
88
- canGoBack: () => false,
89
- currentRoute: "/river/testId",
90
- activeRiver: { id: "testId" },
91
- screenData: { id: "testId" },
92
- data: { screen: { id: "testId" } },
93
- })),
94
- useRoute: jest.fn(() => ({
95
- pathname: "/river/testId",
96
- screenData: { id: "testId" },
97
- })),
98
108
  useDimensions: jest.fn(() => ({
99
109
  width: 1920,
100
110
  height: 1080,
@@ -102,10 +112,11 @@ jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
102
112
  useIsTablet: jest.fn(() => false),
103
113
  }));
104
114
 
105
- jest.mock("@applicaster/zapp-react-native-redux/hooks/usePickFromState", () => {
115
+ jest.mock("@applicaster/zapp-react-native-redux/hooks", () => {
106
116
  const View = jest.requireActual("react-native").View;
107
117
 
108
118
  return {
119
+ ...jest.requireActual("@applicaster/zapp-react-native-redux/hooks"),
109
120
  usePickFromState: () => ({
110
121
  plugins: [
111
122
  {
@@ -36,7 +36,6 @@ export function CurrentScreenContextProvider({
36
36
  screenData: NavigationScreenData;
37
37
  }) {
38
38
  const { pathname, isActive = false, screenData } = props;
39
- console.log("CurrentScreenContextProvider", { screenData });
40
39
 
41
40
  const [initialScreenData, setInitialScreenData] = React.useState(screenData);
42
41
 
@@ -11,8 +11,6 @@ export const withScreenDataContextProvider = (Component: any) => {
11
11
  // use only initial activeRiver as this context should only be used for "Home", initial route
12
12
  const screenData = React.useMemo(() => ({ screen: activeRiver }), []);
13
13
 
14
- console.log("withScreenDataContextProvider", { screenData, activeRiver });
15
-
16
14
  return (
17
15
  <ScreenDataContext.Provider value={screenData}>
18
16
  <Component {...props} />
@@ -13,7 +13,6 @@ import {
13
13
  loadDatasources,
14
14
  usePipesContexts,
15
15
  } from "./utils";
16
- import { useScreenResolvers } from "@applicaster/zapp-react-native-utils/actionsExecutor/screenResolver";
17
16
 
18
17
  type RiverProps = {
19
18
  dispatch: DispatchProp;
@@ -26,7 +25,7 @@ export function WithRiverFeedLoader(Component: ZappComponent) {
26
25
  return function WrappedWithRiverFeedLoader(props: RiverProps) {
27
26
  const { river } = props;
28
27
  const { screenData, pathname } = useRoute();
29
- const resolvers = useScreenResolvers();
28
+
30
29
  const pipesContexts = usePipesContexts(river.id, pathname);
31
30
 
32
31
  const componentsToLoad = ignoreComponentsWithClearCacheFlag(
@@ -50,12 +49,7 @@ export function WithRiverFeedLoader(Component: ZappComponent) {
50
49
  item?.filter((item2) => item2 !== undefined)
51
50
  );
52
51
 
53
- loadDatasources(
54
- nonEmptyDataSources,
55
- river?.id,
56
- props.dispatch,
57
- resolvers
58
- );
52
+ loadDatasources(nonEmptyDataSources, river?.id, props.dispatch);
59
53
  }, []);
60
54
 
61
55
  return <Component {...props} />;
@@ -12,16 +12,11 @@ export { getDatasourceUrl } from "./getDatasourceUrl";
12
12
 
13
13
  export const DATASOURCE_CHUNKS = 10;
14
14
 
15
- export async function loadDatasources(
16
- urls: string[][],
17
- riverId,
18
- dispatch,
19
- resolvers
20
- ) {
15
+ export async function loadDatasources(urls: string[][], riverId, dispatch) {
21
16
  return reducePromises<string, void>(
22
17
  mapPromises<string, void>((url) => {
23
18
  if (url) {
24
- return dispatch(loadPipesData(url, { riverId, resolvers }));
19
+ return dispatch(loadPipesData(url, { riverId }));
25
20
  }
26
21
  }),
27
22
  undefined,
@@ -13,12 +13,9 @@ const rivers = {
13
13
  },
14
14
  };
15
15
 
16
- jest.doMock(
17
- "@applicaster/zapp-react-native-redux/hooks/usePickFromState",
18
- () => ({
19
- usePickFromState: jest.fn(() => ({ rivers })),
20
- })
21
- );
16
+ jest.doMock("@applicaster/zapp-react-native-redux/hooks", () => ({
17
+ usePickFromState: jest.fn(() => ({ rivers })),
18
+ }));
22
19
 
23
20
  jest.doMock(
24
21
  "@applicaster/zapp-react-native-utils/reactHooks/navigation/usePathname",
@@ -19,11 +19,7 @@ import { ZappPipesSearchContext } from "@applicaster/zapp-react-native-ui-compon
19
19
  import { useScreenContext } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext";
20
20
 
21
21
  import { isVerticalListOrGrid } from "./utils";
22
- import {
23
- subscribeForUrlContextKeyChanges,
24
- subscribeForUrlScreenKeyChanges,
25
- } from "@applicaster/zapp-pipes-v2-client";
26
- import { useScreenStateStore } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useScreenStateStore";
22
+ import { subscribeForUrlContextKeyChanges } from "@applicaster/zapp-pipes-v2-client";
27
23
 
28
24
  type Props = {
29
25
  component: ZappUIComponent;
@@ -208,9 +204,7 @@ export function zappPipesDataConnector(
208
204
  Component: React.FC<any> | React.ComponentClass<any>
209
205
  ) {
210
206
  return function WrappedWithZappPipesData(props: Props) {
211
- const { screenData, pathname } = useRoute();
212
- const screenStateStore = useScreenStateStore();
213
-
207
+ const { screenData } = useRoute();
214
208
  const { plugins } = usePickFromState(["plugins"]);
215
209
 
216
210
  const screenContextData = useScreenContext();
@@ -292,18 +286,6 @@ export function zappPipesDataConnector(
292
286
  componentIndex
293
287
  );
294
288
 
295
- useEffect(() => {
296
- if (!(dataSourceUrl?.includes("pipesv2://") && reloadData)) {
297
- return subscribeForUrlScreenKeyChanges(
298
- dataSourceUrl,
299
- pathname,
300
- screenStateStore,
301
- {},
302
- reloadData
303
- );
304
- }
305
- }, [dataSourceUrl, reloadData]);
306
-
307
289
  useEffect(() => {
308
290
  if (dataSourceUrl?.includes("pipesv2://") && reloadData) {
309
291
  const addListener = getListenerFromPlugin(dataSourceUrl, plugins);
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.3126393935",
3
+ "version": "14.0.0-alpha.3471443312",
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": "14.0.0-alpha.3126393935",
35
- "@applicaster/zapp-react-native-bridge": "14.0.0-alpha.3126393935",
36
- "@applicaster/zapp-react-native-redux": "14.0.0-alpha.3126393935",
37
- "@applicaster/zapp-react-native-utils": "14.0.0-alpha.3126393935",
34
+ "@applicaster/applicaster-types": "14.0.0-alpha.3471443312",
35
+ "@applicaster/zapp-react-native-bridge": "14.0.0-alpha.3471443312",
36
+ "@applicaster/zapp-react-native-redux": "14.0.0-alpha.3471443312",
37
+ "@applicaster/zapp-react-native-utils": "14.0.0-alpha.3471443312",
38
38
  "promise": "^8.3.0",
39
39
  "url": "^0.11.0",
40
40
  "uuid": "^3.3.2"