@applicaster/zapp-react-native-utils 15.0.0-alpha.2210035610 → 15.0.0-alpha.2220425501

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 (80) hide show
  1. package/adsUtils/__tests__/createVMAP.test.ts +419 -0
  2. package/analyticsUtils/analyticsMapper.ts +10 -2
  3. package/appDataUtils/__tests__/urlScheme.test.ts +678 -0
  4. package/appUtils/HooksManager/__tests__/__snapshots__/hooksManager.test.js.snap +0 -188
  5. package/appUtils/HooksManager/__tests__/hooksManager.test.js +16 -2
  6. package/appUtils/contextKeysManager/__tests__/getKeys/failure.test.ts +7 -2
  7. package/appUtils/contextKeysManager/__tests__/getKeys/success.test.ts +48 -0
  8. package/appUtils/contextKeysManager/contextResolver.ts +51 -22
  9. package/appUtils/contextKeysManager/index.ts +65 -10
  10. package/appUtils/focusManager/treeDataStructure/Tree/__tests__/Tree.test.js +46 -0
  11. package/appUtils/focusManager/treeDataStructure/Tree/index.js +18 -18
  12. package/appUtils/playerManager/playerNative.ts +2 -1
  13. package/cloudEventsUtils/__tests__/index.test.ts +529 -0
  14. package/cloudEventsUtils/index.ts +65 -1
  15. package/configurationUtils/__tests__/imageSrcFromMediaItem.test.ts +38 -0
  16. package/configurationUtils/index.ts +17 -11
  17. package/dateUtils/__tests__/dayjs.test.ts +330 -0
  18. package/enumUtils/__tests__/getEnumKeyByEnumValue.test.ts +207 -0
  19. package/errorUtils/__tests__/GeneralError.test.ts +97 -0
  20. package/errorUtils/__tests__/HttpStatusCode.test.ts +344 -0
  21. package/errorUtils/__tests__/MissingPluginError.test.ts +113 -0
  22. package/errorUtils/__tests__/NetworkError.test.ts +202 -0
  23. package/errorUtils/__tests__/getParsedResponse.test.ts +188 -0
  24. package/errorUtils/__tests__/invariant.test.ts +112 -0
  25. package/headersUtils/__tests__/headersUtils.test.js +11 -1
  26. package/headersUtils/index.ts +2 -1
  27. package/manifestUtils/defaultManifestConfigurations/player.js +29 -16
  28. package/manifestUtils/platformIsTV.js +13 -0
  29. package/navigationUtils/index.ts +15 -5
  30. package/numberUtils/__tests__/toNumber.test.ts +12 -0
  31. package/numberUtils/__tests__/toPositiveNumber.test.ts +165 -0
  32. package/numberUtils/index.ts +19 -1
  33. package/package.json +2 -2
  34. package/reactHooks/analytics/__tests__/useSendAnalyticsOnPress.test.ts +537 -0
  35. package/reactHooks/app/__tests__/useAppState.test.ts +1 -1
  36. package/reactHooks/autoscrolling/__tests__/useTrackCurrentAutoScrollingElement.test.ts +1 -1
  37. package/reactHooks/autoscrolling/__tests__/useTrackedView.test.tsx +1 -2
  38. package/reactHooks/cell-click/__tests__/index.test.js +1 -3
  39. package/reactHooks/configuration/__tests__/index.test.tsx +1 -1
  40. package/reactHooks/connection/__tests__/index.test.js +1 -1
  41. package/reactHooks/dev/__tests__/useReRenderLog.test.ts +188 -0
  42. package/reactHooks/device/useIsTablet.tsx +14 -19
  43. package/reactHooks/events/index.ts +20 -0
  44. package/reactHooks/feed/__tests__/useBatchLoading.test.tsx +32 -23
  45. package/reactHooks/feed/__tests__/useBuildPipesUrl.test.tsx +19 -19
  46. package/reactHooks/feed/__tests__/useEntryScreenId.test.tsx +1 -1
  47. package/reactHooks/feed/__tests__/useFeedLoader.test.tsx +42 -30
  48. package/reactHooks/feed/__tests__/useFeedRefresh.test.tsx +1 -1
  49. package/reactHooks/feed/__tests__/useInflatedUrl.test.tsx +1 -1
  50. package/reactHooks/hookModal/hooks/useHookModalScreenData.ts +12 -8
  51. package/reactHooks/index.ts +2 -0
  52. package/reactHooks/layout/__tests__/index.test.tsx +1 -1
  53. package/reactHooks/layout/__tests__/useLayoutVersion.test.tsx +1 -1
  54. package/reactHooks/navigation/__tests__/index.test.tsx +40 -9
  55. package/reactHooks/navigation/index.ts +15 -4
  56. package/reactHooks/navigation/useRoute.ts +3 -1
  57. package/reactHooks/player/__tests__/useAutoSeek._test.tsx +1 -1
  58. package/reactHooks/player/__tests__/useTapSeek._test.ts +1 -1
  59. package/reactHooks/resolvers/__tests__/useCellResolver.test.tsx +1 -1
  60. package/reactHooks/resolvers/__tests__/useComponentResolver.test.tsx +1 -1
  61. package/reactHooks/screen/__tests__/useCurrentScreenData.test.tsx +1 -1
  62. package/reactHooks/screen/__tests__/useScreenBackgroundColor.test.tsx +1 -1
  63. package/reactHooks/screen/__tests__/useScreenData.test.tsx +1 -1
  64. package/reactHooks/screen/__tests__/useTargetScreenData.test.tsx +1 -1
  65. package/reactHooks/state/useRefWithInitialValue.ts +10 -0
  66. package/reactHooks/ui/__tests__/useFadeOutWhenBlurred.test.ts +580 -0
  67. package/reactHooks/utils/__tests__/index.test.js +1 -1
  68. package/rectUtils/__tests__/index.test.ts +549 -0
  69. package/rectUtils/index.ts +2 -2
  70. package/screenPickerUtils/__tests__/index.test.ts +333 -0
  71. package/screenState/__tests__/index.test.ts +1 -1
  72. package/services/storageServiceSync.web.ts +1 -1
  73. package/time/__tests__/BackgroundTimer.test.ts +156 -0
  74. package/time/__tests__/Timer.test.ts +236 -0
  75. package/typeGuards/__tests__/isString.test.ts +21 -0
  76. package/typeGuards/index.ts +4 -0
  77. package/utils/__tests__/clone.test.ts +158 -0
  78. package/utils/clone.ts +7 -0
  79. package/utils/index.ts +2 -1
  80. package/reactHooks/componentsMap/index.ts +0 -55
@@ -15,3 +15,5 @@ export * from "./device";
15
15
  export * from "./screen";
16
16
 
17
17
  export * from "./state";
18
+
19
+ export * from "./events";
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
 
3
- import { cleanup, renderHook } from "@testing-library/react-hooks";
3
+ import { cleanup, renderHook } from "@testing-library/react-native";
4
4
  import { Provider } from "react-redux";
5
5
  import configureStore from "redux-mock-store";
6
6
 
@@ -1,4 +1,4 @@
1
- import { renderHook } from "@testing-library/react-hooks";
1
+ import { renderHook } from "@testing-library/react-native";
2
2
  import configureStore from "redux-mock-store";
3
3
 
4
4
  const mockStore = configureStore();
@@ -1,11 +1,10 @@
1
1
  import React from "react";
2
2
  import { PathnameContext } from "@applicaster/zapp-react-native-ui-components/Contexts/PathnameContext";
3
- import { renderHook } from "@testing-library/react-hooks";
3
+ import { renderHook } from "@testing-library/react-native";
4
4
  import { isNavBarVisible, useRoute } from "../";
5
5
  import { Provider } from "react-redux";
6
6
  import configureMockStore from "redux-mock-store";
7
7
  import { NavigationContext } from "@applicaster/zapp-react-native-ui-components/Contexts/NavigationContext";
8
- import { ZappHookModalContext } from "@applicaster/zapp-react-native-ui-components/Contexts";
9
8
  import { ROUTE_TYPES } from "@applicaster/zapp-react-native-utils/navigationUtils/routeTypes";
10
9
  import { ScreenDataContext } from "@applicaster/zapp-react-native-ui-components/Contexts/ScreenDataContext";
11
10
 
@@ -83,10 +82,44 @@ const hookModalContextState = {
83
82
  },
84
83
  setState: jest.fn(),
85
84
  resetState: jest.fn(),
85
+ hookPresentationMode: null,
86
86
  };
87
87
 
88
88
  const hooksModalPathname = `${ROUTE_TYPES.HOOKS_MODAL}/${hookModalContextState.state.screenData.payload.id}`;
89
89
  const videoModalPathname = `${ROUTE_TYPES.VIDEO_MODAL}/${videoModalNavigator.videoModalState.item.id}`;
90
+
91
+ jest.mock(
92
+ "@applicaster/zapp-react-native-ui-components/Contexts/ZappHookModalContext",
93
+ () => {
94
+ const mockState = {
95
+ isRunningInBackground: false,
96
+ setIsRunningInBackground: jest.fn(),
97
+ setIsPresentingFullScreen: jest.fn(),
98
+ isPresentationFullScreen: true,
99
+ isHooksExecutionInProgress: true,
100
+ setIsHooksExecutionInProgress: jest.fn(),
101
+ state: {
102
+ path: "/home",
103
+ screenData: { payload: { id: "hookExecutedInModal" } },
104
+ },
105
+ setState: jest.fn(),
106
+ resetState: jest.fn(),
107
+ hookPresentationMode: null,
108
+ };
109
+
110
+ const mockHook = jest.fn((selector) => {
111
+ return selector ? selector(mockState) : mockState;
112
+ }) as jest.MockedFunction<any> & { getState: () => typeof mockState };
113
+
114
+ mockHook.getState = jest.fn(() => mockState);
115
+
116
+ return {
117
+ useZappHookModalStore: mockHook,
118
+ zappHookModalStore: mockHook,
119
+ };
120
+ }
121
+ );
122
+
90
123
  const mockStore = configureMockStore();
91
124
 
92
125
  const store = mockStore({
@@ -125,13 +158,11 @@ const videoModalWrapper = ({ children }) => (
125
158
 
126
159
  const hookModalWrapper = ({ children }) => (
127
160
  <Provider store={store}>
128
- <ZappHookModalContext.ReactContext.Provider value={hookModalContextState}>
129
- <NavigationContext.Provider value={hookModalNavigator}>
130
- <PathnameContext.Provider value={hooksModalPathname}>
131
- {children}
132
- </PathnameContext.Provider>
133
- </NavigationContext.Provider>
134
- </ZappHookModalContext.ReactContext.Provider>
161
+ <NavigationContext.Provider value={hookModalNavigator}>
162
+ <PathnameContext.Provider value={hooksModalPathname}>
163
+ {children}
164
+ </PathnameContext.Provider>
165
+ </NavigationContext.Provider>
135
166
  </Provider>
136
167
  );
137
168
 
@@ -1,5 +1,6 @@
1
- import { useContext, useEffect, useMemo, useRef } from "react";
1
+ import { useEffect, useMemo, useRef } from "react";
2
2
  import { BackHandler } from "react-native";
3
+ import { shallow } from "zustand/shallow";
3
4
 
4
5
  import {
5
6
  useContentTypes,
@@ -8,13 +9,13 @@ import {
8
9
  import { HooksManager } from "@applicaster/zapp-react-native-utils/appUtils/HooksManager";
9
10
 
10
11
  import { LONG_KEY_PRESS_TIMEOUT } from "@applicaster/quick-brick-core/const";
11
- import { ZappHookModalContext } from "@applicaster/zapp-react-native-ui-components/Contexts";
12
- import { HookModalContextT } from "@applicaster/zapp-react-native-ui-components/Contexts/ZappHookModalContext";
12
+ import { useZappHookModalStore } from "@applicaster/zapp-react-native-ui-components/Contexts/ZappHookModalContext";
13
13
  import { HOOKS_EVENTS } from "../../appUtils/HooksManager/constants";
14
14
  import { getRiverFromRoute, getTargetRoute } from "../../navigationUtils";
15
15
  import { useConnectionInfo } from "../connection";
16
16
 
17
17
  import { isTV, isWeb } from "@applicaster/zapp-react-native-utils/reactUtils";
18
+ import { pick } from "@applicaster/zapp-react-native-utils/utils";
18
19
  import { useNavbarState } from "../screen";
19
20
  import { useRivers } from "../state";
20
21
  import { useLayoutVersion } from "../layout";
@@ -168,7 +169,17 @@ export const useZappHooksForEntry = (
168
169
  setIsHooksExecutionInProgress,
169
170
  setIsPresentingFullScreen,
170
171
  setIsRunningInBackground,
171
- }: HookModalContextT = useContext(ZappHookModalContext.ReactContext);
172
+ } = useZappHookModalStore(
173
+ (state) =>
174
+ pick(state, [
175
+ "setState",
176
+ "resetState",
177
+ "setIsHooksExecutionInProgress",
178
+ "setIsPresentingFullScreen",
179
+ "setIsRunningInBackground",
180
+ ]),
181
+ shallow
182
+ );
172
183
 
173
184
  const plugins = usePlugins();
174
185
  const rivers = useRivers();
@@ -54,7 +54,9 @@ export const useRoute = (
54
54
 
55
55
  const modalScreenData = modalState.screen;
56
56
 
57
- const hookModalScreenData = useHookModalScreenData();
57
+ const hookModalScreenData = useHookModalScreenData(
58
+ !isHookModalPathname(pathname)
59
+ );
58
60
 
59
61
  const videoModalScreenData =
60
62
  navigator?.videoModalState?.item &&
@@ -1,4 +1,4 @@
1
- import { act, renderHook } from "@testing-library/react-hooks";
1
+ import { act, renderHook } from "@testing-library/react-native";
2
2
  import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils/playerManager";
3
3
 
4
4
  import { ON_HOLD_INTERVAL, SEEK_TYPE, SKIP_TIME_BASE } from "../const";
@@ -1,4 +1,4 @@
1
- import { renderHook } from "@testing-library/react-hooks";
1
+ import { renderHook } from "@testing-library/react-native";
2
2
  import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils/playerManager";
3
3
  import { useTapSeek } from "../useTapSeek";
4
4
 
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { View } from "react-native";
3
- import { cleanup, renderHook } from "@testing-library/react-hooks";
3
+ import { cleanup, renderHook } from "@testing-library/react-native";
4
4
  import configureStore from "redux-mock-store";
5
5
  import { Provider } from "react-redux";
6
6
 
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { renderHook, cleanup } from "@testing-library/react-hooks";
2
+ import { renderHook, cleanup } from "@testing-library/react-native";
3
3
  import configureStore from "redux-mock-store";
4
4
  import { Provider } from "react-redux";
5
5
 
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { Provider } from "react-redux";
3
- import { renderHook } from "@testing-library/react-hooks";
3
+ import { renderHook } from "@testing-library/react-native";
4
4
  import configureStore from "redux-mock-store";
5
5
  import { thunk } from "redux-thunk";
6
6
 
@@ -1,4 +1,4 @@
1
- import { renderHook } from "@testing-library/react-hooks";
1
+ import { renderHook } from "@testing-library/react-native";
2
2
 
3
3
  jest.mock(
4
4
  "@applicaster/zapp-react-native-ui-components/Components/River/useScreenConfiguration",
@@ -1,4 +1,4 @@
1
- import { renderHook } from "@testing-library/react-hooks";
1
+ import { renderHook } from "@testing-library/react-native";
2
2
  import configureStore from "redux-mock-store";
3
3
 
4
4
  const mockStore = configureStore();
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { Provider } from "react-redux";
3
- import { renderHook } from "@testing-library/react-hooks";
3
+ import { renderHook } from "@testing-library/react-native";
4
4
  import configureStore from "redux-mock-store";
5
5
  import { thunk } from "redux-thunk";
6
6
 
@@ -1,5 +1,9 @@
1
1
  import React from "react";
2
2
 
3
+ type WithOptionalCleanup = {
4
+ cleanup?: () => void;
5
+ };
6
+
3
7
  /**
4
8
  * returns a ref with an initial value that is lazily evaluated once
5
9
  * */
@@ -10,5 +14,11 @@ export const useRefWithInitialValue = <T>(initialValueGetter: () => T) => {
10
14
  ref.current = initialValueGetter();
11
15
  }
12
16
 
17
+ React.useEffect(() => {
18
+ return () => {
19
+ (ref.current as unknown as WithOptionalCleanup)?.cleanup?.();
20
+ };
21
+ }, []);
22
+
13
23
  return ref;
14
24
  };