@applicaster/zapp-react-native-utils 15.0.0-alpha.5170277721 → 15.0.0-alpha.5219062121

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 (138) hide show
  1. package/actionsExecutor/ActionExecutorContext.tsx +3 -6
  2. package/actionsExecutor/feedDecorator.ts +6 -6
  3. package/adsUtils/__tests__/createVMAP.test.ts +419 -0
  4. package/adsUtils/index.ts +2 -2
  5. package/analyticsUtils/README.md +1 -1
  6. package/analyticsUtils/analyticsMapper.ts +10 -2
  7. package/appDataUtils/__tests__/urlScheme.test.ts +678 -0
  8. package/appUtils/HooksManager/__tests__/__snapshots__/hooksManager.test.js.snap +0 -188
  9. package/appUtils/HooksManager/__tests__/hooksManager.test.js +16 -2
  10. package/appUtils/HooksManager/index.ts +10 -10
  11. package/appUtils/RiverFocusManager/{index.js → index.ts} +25 -18
  12. package/appUtils/accessibilityManager/__tests__/utils.test.ts +360 -0
  13. package/appUtils/accessibilityManager/const.ts +4 -0
  14. package/appUtils/accessibilityManager/hooks.ts +20 -13
  15. package/appUtils/accessibilityManager/index.ts +28 -1
  16. package/appUtils/accessibilityManager/utils.ts +59 -8
  17. package/appUtils/contextKeysManager/__tests__/getKeys/failure.test.ts +7 -2
  18. package/appUtils/contextKeysManager/__tests__/getKeys/success.test.ts +48 -0
  19. package/appUtils/contextKeysManager/contextResolver.ts +51 -22
  20. package/appUtils/contextKeysManager/index.ts +65 -10
  21. package/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +3 -0
  22. package/appUtils/focusManager/index.ios.ts +43 -4
  23. package/appUtils/focusManager/treeDataStructure/Tree/__tests__/Tree.test.js +46 -0
  24. package/appUtils/focusManager/treeDataStructure/Tree/index.js +18 -18
  25. package/appUtils/focusManagerAux/utils/index.ios.ts +122 -0
  26. package/appUtils/focusManagerAux/utils/index.ts +1 -1
  27. package/appUtils/focusManagerAux/utils/utils.ios.ts +199 -3
  28. package/appUtils/keyCodes/keys/keys.web.ts +1 -4
  29. package/appUtils/orientationHelper.ts +2 -4
  30. package/appUtils/platform/platformUtils.ts +117 -18
  31. package/appUtils/playerManager/OverlayObserver/OverlaysObserver.ts +94 -4
  32. package/appUtils/playerManager/OverlayObserver/utils.ts +32 -20
  33. package/appUtils/playerManager/player.ts +4 -0
  34. package/appUtils/playerManager/playerNative.ts +31 -17
  35. package/appUtils/playerManager/usePlayerState.tsx +14 -2
  36. package/cellUtils/index.ts +32 -0
  37. package/cloudEventsUtils/__tests__/index.test.ts +529 -0
  38. package/cloudEventsUtils/index.ts +65 -1
  39. package/configurationUtils/__tests__/imageSrcFromMediaItem.test.ts +38 -0
  40. package/configurationUtils/__tests__/manifestKeyParser.test.ts +26 -26
  41. package/configurationUtils/index.ts +17 -11
  42. package/dateUtils/__tests__/dayjs.test.ts +330 -0
  43. package/enumUtils/__tests__/getEnumKeyByEnumValue.test.ts +207 -0
  44. package/errorUtils/__tests__/GeneralError.test.ts +97 -0
  45. package/errorUtils/__tests__/HttpStatusCode.test.ts +344 -0
  46. package/errorUtils/__tests__/MissingPluginError.test.ts +113 -0
  47. package/errorUtils/__tests__/NetworkError.test.ts +202 -0
  48. package/errorUtils/__tests__/getParsedResponse.test.ts +188 -0
  49. package/errorUtils/__tests__/invariant.test.ts +112 -0
  50. package/focusManager/aux/index.ts +1 -1
  51. package/headersUtils/__tests__/headersUtils.test.js +11 -1
  52. package/headersUtils/index.ts +2 -1
  53. package/manifestUtils/defaultManifestConfigurations/player.js +109 -11
  54. package/manifestUtils/keys.js +21 -0
  55. package/manifestUtils/platformIsTV.js +13 -0
  56. package/manifestUtils/sharedConfiguration/screenPicker/utils.js +1 -0
  57. package/manifestUtils/tvAction/container/index.js +1 -1
  58. package/navigationUtils/index.ts +15 -5
  59. package/numberUtils/__tests__/toNumber.test.ts +12 -0
  60. package/numberUtils/__tests__/toPositiveNumber.test.ts +165 -0
  61. package/numberUtils/index.ts +19 -1
  62. package/package.json +4 -4
  63. package/playerUtils/usePlayerTTS.ts +8 -3
  64. package/pluginUtils/index.ts +4 -0
  65. package/reactHooks/advertising/index.ts +2 -2
  66. package/reactHooks/analytics/__tests__/useSendAnalyticsOnPress.test.ts +537 -0
  67. package/reactHooks/app/__tests__/useAppState.test.ts +1 -1
  68. package/reactHooks/autoscrolling/__tests__/useTrackCurrentAutoScrollingElement.test.ts +1 -1
  69. package/reactHooks/autoscrolling/__tests__/useTrackedView.test.tsx +1 -2
  70. package/reactHooks/cell-click/__tests__/index.test.js +1 -3
  71. package/reactHooks/configuration/__tests__/index.test.tsx +1 -1
  72. package/reactHooks/connection/__tests__/index.test.js +1 -1
  73. package/reactHooks/debugging/__tests__/index.test.js +4 -4
  74. package/reactHooks/dev/__tests__/useReRenderLog.test.ts +188 -0
  75. package/reactHooks/device/useIsTablet.tsx +14 -19
  76. package/reactHooks/device/useMemoizedIsTablet.ts +3 -3
  77. package/reactHooks/events/index.ts +20 -0
  78. package/reactHooks/feed/__tests__/useBatchLoading.test.tsx +32 -23
  79. package/reactHooks/feed/__tests__/useBuildPipesUrl.test.tsx +19 -19
  80. package/reactHooks/feed/__tests__/useEntryScreenId.test.tsx +4 -1
  81. package/reactHooks/feed/__tests__/useFeedLoader.test.tsx +42 -30
  82. package/reactHooks/feed/__tests__/useFeedRefresh.test.tsx +1 -1
  83. package/reactHooks/feed/__tests__/{useInflatedUrl.test.ts → useInflatedUrl.test.tsx} +62 -7
  84. package/reactHooks/feed/useEntryScreenId.ts +2 -2
  85. package/reactHooks/feed/useInflatedUrl.ts +43 -17
  86. package/reactHooks/flatList/useLoadNextPageIfNeeded.ts +13 -16
  87. package/reactHooks/hookModal/hooks/useHookModalScreenData.ts +12 -8
  88. package/reactHooks/index.ts +2 -0
  89. package/reactHooks/layout/__tests__/index.test.tsx +1 -1
  90. package/reactHooks/layout/__tests__/useLayoutVersion.test.tsx +1 -1
  91. package/reactHooks/layout/useDimensions/__tests__/{useDimensions.test.ts → useDimensions.test.tsx} +105 -25
  92. package/reactHooks/layout/useDimensions/useDimensions.ts +2 -2
  93. package/reactHooks/navigation/__tests__/index.test.tsx +40 -9
  94. package/reactHooks/navigation/index.ts +27 -11
  95. package/reactHooks/navigation/useRoute.ts +11 -7
  96. package/reactHooks/player/TVSeekControlller/TVSeekController.ts +27 -10
  97. package/reactHooks/player/__tests__/useAutoSeek._test.tsx +1 -1
  98. package/reactHooks/player/__tests__/useTapSeek._test.ts +1 -1
  99. package/reactHooks/resolvers/__tests__/useCellResolver.test.tsx +1 -1
  100. package/reactHooks/resolvers/__tests__/useComponentResolver.test.tsx +1 -1
  101. package/reactHooks/resolvers/useCellResolver.ts +6 -2
  102. package/reactHooks/resolvers/useComponentResolver.ts +8 -2
  103. package/reactHooks/screen/__tests__/useCurrentScreenData.test.tsx +2 -2
  104. package/reactHooks/screen/__tests__/useScreenBackgroundColor.test.tsx +1 -1
  105. package/reactHooks/screen/__tests__/useScreenData.test.tsx +1 -1
  106. package/reactHooks/screen/__tests__/useTargetScreenData.test.tsx +12 -4
  107. package/reactHooks/screen/useTargetScreenData.ts +4 -2
  108. package/reactHooks/state/useRefWithInitialValue.ts +10 -0
  109. package/reactHooks/state/useRivers.ts +1 -1
  110. package/reactHooks/ui/__tests__/useFadeOutWhenBlurred.test.ts +580 -0
  111. package/reactHooks/usePluginConfiguration.ts +2 -2
  112. package/reactHooks/utils/__tests__/index.test.js +1 -1
  113. package/rectUtils/__tests__/index.test.ts +549 -0
  114. package/rectUtils/index.ts +2 -2
  115. package/screenPickerUtils/__tests__/index.test.ts +333 -0
  116. package/screenState/__tests__/index.test.ts +1 -1
  117. package/screenUtils/index.ts +3 -0
  118. package/searchUtils/const.ts +7 -0
  119. package/searchUtils/index.ts +3 -0
  120. package/services/storageServiceSync.web.ts +1 -1
  121. package/stringUtils/index.ts +1 -1
  122. package/testUtils/index.tsx +30 -21
  123. package/time/__tests__/BackgroundTimer.test.ts +156 -0
  124. package/time/__tests__/Timer.test.ts +236 -0
  125. package/typeGuards/__tests__/isString.test.ts +21 -0
  126. package/typeGuards/index.ts +4 -0
  127. package/utils/__tests__/mapAccum.test.ts +73 -0
  128. package/utils/__tests__/mergeRight.test.ts +48 -0
  129. package/utils/__tests__/selectors.test.ts +124 -0
  130. package/utils/index.ts +17 -0
  131. package/utils/mapAccum.ts +23 -0
  132. package/utils/mergeRight.ts +5 -0
  133. package/utils/path.ts +6 -3
  134. package/utils/pathOr.ts +5 -1
  135. package/utils/selectors.ts +46 -0
  136. package/zappFrameworkUtils/HookCallback/callbackNavigationAction.ts +34 -11
  137. package/zappFrameworkUtils/HookCallback/hookCallbackManifestExtensions.config.js +1 -1
  138. package/reactHooks/componentsMap/index.ts +0 -55
@@ -3,7 +3,10 @@
3
3
 
4
4
  import { useContext } from "react";
5
5
 
6
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
6
+ import {
7
+ useContentTypes,
8
+ usePlugins,
9
+ } from "@applicaster/zapp-react-native-redux/hooks";
7
10
 
8
11
  import { legacyScreenData } from "@applicaster/quick-brick-core/App/NavigationProvider/utils";
9
12
 
@@ -14,6 +17,7 @@ import { useNavigation } from "./useNavigation";
14
17
  import { useModalStoreState } from "../../modalState";
15
18
  import { ScreenDataContext } from "@applicaster/zapp-react-native-ui-components/Contexts/ScreenDataContext";
16
19
  import { usePathname } from "./usePathname";
20
+ import { useRivers } from "../state";
17
21
 
18
22
  // starts with modal/
19
23
  const isModalPathname = (pathname: string) => /^modal\//.test(pathname);
@@ -42,17 +46,17 @@ export const useRoute = (
42
46
  ? legacyScreenData(screenContext)
43
47
  : screenContext;
44
48
 
45
- const { plugins, contentTypes, rivers } = usePickFromState([
46
- "plugins",
47
- "rivers",
48
- "contentTypes",
49
- ]);
49
+ const plugins = usePlugins();
50
+ const rivers = useRivers();
51
+ const contentTypes = useContentTypes();
50
52
 
51
53
  const modalState = useModalStoreState();
52
54
 
53
55
  const modalScreenData = modalState.screen;
54
56
 
55
- const hookModalScreenData = useHookModalScreenData();
57
+ const hookModalScreenData = useHookModalScreenData(
58
+ !isHookModalPathname(pathname)
59
+ );
56
60
 
57
61
  const videoModalScreenData =
58
62
  navigator?.videoModalState?.item &&
@@ -147,17 +147,34 @@ export class TVSeekController
147
147
 
148
148
  let targetPos = currentPos;
149
149
 
150
- if (this.currentSeekType === SEEK_TYPE.FORWARD) {
151
- targetPos = Math.min(
152
- currentPos + offset,
153
- this.playerController.getSeekableDuration()
154
- );
155
- } else if (this.currentSeekType === SEEK_TYPE.REWIND) {
156
- targetPos = Math.max(0, currentPos - offset);
150
+ const isLive = this.playerController.isLive();
151
+
152
+ if (isLive) {
153
+ if (this.currentSeekType === SEEK_TYPE.REWIND) {
154
+ targetPos = Math.min(
155
+ currentPos + offset,
156
+ this.playerController.getSeekableDuration()
157
+ );
158
+ } else if (this.currentSeekType === SEEK_TYPE.FORWARD) {
159
+ targetPos = Math.max(0, currentPos - offset);
160
+ } else {
161
+ log_warning(
162
+ `TVSeekController: handleDelayedSeek - invalid seek type: ${this.currentSeekType}`
163
+ );
164
+ }
157
165
  } else {
158
- log_warning(
159
- `TVSeekController: handleDelayedSeek - invalid seek type: ${this.currentSeekType}`
160
- );
166
+ if (this.currentSeekType === SEEK_TYPE.FORWARD) {
167
+ targetPos = Math.min(
168
+ currentPos + offset,
169
+ this.playerController.getSeekableDuration()
170
+ );
171
+ } else if (this.currentSeekType === SEEK_TYPE.REWIND) {
172
+ targetPos = Math.max(0, currentPos - offset);
173
+ } else {
174
+ log_warning(
175
+ `TVSeekController: handleDelayedSeek - invalid seek type: ${this.currentSeekType}`
176
+ );
177
+ }
161
178
  }
162
179
 
163
180
  log_debug(
@@ -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
 
@@ -3,7 +3,10 @@ import memoizee from "memoizee";
3
3
  import * as R from "ramda";
4
4
 
5
5
  import { CellRendererResolver } from "@applicaster/zapp-react-native-ui-components/Components/CellRendererResolver";
6
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
6
+ import {
7
+ usePlugins,
8
+ useCellStyles,
9
+ } from "@applicaster/zapp-react-native-redux";
7
10
  import { useDimensions } from "../layout";
8
11
  import { useIsRTL } from "../../localizationUtils";
9
12
 
@@ -53,7 +56,8 @@ export function useCellResolver({
53
56
  updateForInactiveScreens: false,
54
57
  });
55
58
 
56
- const { plugins, cellStyles } = usePickFromState(["plugins", "cellStyles"]);
59
+ const plugins = usePlugins();
60
+ const cellStyles = useCellStyles();
57
61
  const isRTL = useIsRTL();
58
62
 
59
63
  const options = {
@@ -2,7 +2,11 @@
2
2
  import * as React from "react";
3
3
 
4
4
  import { findComponentByType } from "@applicaster/zapp-react-native-utils/pluginUtils";
5
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
5
+ import {
6
+ usePlugins,
7
+ useAppSelector,
8
+ selectComponents,
9
+ } from "@applicaster/zapp-react-native-redux";
6
10
 
7
11
  type Decorator = (component: React.Component<any>) => React.Component<any>;
8
12
  type Watcher = Array<any>;
@@ -15,7 +19,9 @@ export function useComponentResolver(
15
19
  { componentType, decorators }: Props,
16
20
  watchers?: Watcher
17
21
  ): React.ComponentType<any> {
18
- const { plugins, components } = usePickFromState(["plugins", "components"]);
22
+ const plugins = usePlugins();
23
+
24
+ const components = useAppSelector(selectComponents);
19
25
 
20
26
  return React.useMemo(
21
27
  () =>
@@ -1,8 +1,8 @@
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
- import thunk from "redux-thunk";
5
+ import { thunk } from "redux-thunk";
6
6
 
7
7
  const mockStore = configureStore([thunk]);
8
8
 
@@ -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,16 +1,24 @@
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
- import thunk from "redux-thunk";
5
+ import { thunk } from "redux-thunk";
6
6
 
7
7
  const mockStore = configureStore([thunk]);
8
8
 
9
9
  import { useTargetScreenData } from "../useTargetScreenData";
10
10
 
11
11
  describe("useTargetScreenData", function () {
12
- const river_id_2 = {};
13
- const river_id_1 = {};
12
+ const river_id_2 = {
13
+ id: "river_id_2",
14
+ type: "any",
15
+ };
16
+
17
+ const river_id_1 = {
18
+ id: "river_id_1",
19
+ type: "any",
20
+ };
21
+
14
22
  const screenId = "river_id_2";
15
23
  const entry = { id: "test", type: { value: "video" } };
16
24
 
@@ -1,7 +1,8 @@
1
1
  import React from "react";
2
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
2
+ import { useContentTypes } from "@applicaster/zapp-react-native-redux/hooks";
3
3
  import * as R from "ramda";
4
4
  import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
5
+ import { useRivers } from "../state";
5
6
 
6
7
  export function getTargetScreenData(
7
8
  entry: ZappEntry,
@@ -43,7 +44,8 @@ export function getTargetScreenDataFromEntry(entry: ZappEntry): ZappRiver {
43
44
  }
44
45
 
45
46
  export const useTargetScreenData = (entry: ZappEntry) => {
46
- const { rivers, contentTypes } = usePickFromState(["rivers", "contentTypes"]);
47
+ const rivers = useRivers();
48
+ const contentTypes = useContentTypes();
47
49
 
48
50
  return React.useMemo(
49
51
  () => getTargetScreenData(entry, rivers, contentTypes),
@@ -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
  };
@@ -3,6 +3,6 @@ import {
3
3
  selectRivers,
4
4
  } from "@applicaster/zapp-react-native-redux";
5
5
 
6
- export function useRivers(): Record<string, ZappRiver> {
6
+ export function useRivers() {
7
7
  return useAppSelector(selectRivers);
8
8
  }