@applicaster/zapp-react-native-utils 13.0.0-alpha.5033140607 → 13.0.0-alpha.5206555350

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 (112) hide show
  1. package/actionsExecutor/ActionExecutor.ts +16 -9
  2. package/actionsExecutor/ActionExecutorContext.tsx +74 -9
  3. package/alertUtils/alert.ts +148 -0
  4. package/alertUtils/index.ts +1 -148
  5. package/analyticsUtils/AnalyticPlayerListener.ts +18 -1
  6. package/analyticsUtils/__tests__/__snapshots__/analyticsManagerNoModule.test.js.snap +9 -9
  7. package/analyticsUtils/helpers/hooks.ts +1 -1
  8. package/appUtils/HooksManager/{Hook.js → Hook.ts} +35 -23
  9. package/appUtils/HooksManager/__tests__/__snapshots__/hook.test.js.snap +10 -8
  10. package/appUtils/HooksManager/__tests__/__snapshots__/hooksManager.test.js.snap +693 -0
  11. package/appUtils/HooksManager/__tests__/hook.test.js +196 -184
  12. package/appUtils/HooksManager/__tests__/hooksManager.test.js +96 -99
  13. package/appUtils/HooksManager/{constants.js → constants.ts} +1 -1
  14. package/appUtils/HooksManager/{index.js → index.ts} +121 -112
  15. package/appUtils/HooksManager/types.ts +119 -0
  16. package/appUtils/RiverFocusManager/index.js +17 -12
  17. package/appUtils/accessibilityManager/index.ts +42 -1
  18. package/appUtils/contextKeysManager/contextResolver.ts +77 -0
  19. package/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +6 -6
  20. package/appUtils/focusManager/index.ts +91 -65
  21. package/appUtils/focusManager/treeDataStructure/Tree/index.js +25 -3
  22. package/appUtils/focusManager/treeDataStructure/Utils/index.js +1 -3
  23. package/appUtils/focusManager/utils/enums.ts +4 -0
  24. package/appUtils/focusManagerAux/utils/index.ts +4 -3
  25. package/appUtils/{index.js → index.ts} +1 -1
  26. package/appUtils/keyCodes/__tests__/__snapshots__/keyCodes.test.js.snap +2 -2
  27. package/appUtils/keyCodes/__tests__/keyCodes.test.js +4 -4
  28. package/appUtils/keyCodes/{index.js → index.ts} +2 -0
  29. package/appUtils/keyCodes/keys/index.ts +3 -0
  30. package/appUtils/keyCodes/{keys.android.js → keys/keyEventMapper.ts} +0 -19
  31. package/appUtils/keyCodes/keys/keys.android.ts +18 -0
  32. package/appUtils/keyCodes/keys/keys.ios.ts +25 -0
  33. package/appUtils/keyCodes/keys/keys.ts +15 -0
  34. package/appUtils/keyCodes/{keysByPlatform.js → keys/keysByPlatform.ts} +4 -0
  35. package/appUtils/keyCodes/keysByPlatform.ts +8 -0
  36. package/appUtils/keyInputHandler/KeyInputHandler.ts +68 -0
  37. package/appUtils/orientationHelper.ts +1 -1
  38. package/appUtils/platform/const.ts +14 -0
  39. package/appUtils/platform/platformUtils.ts +17 -15
  40. package/appUtils/playerManager/player.ts +19 -7
  41. package/appUtils/playerManager/playerNative.ts +3 -2
  42. package/appUtils/playerManager/usePlayerControllerSetup.tsx +3 -3
  43. package/arrayUtils/__tests__/__snapshots__/arrayUtils.test.ts.snap +4 -4
  44. package/domUtils/{cookieManager.js → cookieManager.ts} +1 -2
  45. package/functionUtils/__tests__/__snapshots__/functionUtils.test.js.snap +4 -4
  46. package/functionUtils/index.ts +15 -11
  47. package/idleUtils/__tests__/withTimeout$.test.ts +37 -0
  48. package/idleUtils/index.ts +1 -1
  49. package/idleUtils/withTimeout.ts +15 -2
  50. package/logger/const.ts +9 -67
  51. package/manifestUtils/__tests__/createConfig.test.js +18 -16
  52. package/modalState/index.ts +1 -5
  53. package/navigationUtils/__tests__/__snapshots__/navigationUtils.test.js.snap +6 -6
  54. package/navigationUtils/__tests__/itemTypes.test.js +2 -2
  55. package/navigationUtils/__tests__/navigationUtils.test.js +2 -2
  56. package/navigationUtils/index.ts +17 -8
  57. package/package.json +3 -2
  58. package/reactHooks/autoscrolling/__tests__/useTrackCurrentAutoScrollingElement.test.ts +1 -1
  59. package/reactHooks/autoscrolling/__tests__/useTrackedView.test.tsx +1 -1
  60. package/reactHooks/cell-click/__tests__/index.test.js +10 -2
  61. package/reactHooks/cell-click/index.ts +7 -1
  62. package/reactHooks/feed/__tests__/useBuildPipesUrl.test.tsx +4 -4
  63. package/reactHooks/feed/__tests__/useFeedLoader.test.tsx +10 -11
  64. package/reactHooks/feed/useFeedLoader.tsx +1 -1
  65. package/reactHooks/feed/usePipesCacheReset.ts +5 -5
  66. package/reactHooks/flatList/__tests__/index.test.tsx +30 -21
  67. package/reactHooks/layout/__tests__/index.test.tsx +10 -10
  68. package/reactHooks/layout/useDimensions/helpers/__tests__/getInitialDimensions.native.test.js +14 -28
  69. package/reactHooks/layout/useDimensions/helpers/__tests__/getInitialDimensions.test.js +1 -1
  70. package/reactHooks/navigation/__tests__/index.test.tsx +0 -4
  71. package/reactHooks/navigation/index.ts +29 -218
  72. package/reactHooks/navigation/useGetBottomTabBarHeight.ts +12 -0
  73. package/reactHooks/navigation/useGetNavBarTopBorderWidth.ts +14 -0
  74. package/reactHooks/navigation/useGetTabBarHeight.ts +12 -0
  75. package/reactHooks/navigation/useIsScreenActive.ts +17 -0
  76. package/reactHooks/navigation/useNavigationPluginData.ts +15 -0
  77. package/reactHooks/navigation/useNavigationType.ts +15 -0
  78. package/reactHooks/navigation/usePathname.ts +4 -0
  79. package/reactHooks/navigation/useRoute.ts +100 -0
  80. package/reactHooks/navigation/useUniqueRouteSuffix.ts +41 -0
  81. package/reactHooks/player/TVSeekControlller/ISeekController.ts +32 -0
  82. package/reactHooks/player/TVSeekControlller/LongPressSeekController.ts +71 -0
  83. package/reactHooks/player/TVSeekControlller/TVSeekController.ts +258 -0
  84. package/reactHooks/player/TVSeekControlller/TapSeekController.ts +53 -0
  85. package/reactHooks/player/__tests__/{useAutoSeek.test.tsx → useAutoSeek._test.tsx} +2 -3
  86. package/reactHooks/player/const.ts +0 -4
  87. package/reactHooks/player/index.ts +0 -6
  88. package/reactHooks/usePluginConfiguration.ts +1 -1
  89. package/reactHooks/useSubscriberFor.ts +4 -3
  90. package/reactUtils/__tests__/reactUtils.test.js +10 -28
  91. package/reactUtils/createContext/__tests__/__snapshots__/helpers.test.js.snap +19 -19
  92. package/reactUtils/createContext/__tests__/__snapshots__/index.test.js.snap +2 -2
  93. package/reactUtils/createContext/__tests__/__snapshots__/provider.test.js.snap +3 -3
  94. package/reactUtils/createContext/__tests__/helpers.test.js +8 -8
  95. package/reactUtils/index.ts +0 -14
  96. package/screenState/index.ts +24 -10
  97. package/theme/__mocks__/index.ts +4 -0
  98. package/theme/index.ts +1 -1
  99. package/time/Timer.ts +5 -2
  100. package/types.ts +1 -0
  101. package/zappFrameworkUtils/presentPluginOneTime.ts +2 -3
  102. package/appUtils/keyCodes/keys.ios.js +0 -46
  103. package/reactHooks/player/useAutoSeek.tsx +0 -87
  104. package/reactHooks/player/useSeek.tsx +0 -66
  105. package/reactHooks/player/useTapSeek.tsx +0 -58
  106. /package/appUtils/HooksManager/{logger.js → logger.ts} +0 -0
  107. /package/appUtils/{directionHelper.js → directionHelper.ts} +0 -0
  108. /package/appUtils/keyCodes/{androidTVKeys.js → androidTVKeys.ts} +0 -0
  109. /package/appUtils/keyCodes/{keys.web.js → keys/keys.web.ts} +0 -0
  110. /package/appUtils/{localizationsHelper.js → localizationsHelper.ts} +0 -0
  111. /package/domUtils/{logger.js → logger.ts} +0 -0
  112. /package/reactHooks/player/__tests__/{useTapSeek.test.ts → useTapSeek._test.ts} +0 -0
package/logger/const.ts CHANGED
@@ -1,6 +1,3 @@
1
- /* eslint-disable unused-imports/no-unused-vars */
2
- import * as R from "ramda";
3
-
4
1
  enum XRayLogLevel {
5
2
  verbose = 0,
6
3
  debug = 1,
@@ -11,51 +8,9 @@ enum XRayLogLevel {
11
8
  off = 100,
12
9
  }
13
10
 
14
- enum ToastLogLevel {
15
- off = "off",
16
- verbose = "verbose",
17
- debug = "debug",
18
- info = "info",
19
- warning = "warning",
20
- error = "error",
21
- }
22
-
23
- const toastLevelToLogLevel = (toastLogLevel: ToastLogLevel): XRayLogLevel => {
24
- if (R.isNil(toastLogLevel)) {
25
- return XRayLogLevel.off;
26
- }
27
-
28
- switch (toastLogLevel) {
29
- case ToastLogLevel.verbose:
30
- return XRayLogLevel.verbose;
31
- case ToastLogLevel.debug:
32
- return XRayLogLevel.debug;
33
- case ToastLogLevel.info:
34
- return XRayLogLevel.info;
35
- case ToastLogLevel.error:
36
- return XRayLogLevel.error;
37
- default:
38
- return XRayLogLevel.off;
39
- }
40
- };
41
-
42
- const PLUGIN_IDENTIFIER = "xray_logging_plugin";
43
-
44
- const wrapInObject = (obj, name) => {};
45
-
46
- const applyConditions = (wrappedObj) => {};
47
-
48
- const sanitizeEventPayload = () => {};
11
+ const wrapInObject = (_ctx: unknown, _key: string) => {};
49
12
 
50
- const __isRunningRepoTests = () => {};
51
-
52
- const isWeb = () => {};
53
-
54
- const isDOMApp = () => {};
55
-
56
- const isBrowser = () => {};
57
-
58
- const eventAllowed = () => {};
13
+ const applyConditions = (_fn: unknown) => {};
59
14
 
60
15
  /**
61
16
  * This is the mocked version of XRayLogger
@@ -90,34 +45,21 @@ export default class XRayLogger {
90
45
  );
91
46
  };
92
47
 
93
- log = (event: string | XRayEventData) => {
94
- const logEvent = typeof event === "string" ? { message: event } : event;
95
- };
48
+ log = (_event) => {};
96
49
 
97
- debug = (event: string | XRayEventData) => {
98
- const logEvent = typeof event === "string" ? { message: event } : event;
99
- };
50
+ debug = (_event) => {};
100
51
 
101
- info = (event: string | XRayEventData) => {
102
- const logEvent = typeof event === "string" ? { message: event } : event;
103
- };
52
+ info = (_event) => {};
104
53
 
105
- warning = (event: string | XRayEventData) => {
106
- const logEvent = typeof event === "string" ? { message: event } : event;
107
- };
54
+ warning = (_event) => {};
108
55
 
109
- warn = (event: string | XRayEventData) => {
56
+ warn = (_event) => {
110
57
  this.warning(event);
111
58
  };
112
59
 
113
- error = (event: Error | XRayEventData) => {
114
- const logEvent: XRayEventData =
115
- event instanceof Error
116
- ? { exception: event as Error, message: event.message }
117
- : (event as XRayEventData);
118
- };
60
+ error = (_event) => {};
119
61
 
120
- sendEvent = (event, eventData) => {};
62
+ sendEvent = (_event, _eventData) => {};
121
63
 
122
64
  // To be used by QuickBrick Hook events
123
65
  sendAudienceEvent = (event, eventData = null) => {
@@ -1,11 +1,9 @@
1
- import { createConfig } from "../createConfig";
2
-
3
- const styles = {
1
+ const mockStyles = {
4
2
  fields: [{ key: "field_1", initial_value: 1 }],
5
3
  label: "styles",
6
4
  };
7
5
 
8
- const stylesWithGroup = {
6
+ const mockStylesWithGroup = {
9
7
  fields: [
10
8
  {
11
9
  group: true,
@@ -15,26 +13,28 @@ const stylesWithGroup = {
15
13
  ],
16
14
  };
17
15
 
18
- const generators = {
19
- styles: jest.fn(() => ({ styles })),
16
+ const mockGenerators = {
17
+ styles: jest.fn(() => ({ styles: mockStyles })),
20
18
  stylesGroup: jest.fn(() => ({
21
- styles: stylesWithGroup,
19
+ styles: mockStylesWithGroup,
22
20
  })),
23
- customConfiguration: jest.fn(() => ({ custom_configuration: [styles] })),
21
+ customConfiguration: jest.fn(() => ({ custom_configuration: [mockStyles] })),
24
22
  customConfigurationGroup: jest.fn(() => ({
25
- custom_configuration: [stylesWithGroup],
23
+ custom_configuration: [mockStylesWithGroup],
26
24
  })),
27
25
  };
28
26
 
29
- jest.mock("../defaultManifestConfigurations", () => ({
27
+ jest.doMock("../defaultManifestConfigurations", () => ({
30
28
  defaultConfigurations: {
31
- styles: generators.styles,
32
- stylesGroup: generators.stylesGroup,
33
- customConfiguration: generators.customConfiguration,
34
- customConfigurationGroup: generators.customConfigurationGroup,
29
+ styles: mockGenerators.styles,
30
+ stylesGroup: mockGenerators.stylesGroup,
31
+ customConfiguration: mockGenerators.customConfiguration,
32
+ customConfigurationGroup: mockGenerators.customConfigurationGroup,
35
33
  },
36
34
  }));
37
35
 
36
+ const { createConfig } = require("../createConfig");
37
+
38
38
  describe("createConfig", () => {
39
39
  it("should return a function", () => {
40
40
  const currentResult = createConfig(jest.fn());
@@ -78,7 +78,9 @@ describe("createConfig", () => {
78
78
  extend: "styles",
79
79
  })(props);
80
80
 
81
- expect(generators.styles).toBeCalledWith(props);
81
+ console.log(mockGenerators.styles.mock.calls);
82
+
83
+ expect(mockGenerators.styles).toBeCalledWith(props);
82
84
  });
83
85
 
84
86
  it("should return base configuration if manifest is not provided", () => {
@@ -88,7 +90,7 @@ describe("createConfig", () => {
88
90
  extend: "styles",
89
91
  })({});
90
92
 
91
- expect(currentResult).toEqual({ styles });
93
+ expect(currentResult).toEqual({ styles: mockStyles });
92
94
  });
93
95
 
94
96
  describe("Data merging", () => {
@@ -31,11 +31,7 @@ export const useModalStore = create<ModalStore>((set) => ({
31
31
  set((state) => ({
32
32
  modalState: { ...state.modalState, ...newState },
33
33
  })),
34
- openModal: ({
35
- item,
36
- options = {},
37
- props = { screenData: {} },
38
- }: OpenModalArg) =>
34
+ openModal: ({ item, options = {}, props }: OpenModalArg) =>
39
35
  set({
40
36
  modalState: {
41
37
  visible: true,
@@ -1,19 +1,19 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`getNavigationProps returns the props otherwise 1`] = `
4
- Object {
5
- "assets": Object {
4
+ {
5
+ "assets": {
6
6
  "appLogo": "appLogo.png",
7
7
  },
8
8
  "home": false,
9
- "nav_items": Array [
10
- Object {
9
+ "nav_items": [
10
+ {
11
11
  "type": "label",
12
12
  },
13
13
  ],
14
- "rules": Object {},
14
+ "rules": {},
15
15
  "selected": "A1234",
16
- "styles": Object {
16
+ "styles": {
17
17
  "style": "foo",
18
18
  },
19
19
  "title": "testTitle",
@@ -61,8 +61,8 @@ describe("getTypeMatcher", () => {
61
61
 
62
62
  describe("isItemOfType", () => {
63
63
  it("is a curried function", () => {
64
- expect(itemIsOfType(river, SCREEN_TYPES.RIVER)).toBeBoolean();
65
- expect(itemIsOfType(river)).toBeFunction();
64
+ expect(itemIsOfType(river, SCREEN_TYPES.RIVER)).toBeTruthy();
65
+ expect(itemIsOfType(river)).toBeInstanceOf(Function);
66
66
  });
67
67
 
68
68
  it("returns true if the item is of the given type", () => {
@@ -243,7 +243,7 @@ describe("getTargetRoute", () => {
243
243
  it("returns a valid path when initial pathname is /", () => {
244
244
  const targetRoute = getTargetRoute(river, "/", { layoutVersion });
245
245
  expect(targetRoute).toEqual(`/river/${river.id}`);
246
- expect(targetRoute).not.toInclude("//");
246
+ expect(targetRoute).not.toContainEntry("//");
247
247
  });
248
248
  });
249
249
 
@@ -273,7 +273,7 @@ describe("getTargetRoute", () => {
273
273
  it("returns a valid path when initial pathname is /", () => {
274
274
  const targetRoute = getTargetRoute(river, "/", { layoutVersion });
275
275
  expect(targetRoute).toEqual(`/river/${river.id}`);
276
- expect(targetRoute).not.toInclude("//");
276
+ expect(targetRoute).not.toContainEntry("//");
277
277
  });
278
278
  });
279
279
  });
@@ -324,7 +324,13 @@ export function getPathAttributes({
324
324
  * @param {object} rivers
325
325
  * @returns {object}
326
326
  */
327
- export function getRiverFromRoute({ route, rivers }) {
327
+ export function getRiverFromRoute({
328
+ route,
329
+ rivers,
330
+ }: {
331
+ route: string;
332
+ rivers: Record<string, ZappRiver>;
333
+ }) {
328
334
  if (!route) {
329
335
  return null;
330
336
  }
@@ -437,7 +443,7 @@ export const runZappHooksForEntry = async (
437
443
 
438
444
  let success;
439
445
  let payload;
440
- const rivers = appStore.get("rivers");
446
+ const rivers: Record<string, ZappRiver> = appStore.get("rivers");
441
447
  const plugins = appStore.get("plugins");
442
448
  const appData = appStore.get("appData");
443
449
 
@@ -492,13 +498,16 @@ export const runZappHooksForEntry = async (
492
498
  payload = _payload;
493
499
  };
494
500
 
495
- HooksManager(hooksOptions)
501
+ const hooksManager = HooksManager(hooksOptions);
502
+
503
+ hooksManager.subscriber
496
504
  .on(HOOKS_EVENTS.PRESENT_SCREEN_HOOK, handleHookPresent)
497
505
  .on(HOOKS_EVENTS.START_BACKGROUND_HOOK, handleBackgroundHook)
498
506
  .on(HOOKS_EVENTS.ERROR, onFinished(false))
499
507
  .on(HOOKS_EVENTS.CANCEL, onFinished(false))
500
- .on(HOOKS_EVENTS.COMPLETE, onFinished(true))
501
- .handleHooks(entry);
508
+ .on(HOOKS_EVENTS.COMPLETE, onFinished(true));
509
+
510
+ hooksManager.handleHooks(entry);
502
511
 
503
512
  // eslint-disable-next-line no-unmodified-loop-condition
504
513
  while (success === undefined) {
@@ -635,8 +644,8 @@ export const getScreenId = (
635
644
  fallbackRiver: ZappRiver
636
645
  ) => {
637
646
  return screenData?.targetScreen
638
- ? screenData?.targetScreen?.id ?? fallbackRiver.id
647
+ ? (screenData?.targetScreen?.id ?? fallbackRiver.id)
639
648
  : "screen_id" in screenData
640
- ? screenData.screen_id
641
- : fallbackRiver.id;
649
+ ? screenData.screen_id
650
+ : fallbackRiver.id;
642
651
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-native-utils",
3
- "version": "13.0.0-alpha.5033140607",
3
+ "version": "13.0.0-alpha.5206555350",
4
4
  "description": "Applicaster Zapp React Native utilities package",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "homepage": "https://github.com/applicaster/quickbrick#readme",
30
30
  "dependencies": {
31
- "@applicaster/applicaster-types": "13.0.0-alpha.5033140607",
31
+ "@applicaster/applicaster-types": "13.0.0-alpha.5206555350",
32
32
  "buffer": "^5.2.1",
33
33
  "camelize": "^1.0.0",
34
34
  "create-react-context": "^0.2.3",
@@ -44,6 +44,7 @@
44
44
  "immer": "*",
45
45
  "react": "17.0.2",
46
46
  "react-native": "0.68.6",
47
+ "uglify-js": "*",
47
48
  "validate-color": "*",
48
49
  "zustand": "*"
49
50
  },
@@ -14,7 +14,7 @@ jest.mock(
14
14
 
15
15
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation");
16
16
 
17
- jest.useFakeTimers();
17
+ jest.useFakeTimers({ legacyFakeTimers: true });
18
18
 
19
19
  const {
20
20
  useTrackCurrentAutoScrollingElement,
@@ -19,7 +19,7 @@ jest.mock(
19
19
  })
20
20
  );
21
21
 
22
- jest.useFakeTimers();
22
+ jest.useFakeTimers({ legacyFakeTimers: true });
23
23
 
24
24
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation");
25
25
 
@@ -5,14 +5,14 @@ import { ActionExecutorContext } from "@applicaster/zapp-react-native-utils/acti
5
5
 
6
6
  import { waitFor } from "@testing-library/react-native";
7
7
 
8
- const navigator = {
8
+ const mockNavigator = {
9
9
  getPathname: () => "pathnameMock",
10
10
  push: jest.fn(),
11
11
  data: {},
12
12
  };
13
13
 
14
14
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
15
- useNavigation: () => navigator,
15
+ useNavigation: () => mockNavigator,
16
16
  useRoute: () => ({ pathname: "pathnameMock" }),
17
17
  useProfilerLogging: () => {
18
18
  return jest.fn();
@@ -25,7 +25,15 @@ jest.mock("@applicaster/zapp-react-native-utils/analyticsUtils/", () => ({
25
25
  }),
26
26
  }));
27
27
 
28
+ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/screen", () => ({
29
+ useTargetScreenData: jest.fn(() => ({})),
30
+ useCurrentScreenData: jest.fn(() => ({})),
31
+ }));
32
+
28
33
  jest.mock("@applicaster/zapp-react-native-ui-components/Contexts", () => ({
34
+ ...jest.requireActual(
35
+ "@applicaster/zapp-react-native-ui-components/Contexts"
36
+ ),
29
37
  ZappPipesEntryContext: {
30
38
  useZappPipesContext: jest.fn(() => [undefined, jest.fn()]),
31
39
  },
@@ -16,6 +16,7 @@ import { ActionExecutorContext } from "@applicaster/zapp-react-native-utils/acti
16
16
  import { isFunction, noop } from "../../functionUtils";
17
17
  import { useSendAnalyticsOnPress } from "../analytics";
18
18
  import { logOnPress, warnEmptyContentType } from "./helpers";
19
+ import { useCurrentScreenData } from "../screen";
19
20
 
20
21
  /**
21
22
  * If onCellTap is defined execute the function and
@@ -44,6 +45,7 @@ export const useCellClick = ({
44
45
 
45
46
  const onCellTap: Option<Function> = React.useContext(CellTapContext);
46
47
  const actionExecutor = React.useContext(ActionExecutorContext);
48
+ const screenData = useCurrentScreenData();
47
49
 
48
50
  const cellSelectable = toBooleanWithDefaultTrue(
49
51
  component?.rules?.component_cells_selectable
@@ -78,7 +80,10 @@ export const useCellClick = ({
78
80
  logOnPress(selectedItem, pathname, component, onCellTap);
79
81
 
80
82
  if (selectedItem) {
81
- await actionExecutor?.handleEntryActions(selectedItem);
83
+ await actionExecutor?.handleEntryActions(selectedItem, {
84
+ component,
85
+ screenData,
86
+ });
82
87
  }
83
88
 
84
89
  if (selectedItem?.type?.value === "action") {
@@ -111,6 +116,7 @@ export const useCellClick = ({
111
116
  pathname,
112
117
  push,
113
118
  sendAnalyticsOnPress,
119
+ screenData,
114
120
  ]
115
121
  );
116
122
 
@@ -7,12 +7,12 @@ const appData = {
7
7
  sdk_version: "2.0.0",
8
8
  };
9
9
 
10
- let INFLATED_URL;
10
+ const mockUseInflatedUrl = jest.fn();
11
11
 
12
12
  jest.mock(
13
13
  "@applicaster/zapp-react-native-utils/reactHooks/feed/useInflatedUrl",
14
14
  () => ({
15
- useInflatedUrl: () => INFLATED_URL,
15
+ useInflatedUrl: mockUseInflatedUrl,
16
16
  })
17
17
  );
18
18
 
@@ -20,7 +20,7 @@ const { useBuildPipesUrl } = require("../useBuildPipesUrl");
20
20
 
21
21
  describe("useBuildPipesUrl", () => {
22
22
  it("returns the proper url", async () => {
23
- INFLATED_URL = "http://foo.com/show/show-1";
23
+ mockUseInflatedUrl.mockReturnValue("http://foo.com/show/show-1");
24
24
  const url = "http://foo.com/show/{{showId}}";
25
25
 
26
26
  const mapping = {
@@ -65,7 +65,7 @@ describe("useBuildPipesUrl", () => {
65
65
  });
66
66
 
67
67
  it("returns empty object if url is not in endpoints", async () => {
68
- INFLATED_URL = "http://foobar.com/show-1";
68
+ mockUseInflatedUrl.mockReturnValue("http://foobar.com/show-1");
69
69
  const url = "http://foobar.com/{{showId}}";
70
70
 
71
71
  const mapping = {
@@ -6,42 +6,41 @@ import { Provider } from "react-redux";
6
6
  import * as React from "react";
7
7
  import configureStore from "redux-mock-store";
8
8
  import thunk from "redux-thunk";
9
- import * as navigationHooks from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
9
+ import * as useRouteHook from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute";
10
10
  import * as useNavigationHooks from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
11
+ import { useFeedLoader } from "../useFeedLoader";
11
12
 
12
13
  const mockStore = configureStore([thunk]);
13
14
 
14
- jest.useFakeTimers();
15
+ jest.useFakeTimers({ legacyFakeTimers: true });
15
16
 
16
- const logger = {
17
+ const mockLogger = {
17
18
  warning: jest.fn(),
18
19
  log: jest.fn(),
19
20
  info: jest.fn(),
20
21
  };
21
22
 
22
- const navigator = {
23
+ const mockNavigator: any = {
23
24
  currentRoute: "/river/A1234",
24
25
  getStack: jest.fn(() => []),
25
26
  };
26
27
 
27
- const routeData = {
28
+ const mockRouteData: any = {
28
29
  screenData: {},
29
30
  pathname: "/river/A1234",
30
31
  };
31
32
 
32
- jest.mock("../../logger", () => ({
33
+ jest.doMock("../../logger", () => ({
33
34
  reactHooksLogger: {
34
- addSubsystem: jest.fn(() => logger),
35
+ addSubsystem: jest.fn(() => mockLogger),
35
36
  },
36
37
  }));
37
38
 
38
39
  jest
39
40
  .spyOn(useNavigationHooks, "useNavigation")
40
- .mockImplementation(() => navigator);
41
+ .mockImplementation(() => mockNavigator);
41
42
 
42
- jest.spyOn(navigationHooks, "useRoute").mockImplementation(() => routeData);
43
-
44
- const { useFeedLoader } = require("../useFeedLoader");
43
+ jest.spyOn(useRouteHook, "useRoute").mockImplementation(() => mockRouteData);
45
44
 
46
45
  const mockZappPipesData = {
47
46
  data: {
@@ -87,7 +87,7 @@ export const useFeedLoader = ({
87
87
  );
88
88
  }
89
89
  }
90
- }, [callableFeedUrl, currentFeed?.data]);
90
+ }, [callableFeedUrl, currentFeed?.data?.next]);
91
91
 
92
92
  useEffect(() => {
93
93
  if (
@@ -1,12 +1,12 @@
1
1
  import React from "react";
2
2
  import { useDispatch } from "react-redux";
3
- import { useRoute } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
4
- import {
5
- getDatasourceUrl,
6
- usePipesContexts,
7
- } from "@applicaster/zapp-react-native-ui-components/Decorators/RiverFeedLoader/utils";
3
+
4
+ import { getDatasourceUrl } from "@applicaster/zapp-react-native-ui-components/Decorators/RiverFeedLoader/utils/getDatasourceUrl";
5
+ import { usePipesContexts } from "@applicaster/zapp-react-native-ui-components/Decorators/RiverFeedLoader/utils/usePipesContexts";
8
6
  import { clearPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
9
7
 
8
+ import { useRoute } from "../navigation/useRoute";
9
+
10
10
  /**
11
11
  * reset river components cache when screen is unmounted
12
12
  * @param {string} riverId screen id
@@ -1,6 +1,5 @@
1
1
  import * as React from "react";
2
- import { renderHook, act } from "@testing-library/react-hooks";
3
- import { render } from "@testing-library/react-native";
2
+ import { renderHook, render, act } from "@testing-library/react-native";
4
3
  import { View } from "react-native";
5
4
 
6
5
  import { useSequentialLoader, useSequentialRenderItem } from "..";
@@ -66,26 +65,28 @@ describe("flatList hooks", () => {
66
65
 
67
66
  expect(result.current.allLoaded).toBe(false);
68
67
 
69
- result.current.renderItem(
70
- ({ onLoadFinished }) => {
71
- onLoadFinished();
72
- },
73
- { index: 1 }
74
- );
68
+ act(() => {
69
+ result.current.renderItem(
70
+ ({ onLoadFinished }) => {
71
+ onLoadFinished();
72
+ },
73
+ { index: 1 }
74
+ );
75
+ });
75
76
 
76
77
  expect(result.current.allLoaded).toBe(true);
77
78
  });
78
79
  });
79
80
 
80
81
  describe("Rendering wrapper", () => {
81
- it("wraps the elements in the View with display: none style", () => {
82
+ it("wraps the elements in the View with display: none style", async () => {
82
83
  const element1 = { id: 1 };
83
84
  const element2 = { id: 2 };
84
85
  const mockData = [element1, element2];
85
86
 
86
87
  const { result } = renderHook(() => useSequentialRenderItem(mockData));
87
88
 
88
- const { getByTestId } = render(
89
+ const res = render(
89
90
  result.current.renderItem(
90
91
  () => {
91
92
  return <View testID={"test"} />;
@@ -94,7 +95,9 @@ describe("flatList hooks", () => {
94
95
  )
95
96
  );
96
97
 
97
- const element = getByTestId("sequential-river-wrapper-1");
98
+ const element = res.root.findByProps({
99
+ testID: "sequential-river-wrapper-1",
100
+ });
98
101
 
99
102
  expect(element.props.style.display).toEqual("none");
100
103
  });
@@ -106,14 +109,16 @@ describe("flatList hooks", () => {
106
109
 
107
110
  const { result } = renderHook(() => useSequentialRenderItem(mockData));
108
111
 
109
- result.current.renderItem(
110
- ({ onLoadFinished }) => {
111
- onLoadFinished();
112
- },
113
- { item: element1, index: 0 }
114
- );
112
+ act(() => {
113
+ result.current.renderItem(
114
+ ({ onLoadFinished }) => {
115
+ onLoadFinished();
116
+ },
117
+ { item: element1, index: 0 }
118
+ );
119
+ });
115
120
 
116
- const { getByTestId } = render(
121
+ const { root } = render(
117
122
  result.current.renderItem(
118
123
  ({ onLoadFinished }) => {
119
124
  onLoadFinished();
@@ -124,7 +129,9 @@ describe("flatList hooks", () => {
124
129
  )
125
130
  );
126
131
 
127
- const element = getByTestId("sequential-river-wrapper-1");
132
+ const element = root.findByProps({
133
+ testID: "sequential-river-wrapper-1",
134
+ });
128
135
 
129
136
  expect(element.props.style.display).toEqual("flex");
130
137
  });
@@ -136,7 +143,7 @@ describe("flatList hooks", () => {
136
143
 
137
144
  const { result } = renderHook(() => useSequentialRenderItem(mockData));
138
145
 
139
- const { getByTestId } = render(
146
+ const { root } = render(
140
147
  result.current.renderItem(
141
148
  ({ onLoadFinished }) => {
142
149
  onLoadFinished();
@@ -147,7 +154,9 @@ describe("flatList hooks", () => {
147
154
  )
148
155
  );
149
156
 
150
- const element = getByTestId("sequential-river-wrapper-1");
157
+ const element = root.findByProps({
158
+ testID: "sequential-river-wrapper-1",
159
+ });
151
160
 
152
161
  expect(element.props.style.display).toEqual("none");
153
162
  });