@applicaster/zapp-react-native-utils 15.0.0-alpha.1201747215 → 15.0.0-alpha.1257410812

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 (97) hide show
  1. package/actionsExecutor/ActionExecutorContext.tsx +3 -6
  2. package/actionsExecutor/feedDecorator.ts +6 -6
  3. package/adsUtils/index.ts +2 -2
  4. package/analyticsUtils/README.md +1 -1
  5. package/analyticsUtils/analyticsMapper.ts +10 -2
  6. package/appUtils/HooksManager/index.ts +10 -10
  7. package/appUtils/RiverFocusManager/{index.js → index.ts} +25 -18
  8. package/appUtils/accessibilityManager/__tests__/utils.test.ts +360 -0
  9. package/appUtils/accessibilityManager/const.ts +4 -0
  10. package/appUtils/accessibilityManager/hooks.ts +20 -13
  11. package/appUtils/accessibilityManager/index.ts +28 -1
  12. package/appUtils/accessibilityManager/utils.ts +59 -8
  13. package/appUtils/contextKeysManager/__tests__/getKeys/failure.test.ts +7 -2
  14. package/appUtils/contextKeysManager/__tests__/getKeys/success.test.ts +48 -0
  15. package/appUtils/contextKeysManager/contextResolver.ts +51 -22
  16. package/appUtils/contextKeysManager/index.ts +65 -10
  17. package/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +3 -0
  18. package/appUtils/focusManager/index.ios.ts +43 -4
  19. package/appUtils/focusManagerAux/utils/index.ios.ts +122 -0
  20. package/appUtils/focusManagerAux/utils/index.ts +1 -1
  21. package/appUtils/focusManagerAux/utils/utils.ios.ts +199 -3
  22. package/appUtils/keyCodes/keys/keys.web.ts +1 -4
  23. package/appUtils/orientationHelper.ts +2 -4
  24. package/appUtils/platform/platformUtils.ts +115 -16
  25. package/appUtils/playerManager/OverlayObserver/OverlaysObserver.ts +94 -4
  26. package/appUtils/playerManager/OverlayObserver/utils.ts +32 -20
  27. package/appUtils/playerManager/player.ts +4 -0
  28. package/appUtils/playerManager/playerNative.ts +29 -16
  29. package/appUtils/playerManager/usePlayerState.tsx +14 -2
  30. package/cellUtils/index.ts +32 -0
  31. package/configurationUtils/__tests__/imageSrcFromMediaItem.test.ts +38 -0
  32. package/configurationUtils/__tests__/manifestKeyParser.test.ts +26 -26
  33. package/configurationUtils/index.ts +17 -11
  34. package/focusManager/aux/index.ts +1 -1
  35. package/manifestUtils/defaultManifestConfigurations/player.js +125 -11
  36. package/manifestUtils/tvAction/container/index.js +1 -1
  37. package/navigationUtils/index.ts +15 -5
  38. package/package.json +4 -4
  39. package/playerUtils/usePlayerTTS.ts +8 -3
  40. package/pluginUtils/index.ts +4 -0
  41. package/reactHooks/advertising/index.ts +2 -2
  42. package/reactHooks/app/__tests__/useAppState.test.ts +1 -1
  43. package/reactHooks/autoscrolling/__tests__/useTrackCurrentAutoScrollingElement.test.ts +1 -1
  44. package/reactHooks/autoscrolling/__tests__/useTrackedView.test.tsx +1 -2
  45. package/reactHooks/cell-click/__tests__/index.test.js +1 -3
  46. package/reactHooks/configuration/__tests__/index.test.tsx +1 -1
  47. package/reactHooks/connection/__tests__/index.test.js +1 -1
  48. package/reactHooks/debugging/__tests__/index.test.js +4 -4
  49. package/reactHooks/device/useMemoizedIsTablet.ts +3 -3
  50. package/reactHooks/feed/__tests__/useBatchLoading.test.tsx +32 -23
  51. package/reactHooks/feed/__tests__/useBuildPipesUrl.test.tsx +19 -19
  52. package/reactHooks/feed/__tests__/useEntryScreenId.test.tsx +4 -1
  53. package/reactHooks/feed/__tests__/useFeedLoader.test.tsx +42 -30
  54. package/reactHooks/feed/__tests__/useFeedRefresh.test.tsx +1 -1
  55. package/reactHooks/feed/__tests__/{useInflatedUrl.test.ts → useInflatedUrl.test.tsx} +62 -7
  56. package/reactHooks/feed/useEntryScreenId.ts +2 -2
  57. package/reactHooks/feed/useInflatedUrl.ts +43 -17
  58. package/reactHooks/flatList/useLoadNextPageIfNeeded.ts +13 -16
  59. package/reactHooks/hookModal/hooks/useHookModalScreenData.ts +12 -8
  60. package/reactHooks/layout/__tests__/index.test.tsx +1 -1
  61. package/reactHooks/layout/__tests__/useLayoutVersion.test.tsx +1 -1
  62. package/reactHooks/layout/useDimensions/__tests__/{useDimensions.test.ts → useDimensions.test.tsx} +105 -25
  63. package/reactHooks/layout/useDimensions/useDimensions.ts +2 -2
  64. package/reactHooks/navigation/__tests__/index.test.tsx +40 -9
  65. package/reactHooks/navigation/index.ts +27 -11
  66. package/reactHooks/navigation/useRoute.ts +11 -7
  67. package/reactHooks/player/TVSeekControlller/TVSeekController.ts +27 -10
  68. package/reactHooks/player/__tests__/useAutoSeek._test.tsx +1 -1
  69. package/reactHooks/player/__tests__/useTapSeek._test.ts +1 -1
  70. package/reactHooks/resolvers/__tests__/useCellResolver.test.tsx +1 -1
  71. package/reactHooks/resolvers/__tests__/useComponentResolver.test.tsx +1 -1
  72. package/reactHooks/resolvers/useCellResolver.ts +6 -2
  73. package/reactHooks/resolvers/useComponentResolver.ts +8 -2
  74. package/reactHooks/screen/__tests__/useCurrentScreenData.test.tsx +2 -2
  75. package/reactHooks/screen/__tests__/useScreenBackgroundColor.test.tsx +1 -1
  76. package/reactHooks/screen/__tests__/useScreenData.test.tsx +1 -1
  77. package/reactHooks/screen/__tests__/useTargetScreenData.test.tsx +12 -4
  78. package/reactHooks/screen/useTargetScreenData.ts +4 -2
  79. package/reactHooks/state/useRefWithInitialValue.ts +10 -0
  80. package/reactHooks/state/useRivers.ts +1 -1
  81. package/reactHooks/usePluginConfiguration.ts +2 -2
  82. package/reactHooks/utils/__tests__/index.test.js +1 -1
  83. package/screenState/__tests__/index.test.ts +1 -1
  84. package/searchUtils/const.ts +7 -0
  85. package/searchUtils/index.ts +3 -0
  86. package/services/storageServiceSync.web.ts +1 -1
  87. package/stringUtils/index.ts +1 -1
  88. package/testUtils/index.tsx +30 -21
  89. package/utils/__tests__/mergeRight.test.ts +48 -0
  90. package/utils/__tests__/selectors.test.ts +124 -0
  91. package/utils/index.ts +13 -0
  92. package/utils/mergeRight.ts +5 -0
  93. package/utils/path.ts +6 -3
  94. package/utils/pathOr.ts +5 -1
  95. package/utils/selectors.ts +46 -0
  96. package/zappFrameworkUtils/HookCallback/callbackNavigationAction.ts +34 -11
  97. package/zappFrameworkUtils/HookCallback/hookCallbackManifestExtensions.config.js +1 -1
@@ -331,10 +331,53 @@ function getPlayerConfiguration({ platform, version }) {
331
331
  label_tooltip: "Hint for skip intro button accessibility",
332
332
  type: "text_input",
333
333
  },
334
+ {
335
+ type: "text_input",
336
+ label: "Text Tracks Label",
337
+ key: "text_tracks_label",
338
+ initial_value: "Subtitles",
339
+ label_tooltip: "Label for the text tracks list",
340
+ },
341
+ {
342
+ type: "text_input",
343
+ label: "Audio Tracks Label",
344
+ key: "audio_tracks_label",
345
+ initial_value: "Audio",
346
+ label_tooltip: "Label for the audio tracks list",
347
+ },
348
+ {
349
+ type: "text_input",
350
+ label: "Off Track Label",
351
+ key: "off_track_label",
352
+ initial_value: "Off",
353
+ label_tooltip: "Label for the 'Off' option in text tracks list",
354
+ },
355
+ {
356
+ type: "text_input",
357
+ label: "Default Track Label",
358
+ key: "default_track_label",
359
+ initial_value: "Default",
360
+ label_tooltip:
361
+ "Label for the 'Default' audio track in audio tracks list",
362
+ },
334
363
  ],
335
364
  };
336
365
 
337
366
  if (isTV(platform)) {
367
+ localizations.fields.push({
368
+ key: "back_to_live_label",
369
+ label: "Back to live label",
370
+ initial_value: "Back To Live",
371
+ type: "text_input",
372
+ });
373
+
374
+ localizations.fields.push({
375
+ key: "start_over_label",
376
+ label: "Start over label",
377
+ initial_value: "Start Over",
378
+ type: "text_input",
379
+ });
380
+
338
381
  styles.fields.push(
339
382
  fieldsGroup("Always Show Scrub Bar & Timestamp", "", [
340
383
  {
@@ -447,7 +490,7 @@ function getPlayerConfiguration({ platform, version }) {
447
490
  ),
448
491
  fieldsGroup(
449
492
  "Skip Button",
450
- "This section allows you to configure the skip button styles for tv",
493
+ "This section allows you to configure the skip button behaviour",
451
494
  [
452
495
  {
453
496
  type: "switch",
@@ -464,6 +507,12 @@ function getPlayerConfiguration({ platform, version }) {
464
507
  label: "Persistent Button Toggle",
465
508
  initial_value: true,
466
509
  },
510
+ ]
511
+ ),
512
+ fieldsGroup(
513
+ "Labeled Button Style",
514
+ "This section allows you to configure the labeled button styles",
515
+ [
467
516
  {
468
517
  type: "color_picker_rgba",
469
518
  label_tooltip: "",
@@ -619,7 +668,61 @@ function getPlayerConfiguration({ platform, version }) {
619
668
  );
620
669
  }
621
670
 
671
+ if (isTV(platform)) {
672
+ general.fields.push(
673
+ {
674
+ key: "liveSeekingEnabled",
675
+ label: "Live Seeking Enabled",
676
+ initial_value: false,
677
+ type: "switch",
678
+ label_tooltip: "Enable Live Seek",
679
+ },
680
+ {
681
+ key: "minimumAllowedSeekableDurationInSeconds",
682
+ label: "Minimum allowed seekable duration in seconds",
683
+ initial_value: 300,
684
+ type: "number_input",
685
+ label_tooltip:
686
+ "If duration less than this value, player will disable 'liveSeekingEnabled' value",
687
+ },
688
+ {
689
+ key: "live_image",
690
+ label: "Live badge",
691
+ type: "uploader",
692
+ label_tooltip: "Override default live badge / icon",
693
+ },
694
+ {
695
+ key: "live_width",
696
+ label: "Live badge width",
697
+ type: "number_input",
698
+ initial_value: 85,
699
+ },
700
+ {
701
+ key: "live_height",
702
+ label: "Live badge height",
703
+ type: "number_input",
704
+ initial_value: 50,
705
+ }
706
+ );
707
+ }
708
+
622
709
  if (isMobile(platform)) {
710
+ localizations.fields.push(
711
+ {
712
+ type: "text_input",
713
+ label: "Restrict playback on mobile networks alert title",
714
+ key: "mobile_connection_restricted_alert_title",
715
+ initial_value: "Restricted Connection Type",
716
+ },
717
+ {
718
+ type: "text_input",
719
+ label: "Restrict playback on mobile networks alert message",
720
+ key: "mobile_connection_restricted_alert_message",
721
+ initial_value:
722
+ "This content can only be viewed over a Wi-Fi or LAN network.",
723
+ }
724
+ );
725
+
623
726
  general.fields.push(
624
727
  {
625
728
  section: "Default Timestamp Type",
@@ -1142,40 +1245,35 @@ function getPlayerConfiguration({ platform, version }) {
1142
1245
  label: "Playback Speed 0.8x",
1143
1246
  type: "uploader",
1144
1247
  label_tooltip: "Playback Speed 0.8x",
1145
- initial_value:
1146
- "data:image/png;base64,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",
1248
+ initial_value: null,
1147
1249
  },
1148
1250
  {
1149
1251
  key: "speed_1",
1150
1252
  label: "Playback Speed 1x",
1151
1253
  type: "uploader",
1152
1254
  label_tooltip: "Playback Speed 1x",
1153
- initial_value:
1154
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAI4SURBVHgB7dzhcRJBGIDhT8cCkg6SDmIHsQNLiBUYKwAqUCtIC5ZACVqBdIAdxN3JMSLecXcE8Tt5npkdJlxyf97ZcLcLRAAAAAAAAAAAAAAAAAAAAAAAAADAMb2IiViv17fl4aGMq45fub68vFwFv3kVyZWwF+VhVsZ9MFrqwANmLT1SBm5mbQ37NniWl5FMifu+PHwPcY8izQwuYa/iadbeBkeTaQbfxf64P8r4GoyS7l90h89lXJfxLRgl+23Sqox35f52WX8o/8aDcTLP4EUZrzdxOUzGGbws40MJ6/X2CDIFrhdRNeyn4GjSBBb275jKVTQHEvg/d/aB69Lo+sljGR/jADvnmEUiZx242a2qr/0XzVP35bmHkeeY7Zxj3pw3hXOfwTctz90NjdzEnbccuo0kzj1w1712b+Q9cfed9+TOOnCzSrboONwZuSfuopz3SyRx9hdZJcY8RkQeELfr2D/hNimGR55a3Cr9m+5OpcZpdqvabnNq5HpBdtPx5ynjVmbwlp6ZPLm4lcA7eiLvSh23ErjFwMjp41YCd3t85vEUBG7Rc7W8Mc+27txG4B0D426kjyzwlp64y47nU0cWuDFgEeNNdF94pY0scAxfoeq5uk4Z2Yb/yOXHqUW24X/A2vKAyGk+OGfDv13vIsaBy5onZ8P/T4NXqPZEtuGfwdaG/yp+vfF+HiNsRV5tnSPNhv9kvoSlaj75f9F2zBewAAAAAAAAAAAAAAAAAAAAAAAAwHT8BNhH51wNSx95AAAAAElFTkSuQmCC",
1255
+ initial_value: null,
1155
1256
  },
1156
1257
  {
1157
1258
  key: "speed_1_2",
1158
1259
  label: "Playback Speed 1.2x",
1159
1260
  type: "uploader",
1160
1261
  label_tooltip: "Playback Speed 1.2x",
1161
- initial_value:
1162
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUjSURBVHgB7d3bUeNIFAbgA7Xv2EUCmgiWjWBNBAwRYCKYdQQrIliIYEUEw0awymDIYDQBUFC8g+eccWsulPomteTu1v9VdZlSGyP0W1KrWxciAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgPgc0Mw8Pj4u+KUt4mm5XDaUqVED5oX5gV/ea6o3vGDvaQI8Hyt+ueAir4XmbTIvNZebnAIfJWBeoCf88g/tFqjOKS/ImkbE8/FezUdBfu5o9wVsKHGHFJBs/rjIAv1E5nBHpebjX/7xI/mHK+SL8Zk/429K3G8UiNoMykItaI/UPvZ/Lic0XMmfR7wmX1GiBq/BP621slAL2j9Z60KE25KQ/6JEDdoHD9jHieD7YJ6fNe22IjpPXG5p16Bq1DT5MpyReZciv/eO5/eJEtN7E63C/Wh5myyQBU1Hu888ODi42263lx0h1Vyu1ZdDvqxd8yvTZC0uKTFDNtGm4GQhbrjc0ERUy73QVNeLxeLctAZyXcUv56R3QQkK2or+9oGHhxXtNmfXNK2Voe6SHKhdxq2muuAvUUGJCRlww+X06Ojock/7qj810+89j2fvDHUFJSZUwLIp/mPsjgsL3S7jC/mZpHdtKkOPg2VhbPYcbEuOVbs2rw35mbJROLohAdeqYRKFgF+ywlCX3GFS7010xiMwZ5rpzVSDIyEFb0WnTLWS1111fHRQU4IQ8K+0vWCvr69J9kcjYEWNHK001c5jxNIvz2XLpfdolIyEtZ/x/Pw8qIMFAdP3ExNKTXVDjl2UqruzHZgoaDdQ4RWyGuZct5/x8vJSqRGyXmYfMC88WUNMvW6nHh03q45pziG/Cdf2uU5mHbAKtzK8xfesjloz3RqyIVzRu/U+24Adwr3y7U+XfgFujOn6srUhW8K9GnJIOsuAHcMtqYfj4+O1T8gO4ZY0wOwCdgj3duhCdQ157HDFrAJ2DHdNATiELCcmrjX1QcIVswl4ynBblpB1540FC1fMImB1nFsZ3hI83JYl5LeChiuyD1jt70yt4dHCbTmGHDxckXXAKtzS8JbRw23xYMXW8hZbfb+/S5mKKVxLa7nl3a3pItiVDaGpoTs5NVf6YeW8qjuP300t3FbwKymiDLgrIJ4m3XXWfuGEwpX/p6slHTTk6AJWIzJlR5UsDDnR/tTwu7ZwGy6Vuo6qF9dTg1w6MR4eHireN3cNBwYLOcY1+MxQt5Khs661WF0/VJJZQbtrqPpquLyzvcm1h0pa1xwyjRlyjI0s29jnief0Sfl2P/r2XfuKMWDbeczRnvimdi9rTbX2ONch5N5f3hgDrgx1N8u4r/BbaaZbOzEsIRfUU3QBq0aMXEvUvKmS1m/s1+nWHdOce6gMIffeao3dyJJj10ZTp5v+beCcN0s17farsk9uHFqvFenPqAjFuPVQ813wjx/UJO+TBiRk/gz5Oxfq7w0a8AcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANif7B8Q/dOlJHI7iEJNvlcl+8tCsg5Y3R/Ldm1QuUz46aI2ud9lx+XCr1HubhOLLNdgh6eQdjn3uZNPKnIN+DP5XzQtl6ha77+Rmuw20eoOOgX5K4bcfSdWOe6Dh9yMJYobuYSUY8BDnj2Y1XMLRY4BD7lJS3LPJrTJMeAht1lK7tmENmhF/4BWdEI25C/L3qwsA1YdFj6BXcX0LOSQcu+LLvnF1g258b2XVUrmMppUcvmdfhznNlz+43Kd+2jSV0z9PFgMpokeAAAAAElFTkSuQmCC",
1262
+ initial_value: null,
1163
1263
  },
1164
1264
  {
1165
1265
  key: "speed_1_5",
1166
1266
  label: "Playback Speed 1.5x",
1167
1267
  type: "uploader",
1168
1268
  label_tooltip: "Playback Speed 1.5x",
1169
- initial_value:
1170
- "data:image/png;base64,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",
1269
+ initial_value: null,
1171
1270
  },
1172
1271
  {
1173
1272
  key: "speed_2",
1174
1273
  label: "Playback Speed 2x",
1175
1274
  type: "uploader",
1176
1275
  label_tooltip: "Playback Speed 2x",
1177
- initial_value:
1178
- "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQnSURBVHgB7d2PUdRAFMfxh2MBUIGxArECjwqECjwqUCowV4FYgdABVCAdSAekg7ME35pFgnOb3ZDAvmy+n5lMGJLL3dzvkuyfZCMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2LMnM7Hdbvd11p2ag4ODRtDLdMAa6kpnH3U61qkKrHbrp0sN/EbwiMmAfbBfdVrJMI1OZxr0leAvcwFruC7YWsY515DPBLYC1nC/6eyLTONCQz6VhXslRvg9d6pwnbX/wSyaiT1Yg6h0dhdZzZ1Xr6U9zzqHOn2QtgDW52jJhS8rAf/Q2Tqw2JWQT0JVIv/j+CnhUvaNvvZIFip7wL5+uw0sbqTdA5vINiqd/ZK2fryLbuLgtyyQhXPwYc+yTUpjhl/ne88qK1koCwGvQgs0uAtJ17duJQtlIeDQYfVWBojs6fuyUK8lP1c63hXmlOfMRZ5/newBT1WF0YJW37m8kYUy09Axgb6ABx3uSzKb7sI+vqrlqknVjsXJ9WC/HRlTpZpiG1MqZQ92zZxVYNmlJPBNpdv2z6c1cfrXjdrG1Ga/B+sX+Vln54HFV7onnUh8GytpW8O6BnVWBFrjTnJ3Xc56D/YFq1C47hCZ2mW46/y99qGlfI5QU+uhZDbbgDtt0CFJrWBeqBAWDTnSjn4jmc0y4E64oQYMF+65JPJVtU1gcTDkSLgbC71YszsHJ/QeuWuz1vK0bdfSFth2eXROTgi3FgNmFXBCuLf6xb6Xce9RSyTkuYTrzOmyWVdg6Tssu/Po0RT1z0jIjYR/YKbCdWYR8EuG23nPWsIh72IuXMd8wDnC7bx3LWkhmwzXsX7he7ZwO5+hlv6QzYbrmK0mWQjXezNyeVZW72wwEW6ktNxl9hpsc3uwfqmfZF7hOsnNmi/NVMA+3AsJh9tI24CfM9ybwP9Nhmzpzob7cEMaSbiEdoLPEWvEcH3Lg5s1c7Fy4Xss3PueoUaeKKVdeEgL1ZBmzZwsXPi+kv5eoUnoF74X+Rx9N77trArNIWQLh+hKMtOgjmVguI7/f9/h+lgyK+miuzGqwP+jjRiRkOnwN2JXh39yC1VPyFeSGQHLvwKYu3bLBd1IOwxELQP49U//28atZGahkFXJC9wcNvA+JwAAAAAAAAAAAAAAAAAAAAAAAIxWxIjvffytMW5M6e4ziO+fOTxkRNpZKjrgyGDh92oNeSOFKvbuQj9Ef8qQwrVft0hF7sEa2FpnQwdDyT78/nMoNeA7GT40RKMBv5XCFHeI9oO6VDJc5V9blBLPwWPGxcg+psbUSgx4X55uzGtNKjHgMcMcPvfItS+uxIDHDHySfdCUqVGKfkApekZSn3jWVWRrVpEB+waLIYFtSh1mqfS26FriD9U4G/KUtLlZSm9SrdM7eajnNjpd63Reem/SH2FDq35f8ateAAAAAElFTkSuQmCC",
1276
+ initial_value: null,
1179
1277
  },
1180
1278
  {
1181
1279
  key: "sleep_timer",
@@ -3429,6 +3527,22 @@ function getPlayerConfiguration({ platform, version }) {
3429
3527
  label_tooltip:
3430
3528
  "This field allows you to override the player configuration / initialization options. i.e. html5: { vhs: { limitRenditionByPlayerDimensions: false } } Please ensure your configuration matches the player you are targeting, and that it is a valid json. See config options here: https://videojs.com/guides/options/",
3431
3529
  },
3530
+ {
3531
+ key: "advanced_player_styles",
3532
+ label: "Advanced Player Styles",
3533
+ type: "text_input",
3534
+ multiline: true,
3535
+ initial_value: `.vjs-text-track-cue {
3536
+ inset: unset !important;
3537
+ top: 94% !important;
3538
+ bottom: 0 !important;
3539
+ left: 0 !important;
3540
+ right: 0 !important;
3541
+ width: 100% !important;
3542
+ }`,
3543
+ label_tooltip:
3544
+ "This field allows you to inject custom CSS styles to override default player styles. The styles will be injected into the document head and can be used to customize the appearance of the player. Leave empty to use only default styles.",
3545
+ },
3432
3546
  {
3433
3547
  key: "use_dashjs_player",
3434
3548
  label: "Use Enhanced Player for DASH streams",
@@ -38,7 +38,7 @@ function tvActionButtonsContainer({ label, description, defaults }) {
38
38
  generateFieldsFromDefaultsWithoutPrefixedLabel(
39
39
  label,
40
40
  defaults,
41
- tvActionButtonContainerFields(defaults["position"])
41
+ tvActionButtonContainerFields(defaults.position)
42
42
  )
43
43
  );
44
44
 
@@ -5,7 +5,8 @@ import { layoutV2TypeMatcher } from "./layoutV2TypeMatcher";
5
5
  import { HOOKS_EVENTS } from "../appUtils/HooksManager/constants";
6
6
  import { HooksManager } from "../appUtils/HooksManager";
7
7
  import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
8
- import { HookModalContextT } from "@applicaster/zapp-react-native-ui-components/Contexts/ZappHookModalContext";
8
+
9
+ import { zappHookModalStore } from "@applicaster/zapp-react-native-ui-components/Contexts/ZappHookModalContext";
9
10
  import { logger } from "@applicaster/zapp-react-native-utils/logger";
10
11
  import {
11
12
  isGeneralPlugin,
@@ -15,6 +16,8 @@ import {
15
16
  } from "./itemTypeMatchers";
16
17
  import { RootState } from "@applicaster/zapp-react-native-redux/store";
17
18
 
19
+ import { pick } from "@applicaster/zapp-react-native-utils/utils";
20
+
18
21
  type PathAttribute = {
19
22
  screenType: string;
20
23
  screenId: string;
@@ -403,15 +406,22 @@ export const mapContentTypesToRivers = (
403
406
  };
404
407
 
405
408
  export const runZappHooksForEntry = async (
406
- entry: HookPluginProps["payload"],
407
- {
409
+ entry: HookPluginProps["payload"]
410
+ ): Promise<{ success: boolean; payload: ZappEntry }> => {
411
+ const {
408
412
  setState,
409
413
  resetState,
410
414
  setIsHooksExecutionInProgress,
411
415
  setIsPresentingFullScreen,
412
416
  setIsRunningInBackground,
413
- }: Partial<HookModalContextT>
414
- ): Promise<{ success: boolean; payload: ZappEntry }> => {
417
+ } = pick(zappHookModalStore.getState(), [
418
+ "setState",
419
+ "resetState",
420
+ "setIsHooksExecutionInProgress",
421
+ "setIsPresentingFullScreen",
422
+ "setIsRunningInBackground",
423
+ ]);
424
+
415
425
  resetState?.();
416
426
 
417
427
  let success;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-native-utils",
3
- "version": "15.0.0-alpha.1201747215",
3
+ "version": "15.0.0-alpha.1257410812",
4
4
  "description": "Applicaster Zapp React Native utilities package",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -27,13 +27,13 @@
27
27
  },
28
28
  "homepage": "https://github.com/applicaster/quickbrick#readme",
29
29
  "dependencies": {
30
- "@applicaster/applicaster-types": "15.0.0-alpha.1201747215",
30
+ "@applicaster/applicaster-types": "15.0.0-alpha.1257410812",
31
31
  "buffer": "^5.2.1",
32
32
  "camelize": "^1.0.0",
33
33
  "dayjs": "^1.11.10",
34
+ "handlebars": "4.7.8",
34
35
  "memoizee": "0.4.15",
35
- "prop-types": "^15.0.0",
36
- "react-native-handlebars": "^5.0.0-alpha.1"
36
+ "prop-types": "^15.0.0"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@applicaster/zapp-pipes-v2-client": "*",
@@ -1,14 +1,19 @@
1
1
  import * as React from "react";
2
2
  import { usePlayer } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayer";
3
- import { useAccessibilityManager } from "@applicaster/zapp-react-native-utils/appUtils/accessibilityManager/hooks";
3
+ import {
4
+ useAccessibilityManager,
5
+ useAccessibilityState,
6
+ } from "@applicaster/zapp-react-native-utils/appUtils/accessibilityManager/hooks";
4
7
  import { PlayerTTS } from "@applicaster/zapp-react-native-utils/playerUtils/PlayerTTS";
5
8
 
6
9
  export const usePlayerTTS = () => {
7
10
  const player = usePlayer();
8
11
  const accessibilityManager = useAccessibilityManager({});
12
+ const accessibilityState = useAccessibilityState();
13
+ const isScreenReaderEnabled = accessibilityState.screenReaderEnabled;
9
14
 
10
15
  React.useEffect(() => {
11
- if (player && accessibilityManager) {
16
+ if (player && accessibilityManager && isScreenReaderEnabled) {
12
17
  const playerTTS = new PlayerTTS(player, accessibilityManager);
13
18
  const unsubscribe = playerTTS.init();
14
19
 
@@ -17,5 +22,5 @@ export const usePlayerTTS = () => {
17
22
  playerTTS.destroy();
18
23
  };
19
24
  }
20
- }, [player, accessibilityManager]);
25
+ }, [player, accessibilityManager, isScreenReaderEnabled]);
21
26
  };
@@ -6,6 +6,7 @@ import { deprecationMessage } from "../appUtils";
6
6
 
7
7
  import { pluginUtilsLogger } from "./logger";
8
8
  import { platformSelect } from "../reactUtils";
9
+ import { get } from "../utils";
9
10
 
10
11
  type PluginModule = any;
11
12
  type Plugin = {
@@ -254,3 +255,6 @@ const getPluginType = R.pathOr("unknown_plugin_type", [
254
255
 
255
256
  export const isPlayerPlugin = (routeState): boolean =>
256
257
  getPluginType(routeState) === "player";
258
+
259
+ export const getPluginModuleUrlScheme = (plugin) =>
260
+ get(plugin, ["module", "urlScheme"]);
@@ -3,7 +3,7 @@ import { View } from "react-native";
3
3
  import * as R from "ramda";
4
4
 
5
5
  import { useNavigation } from "../navigation";
6
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
6
+ import { usePlugins } from "@applicaster/zapp-react-native-redux/hooks";
7
7
  import { platformSelect } from "@applicaster/zapp-react-native-utils/reactUtils";
8
8
  import { dismissModal, openModal } from "../../modalState";
9
9
 
@@ -16,7 +16,7 @@ const ModalContainer = platformSelect({
16
16
 
17
17
  export function useAdvertisingInterstitial() {
18
18
  const { screenData, currentRoute } = useNavigation();
19
- const { plugins } = usePickFromState();
19
+ const plugins = usePlugins();
20
20
 
21
21
  return useEffect(() => {
22
22
  // TODD: typing problem: fix any type
@@ -1,5 +1,5 @@
1
1
  import EventEmitter from "events";
2
- import { renderHook, act } from "@testing-library/react-hooks";
2
+ import { renderHook, act } from "@testing-library/react-native";
3
3
  import { useAppState } from "../useAppState";
4
4
 
5
5
  const emitter = new EventEmitter();
@@ -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/Contexts/ScreenTrackedViewPositionsContext",
@@ -1,7 +1,6 @@
1
1
  import React from "react";
2
2
 
3
- import { renderHook } from "@testing-library/react-hooks";
4
- import { act, waitFor } from "@testing-library/react-native";
3
+ import { renderHook, act, waitFor } from "@testing-library/react-native";
5
4
  import { Provider } from "react-redux";
6
5
  import configureStore from "redux-mock-store";
7
6
  import { useTrackedView } from "../useTrackedView";
@@ -1,10 +1,8 @@
1
1
  import * as React from "react";
2
- import { cleanup, renderHook } from "@testing-library/react-hooks";
2
+ import { cleanup, renderHook, waitFor } from "@testing-library/react-native";
3
3
  import { CellTapContext } from "@applicaster/zapp-react-native-ui-components/Contexts/CellTapContext";
4
4
  import { ActionExecutorContext } from "@applicaster/zapp-react-native-utils/actionsExecutor/ActionExecutorContext";
5
5
 
6
- import { waitFor } from "@testing-library/react-native";
7
-
8
6
  const mockNavigator = {
9
7
  getPathname: () => "pathnameMock",
10
8
  push: jest.fn(),
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable react/prop-types */
2
2
  import React from "react";
3
- import { renderHook, cleanup } from "@testing-library/react-hooks";
3
+ import { renderHook, cleanup } from "@testing-library/react-native";
4
4
  import { ConfigurationContext } from "@applicaster/zapp-react-native-ui-components/Contexts/ConfigutaionContext";
5
5
  import { useConfiguration } from "@applicaster/zapp-react-native-utils/reactHooks/configuration";
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 { NetworkStatusContext } from "@applicaster/zapp-react-native-ui-components/Contexts/NetworkStatusContext";
4
4
 
5
5
  const MockNetInfo = {
@@ -27,20 +27,20 @@ describe("Debug utils", () => {
27
27
  it("should create new timer if timer with a label does not exist", () => {
28
28
  performanceNowMock.mockReturnValue(1000);
29
29
  time("timer1");
30
- expect(timers["timer1"]).toBeDefined();
31
- expect(timers["timer1"].startTime).toBe(1000);
30
+ expect(timers.timer1).toBeDefined();
31
+ expect(timers.timer1.startTime).toBe(1000);
32
32
  });
33
33
 
34
34
  it("should update start time of timer if timer with a label exists", () => {
35
35
  // First call to time()
36
36
  performanceNowMock.mockReturnValue(1000);
37
37
  time("timer1");
38
- const previousStartTime = timers["timer1"].startTime;
38
+ const previousStartTime = timers.timer1.startTime;
39
39
 
40
40
  // Second call to time()
41
41
  performanceNowMock.mockReturnValue(2000);
42
42
  time("timer1");
43
- const currentStartTime = timers["timer1"].startTime;
43
+ const currentStartTime = timers.timer1.startTime;
44
44
 
45
45
  expect(previousStartTime).toBe(1000);
46
46
  expect(currentStartTime).toBe(2000);
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
- import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
3
2
  import { useIsTablet } from "./useIsTablet";
3
+ import { useAppData } from "@applicaster/zapp-react-native-redux";
4
4
 
5
5
  export const useMemoizedIsTablet = () => {
6
6
  const isTablet = useIsTablet();
@@ -14,9 +14,9 @@ export const useMemoizedIsTablet = () => {
14
14
  };
15
15
 
16
16
  export const useIsTabletLandscape = (): boolean => {
17
- const { appData } = usePickFromState(["appData"]);
17
+ const { isTabletPortrait } = useAppData();
18
18
 
19
19
  const isTablet = useIsTablet();
20
20
 
21
- return isTablet && !appData.isTabletPortrait;
21
+ return isTablet && !isTabletPortrait;
22
22
  };
@@ -1,8 +1,7 @@
1
- import { renderHook } from "@testing-library/react-hooks";
1
+ import { renderHook, waitFor } from "@testing-library/react-native";
2
2
  import { allFeedsIsReady, useBatchLoading } from "../useBatchLoading";
3
3
  import { WrappedWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
4
4
  import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
5
- import { waitFor } from "@testing-library/react-native";
6
5
 
7
6
  jest.mock("../../navigation");
8
7
 
@@ -16,7 +15,11 @@ jest.mock(
16
15
  })
17
16
  );
18
17
 
19
- const wrapper = WrappedWithProviders;
18
+ const getWrapper =
19
+ (store) =>
20
+ ({ children }) => (
21
+ <WrappedWithProviders store={store}>{children}</WrappedWithProviders>
22
+ );
20
23
 
21
24
  describe("useBatchLoading", () => {
22
25
  const data = [
@@ -63,8 +66,7 @@ describe("useBatchLoading", () => {
63
66
  const riverId = "123";
64
67
 
65
68
  renderHook(() => useBatchLoading(data, { initialBatchSize, riverId }), {
66
- wrapper,
67
- initialProps: { store },
69
+ wrapper: getWrapper(store),
68
70
  });
69
71
 
70
72
  const actions = (appStore.getStore() as any).getActions();
@@ -84,7 +86,7 @@ describe("useBatchLoading", () => {
84
86
  });
85
87
  });
86
88
 
87
- it("loadPipesData start loading new feed when 1 feed is done loading and 1 is in loading state", () => {
89
+ it("loadPipesData start loading new feed when 1 feed is done loading and 1 is in loading state", async () => {
88
90
  const store = {
89
91
  zappPipes: {
90
92
  url1: {
@@ -110,13 +112,14 @@ describe("useBatchLoading", () => {
110
112
  const riverId = "123";
111
113
 
112
114
  renderHook(() => useBatchLoading(data, { initialBatchSize, riverId }), {
113
- wrapper,
114
- initialProps: { store },
115
+ wrapper: getWrapper(store),
115
116
  });
116
117
 
117
118
  const actions = (appStore.getStore() as any).getActions();
118
119
 
119
- expect(actions).toHaveLength(1);
120
+ await waitFor(() => {
121
+ expect(actions).toHaveLength(1);
122
+ });
120
123
 
121
124
  expect(actions[0]).toMatchObject({
122
125
  type: "ZAPP_PIPES_REQUEST_START",
@@ -124,7 +127,7 @@ describe("useBatchLoading", () => {
124
127
  });
125
128
  });
126
129
 
127
- it("loadPipesData has been called when no data cached", () => {
130
+ it("loadPipesData has been called when no data cached", async () => {
128
131
  const store = {
129
132
  zappPipes: {},
130
133
  test: "true",
@@ -134,16 +137,17 @@ describe("useBatchLoading", () => {
134
137
  const riverId = "123";
135
138
 
136
139
  renderHook(() => useBatchLoading(data, { initialBatchSize, riverId }), {
137
- wrapper,
138
- initialProps: { store },
140
+ wrapper: getWrapper(store),
139
141
  });
140
142
 
141
143
  const actions = (appStore.getStore() as any).getActions();
142
144
 
143
- expect(actions).toHaveLength(3);
145
+ await waitFor(() => {
146
+ expect(actions).toHaveLength(3);
147
+ });
144
148
  });
145
149
 
146
- it("initial batch ready when all initial items loaded", () => {
150
+ it("initial batch ready when all initial items loaded", async () => {
147
151
  const store = {
148
152
  zappPipes: {
149
153
  url1: {
@@ -169,13 +173,15 @@ describe("useBatchLoading", () => {
169
173
 
170
174
  const { result } = renderHook(
171
175
  () => useBatchLoading(data, { initialBatchSize, riverId }),
172
- { wrapper, initialProps: { store } }
176
+ { wrapper: getWrapper(store) }
173
177
  );
174
178
 
175
- expect(result.current).toBe(true);
179
+ await waitFor(() => {
180
+ expect(result.current).toBe(true);
181
+ });
176
182
  });
177
183
 
178
- it("gallery-qb: loadPipesData should be called only once for first component in the gallery", () => {
184
+ it("gallery-qb: loadPipesData should be called only once for first component in the gallery", async () => {
179
185
  const store = {
180
186
  zappPipes: {},
181
187
  test: "true",
@@ -198,16 +204,17 @@ describe("useBatchLoading", () => {
198
204
  ];
199
205
 
200
206
  renderHook(() => useBatchLoading(data, { initialBatchSize, riverId }), {
201
- wrapper,
202
- initialProps: { store },
207
+ wrapper: getWrapper(store),
203
208
  });
204
209
 
205
210
  const actions = (appStore.getStore() as any).getActions();
206
211
 
207
- expect(actions).toHaveLength(1);
212
+ await waitFor(() => {
213
+ expect(actions).toHaveLength(1);
214
+ });
208
215
  });
209
216
 
210
- it("gallery-qb: initial batch ready when all initial items loaded", () => {
217
+ it("gallery-qb: initial batch ready when all initial items loaded", async () => {
211
218
  const store = {
212
219
  zappPipes: {
213
220
  url1: {
@@ -233,10 +240,12 @@ describe("useBatchLoading", () => {
233
240
 
234
241
  const { result } = renderHook(
235
242
  () => useBatchLoading(data, { initialBatchSize, riverId }),
236
- { wrapper, initialProps: { store } }
243
+ { wrapper: getWrapper(store) }
237
244
  );
238
245
 
239
- expect(result.current).toBe(true);
246
+ await waitFor(() => {
247
+ expect(result.current).toBe(true);
248
+ });
240
249
  });
241
250
  });
242
251