@applicaster/zapp-react-native-utils 14.0.0-alpha.4055325032 → 14.0.0-alpha.4104749434
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.
- package/analyticsUtils/AnalyticsEvents/sendHeaderClickEvent.ts +1 -1
- package/analyticsUtils/AnalyticsEvents/sendMenuClickEvent.ts +2 -1
- package/analyticsUtils/index.tsx +3 -4
- package/analyticsUtils/manager.ts +1 -1
- package/appUtils/HooksManager/Hook.ts +4 -4
- package/appUtils/HooksManager/index.ts +11 -1
- package/appUtils/accessibilityManager/index.ts +3 -3
- package/arrayUtils/index.ts +1 -1
- package/componentsUtils/__tests__/isTabsScreen.test.ts +38 -0
- package/componentsUtils/index.ts +4 -1
- package/configurationUtils/__tests__/manifestKeyParser.test.ts +547 -0
- package/configurationUtils/manifestKeyParser.ts +57 -32
- package/index.d.ts +0 -9
- package/manifestUtils/defaultManifestConfigurations/player.js +0 -148
- package/manifestUtils/keys.js +0 -12
- package/manifestUtils/sharedConfiguration/screenPicker/stylesFields.js +0 -6
- package/package.json +2 -2
- package/reactHooks/autoscrolling/__tests__/useTrackedView.test.tsx +12 -13
- package/reactHooks/feed/__tests__/useBatchLoading.test.tsx +39 -88
- package/reactHooks/navigation/index.ts +7 -5
- package/testUtils/index.tsx +7 -8
|
@@ -351,86 +351,6 @@ function getPlayerConfiguration({ platform, version }) {
|
|
|
351
351
|
],
|
|
352
352
|
},
|
|
353
353
|
]),
|
|
354
|
-
fieldsGroup(
|
|
355
|
-
"Partial Player (Roku only)",
|
|
356
|
-
"This section allows you to configure width and height of video player in Partial Player",
|
|
357
|
-
[
|
|
358
|
-
{
|
|
359
|
-
key: "video_theater_width",
|
|
360
|
-
label: "Width of player",
|
|
361
|
-
type: "number_input",
|
|
362
|
-
initial_value: "1420",
|
|
363
|
-
placeHolder: "1420",
|
|
364
|
-
},
|
|
365
|
-
{
|
|
366
|
-
key: "video_theater_height",
|
|
367
|
-
label: "Height of player",
|
|
368
|
-
type: "number_input",
|
|
369
|
-
initial_value: "900",
|
|
370
|
-
placeHolder: "900",
|
|
371
|
-
},
|
|
372
|
-
{
|
|
373
|
-
key: "full_screen_button_offset_x",
|
|
374
|
-
label: "Fullscreen button X",
|
|
375
|
-
type: "number_input",
|
|
376
|
-
initial_value: 160,
|
|
377
|
-
placeHolder: "160",
|
|
378
|
-
},
|
|
379
|
-
{
|
|
380
|
-
key: "full_screen_button_offset_y",
|
|
381
|
-
label: "Fullscreen button Y",
|
|
382
|
-
type: "number_input",
|
|
383
|
-
initial_value: 160,
|
|
384
|
-
placeHolder: "160",
|
|
385
|
-
},
|
|
386
|
-
{
|
|
387
|
-
key: "full_screen_button_w",
|
|
388
|
-
label: "Fullscreen button width",
|
|
389
|
-
type: "number_input",
|
|
390
|
-
initial_value: 120,
|
|
391
|
-
placeHolder: "120",
|
|
392
|
-
},
|
|
393
|
-
{
|
|
394
|
-
key: "full_screen_button_h",
|
|
395
|
-
label: "Fullscreen button height",
|
|
396
|
-
type: "number_input",
|
|
397
|
-
initial_value: 120,
|
|
398
|
-
placeHolder: "120",
|
|
399
|
-
},
|
|
400
|
-
{
|
|
401
|
-
key: "full_screen_button_background_color",
|
|
402
|
-
type: "color_picker",
|
|
403
|
-
label: "Fullscreen Button background color",
|
|
404
|
-
initial_value: "#00000000",
|
|
405
|
-
placeHolder: "color",
|
|
406
|
-
label_tooltip: "Pick Color",
|
|
407
|
-
},
|
|
408
|
-
{
|
|
409
|
-
key: "full_screen_button_background_url",
|
|
410
|
-
type: "text_input",
|
|
411
|
-
label: "Fullscreen Button background Url",
|
|
412
|
-
initial_value: "pkg:/images/tv_fullscreen.png",
|
|
413
|
-
placeHolder: "",
|
|
414
|
-
label_tooltip: "",
|
|
415
|
-
},
|
|
416
|
-
{
|
|
417
|
-
key: "full_screen_button_highlighted_background_color",
|
|
418
|
-
type: "color_picker",
|
|
419
|
-
label: "Fullscreen Button highlighted background color",
|
|
420
|
-
initial_value: "#00000000",
|
|
421
|
-
placeHolder: "color",
|
|
422
|
-
label_tooltip: "Pick Color",
|
|
423
|
-
},
|
|
424
|
-
{
|
|
425
|
-
key: "full_screen_button_highlighted_background_url",
|
|
426
|
-
type: "text_input",
|
|
427
|
-
label: "Fullscreen Button highlighted Url",
|
|
428
|
-
initial_value: "pkg:/images/tv_fullscreen.png",
|
|
429
|
-
placeHolder: "",
|
|
430
|
-
label_tooltip: "",
|
|
431
|
-
},
|
|
432
|
-
]
|
|
433
|
-
),
|
|
434
354
|
fieldsGroup(
|
|
435
355
|
"Skip Button",
|
|
436
356
|
"This section allows you to configure the skip button styles for tv",
|
|
@@ -562,20 +482,6 @@ function getPlayerConfiguration({ platform, version }) {
|
|
|
562
482
|
key: "skip_button_style_text_android_font_size",
|
|
563
483
|
initial_value: 24,
|
|
564
484
|
},
|
|
565
|
-
{
|
|
566
|
-
type: "roku_font_selector",
|
|
567
|
-
label_tooltip: "",
|
|
568
|
-
label: "Roku Font Family",
|
|
569
|
-
key: "skip_button_style_text_roku_font_family",
|
|
570
|
-
initial_value: "Ubuntu-Bold",
|
|
571
|
-
},
|
|
572
|
-
{
|
|
573
|
-
type: "number_input",
|
|
574
|
-
label_tooltip: "",
|
|
575
|
-
label: "Roku Font Size",
|
|
576
|
-
key: "skip_button_style_text_roku_font_size",
|
|
577
|
-
initial_value: 24,
|
|
578
|
-
},
|
|
579
485
|
{
|
|
580
486
|
type: "select",
|
|
581
487
|
options: [
|
|
@@ -3424,60 +3330,6 @@ function getPlayerConfiguration({ platform, version }) {
|
|
|
3424
3330
|
},
|
|
3425
3331
|
]
|
|
3426
3332
|
),
|
|
3427
|
-
fieldsGroup(
|
|
3428
|
-
"Roku only",
|
|
3429
|
-
"This section allows you to configure RAF - Roku Ad Framework settings",
|
|
3430
|
-
[
|
|
3431
|
-
{
|
|
3432
|
-
key: "raf_enabled",
|
|
3433
|
-
type: "switch",
|
|
3434
|
-
initial_value: false,
|
|
3435
|
-
},
|
|
3436
|
-
{
|
|
3437
|
-
key: "raf_url",
|
|
3438
|
-
type: "text_input",
|
|
3439
|
-
label: "Ad Url",
|
|
3440
|
-
label_tooltip:
|
|
3441
|
-
"Publisher's ad URL. The default is he roku ad server with single preroll placeholder, with revenue spilt ad sharing by default. TO GET PAID A URL MUST BE PASSED IN HERE. Note: If you are putting ads in child targetted content then your ad url will have to use the ROKU_ADS_KIDS_CONTENT macro value, as per the docs here: developer.roku.com/docs/developer-program/advertising/integrating-roku-advertising-framework.md#url-parameter-macros",
|
|
3442
|
-
},
|
|
3443
|
-
{
|
|
3444
|
-
key: "genre",
|
|
3445
|
-
type: "text_input",
|
|
3446
|
-
label: "Roku Genre",
|
|
3447
|
-
initial_value: "Entertainment",
|
|
3448
|
-
label_tooltip:
|
|
3449
|
-
"Choose value from Roku genre tags, from developer.roku.com/en-gb/docs/developer-program/advertising/integrating-roku-advertising-framework.md",
|
|
3450
|
-
},
|
|
3451
|
-
{
|
|
3452
|
-
key: "nielsen_enabled",
|
|
3453
|
-
type: "checkbox",
|
|
3454
|
-
initial_value: false,
|
|
3455
|
-
label_tooltip:
|
|
3456
|
-
"Required only for apps launched in the US market, See developer.roku.com/en-gb/docs/developer-program/advertising/integrating-roku-advertising-framework.md for details on configuration",
|
|
3457
|
-
},
|
|
3458
|
-
{
|
|
3459
|
-
key: "nielsen_app_id",
|
|
3460
|
-
type: "text_input",
|
|
3461
|
-
initial_value: "",
|
|
3462
|
-
label_tooltip:
|
|
3463
|
-
"id of your app for nielsen leave blank if you don't have a specific id (that is almost always the case)",
|
|
3464
|
-
},
|
|
3465
|
-
{
|
|
3466
|
-
key: "nielsen_genre",
|
|
3467
|
-
type: "text_input",
|
|
3468
|
-
initial_value: "General",
|
|
3469
|
-
label_tooltip:
|
|
3470
|
-
"genre from developer.roku.com/en-gb/docs/developer-program/advertising/integrating-roku-advertising-framework.md#nielsen-dar-genre-tags",
|
|
3471
|
-
},
|
|
3472
|
-
{
|
|
3473
|
-
key: "is_kids_content",
|
|
3474
|
-
type: "checkbox",
|
|
3475
|
-
initial_value: false,
|
|
3476
|
-
label_tooltip:
|
|
3477
|
-
"If your content is directed at kids, this must be checked. See developer.roku.com/docs/developer-program/advertising/raf-api.md#setcontentgenregenres-as-string-kidscontent-as-boolean for more info. Also note your ad urls will have to use the ROKU_ADS_KIDS_CONTENT macro value, as per the docs here: developer.roku.com/docs/developer-program/advertising/integrating-roku-advertising-framework.md#url-parameter-macros",
|
|
3478
|
-
},
|
|
3479
|
-
]
|
|
3480
|
-
),
|
|
3481
3333
|
fieldsGroup(
|
|
3482
3334
|
"Audio Tracks",
|
|
3483
3335
|
"This section allows you to configure default audio track behavior for videos with multiple audio tracks",
|
package/manifestUtils/keys.js
CHANGED
|
@@ -485,18 +485,6 @@ const TV_MENU_LABEL_FIELDS = [
|
|
|
485
485
|
type: ZAPPIFEST_FIELDS.number_input,
|
|
486
486
|
suffix: "LG letter spacing",
|
|
487
487
|
},
|
|
488
|
-
{
|
|
489
|
-
type: ZAPPIFEST_FIELDS.font_selector.roku,
|
|
490
|
-
suffix: "Roku font family",
|
|
491
|
-
},
|
|
492
|
-
{
|
|
493
|
-
type: ZAPPIFEST_FIELDS.number_input,
|
|
494
|
-
suffix: "Roku font size",
|
|
495
|
-
},
|
|
496
|
-
{
|
|
497
|
-
type: ZAPPIFEST_FIELDS.number_input,
|
|
498
|
-
suffix: "Roku line height",
|
|
499
|
-
},
|
|
500
488
|
{
|
|
501
489
|
type: ZAPPIFEST_FIELDS.select,
|
|
502
490
|
suffix: "text transform",
|
|
@@ -424,12 +424,6 @@ const titleFields = [
|
|
|
424
424
|
key: "vizio_font_family",
|
|
425
425
|
initial_value: fontFamily,
|
|
426
426
|
},
|
|
427
|
-
{
|
|
428
|
-
type: "roku_font_selector",
|
|
429
|
-
label: "Roku TV Font Family",
|
|
430
|
-
key: "roku_font_family",
|
|
431
|
-
initial_value: fontFamily,
|
|
432
|
-
},
|
|
433
427
|
...generateFontConfiguration(),
|
|
434
428
|
// text transform
|
|
435
429
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-native-utils",
|
|
3
|
-
"version": "14.0.0-alpha.
|
|
3
|
+
"version": "14.0.0-alpha.4104749434",
|
|
4
4
|
"description": "Applicaster Zapp React Native utilities package",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"homepage": "https://github.com/applicaster/quickbrick#readme",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@applicaster/applicaster-types": "14.0.0-alpha.
|
|
30
|
+
"@applicaster/applicaster-types": "14.0.0-alpha.4104749434",
|
|
31
31
|
"buffer": "^5.2.1",
|
|
32
32
|
"camelize": "^1.0.0",
|
|
33
33
|
"dayjs": "^1.11.10",
|
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { renderHook } from "@testing-library/react-hooks";
|
|
4
|
+
import { act, waitFor } from "@testing-library/react-native";
|
|
4
5
|
import { Provider } from "react-redux";
|
|
5
6
|
import configureStore from "redux-mock-store";
|
|
7
|
+
import { useTrackedView } from "../useTrackedView";
|
|
6
8
|
|
|
7
9
|
const mockUpdateComponentsPositions = jest.fn();
|
|
8
10
|
|
|
9
11
|
jest.mock(
|
|
10
12
|
"@applicaster/zapp-react-native-ui-components/Contexts/ScreenTrackedViewPositionsContext",
|
|
11
13
|
() => ({
|
|
12
|
-
useScreenTrackedViewPositionsContext: jest.fn()
|
|
14
|
+
useScreenTrackedViewPositionsContext: jest.fn(() => ({
|
|
13
15
|
updateComponentsPositions: mockUpdateComponentsPositions,
|
|
14
16
|
value: {
|
|
15
17
|
"123": { componentId: "123", centerX: 0.4, centerY: 0.5 },
|
|
16
18
|
"124": { componentId: "124", centerX: 0.2, centerY: 0.3 },
|
|
17
19
|
},
|
|
18
|
-
}),
|
|
20
|
+
})),
|
|
19
21
|
})
|
|
20
22
|
);
|
|
21
23
|
|
|
22
|
-
jest.useFakeTimers(
|
|
24
|
+
jest.useFakeTimers();
|
|
23
25
|
|
|
24
26
|
jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation");
|
|
25
27
|
|
|
@@ -32,10 +34,8 @@ const Wrapper = ({ children }: { children: React.ReactChild }) => (
|
|
|
32
34
|
<Provider store={store}>{children}</Provider>
|
|
33
35
|
);
|
|
34
36
|
|
|
35
|
-
const { useTrackedView } = require("../useTrackedView");
|
|
36
|
-
|
|
37
37
|
describe("useTrackCurrentAutoScrollingElement", () => {
|
|
38
|
-
it("should update position for selected component - onViewportEnter", () => {
|
|
38
|
+
it("should update position for selected component - onViewportEnter", async () => {
|
|
39
39
|
const { result } = renderHook(() => useTrackedView("123"), {
|
|
40
40
|
wrapper: Wrapper,
|
|
41
41
|
});
|
|
@@ -46,14 +46,13 @@ describe("useTrackCurrentAutoScrollingElement", () => {
|
|
|
46
46
|
rect: { left: 1, right: 1, top: 1, bottom: 1 },
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
-
act(
|
|
50
|
-
|
|
49
|
+
act(() => {
|
|
50
|
+
result.current.onPositionUpdated(mockRect);
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
expect(result.current.inViewPort).toBe(true);
|
|
53
|
+
await waitFor(() => {
|
|
54
|
+
expect(result.current.inViewPort).toBe(true);
|
|
55
|
+
});
|
|
57
56
|
|
|
58
57
|
expect(mockUpdateComponentsPositions).toHaveBeenCalledWith(
|
|
59
58
|
"123",
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { renderHook } from "@testing-library/react-hooks";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import * as ReactRedux from "react-redux";
|
|
2
|
+
import { allFeedsIsReady, useBatchLoading } from "../useBatchLoading";
|
|
3
|
+
import { WrappedWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
|
|
4
|
+
import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
|
|
6
5
|
|
|
7
6
|
jest.mock("../../navigation");
|
|
8
7
|
|
|
@@ -13,17 +12,18 @@ jest.mock(
|
|
|
13
12
|
})
|
|
14
13
|
);
|
|
15
14
|
|
|
16
|
-
const
|
|
17
|
-
const allFeedsIsReady = require("../useBatchLoading").allFeedsIsReady;
|
|
18
|
-
|
|
19
|
-
const mockStore = reduxMockStore.default([thunk]);
|
|
20
|
-
|
|
21
|
-
const wrapper: React.FC<any> = ({ children, store }) => (
|
|
22
|
-
<ReactRedux.Provider store={store}>{children}</ReactRedux.Provider>
|
|
23
|
-
);
|
|
15
|
+
const wrapper = WrappedWithProviders;
|
|
24
16
|
|
|
25
17
|
describe("useBatchLoading", () => {
|
|
26
|
-
const
|
|
18
|
+
const data = [
|
|
19
|
+
{ data: { source: "url1" }, component_type: "any" },
|
|
20
|
+
{ data: { source: "url2" }, component_type: "any" },
|
|
21
|
+
{ data: { source: "url3" }, component_type: "any" },
|
|
22
|
+
{ data: { source: "url4" }, component_type: "any" },
|
|
23
|
+
{ data: { source: "url5" }, component_type: "any" },
|
|
24
|
+
{ data: { source: "url6" }, component_type: "any" },
|
|
25
|
+
// ... more items
|
|
26
|
+
];
|
|
27
27
|
|
|
28
28
|
beforeAll(() => {
|
|
29
29
|
jest.useFakeTimers();
|
|
@@ -34,7 +34,7 @@ describe("useBatchLoading", () => {
|
|
|
34
34
|
});
|
|
35
35
|
|
|
36
36
|
it("loadPipesData start loading not started requests", () => {
|
|
37
|
-
const store =
|
|
37
|
+
const store = {
|
|
38
38
|
zappPipes: {
|
|
39
39
|
url1: {
|
|
40
40
|
loading: true,
|
|
@@ -53,29 +53,17 @@ describe("useBatchLoading", () => {
|
|
|
53
53
|
},
|
|
54
54
|
},
|
|
55
55
|
test: "true",
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
useDispatchSpy.mockReturnValue(store.dispatch);
|
|
56
|
+
};
|
|
59
57
|
|
|
60
58
|
const initialBatchSize = 3;
|
|
61
59
|
const riverId = "123";
|
|
62
60
|
|
|
63
|
-
const data = [
|
|
64
|
-
{ data: { source: "url1" } },
|
|
65
|
-
{ data: { source: "url2" } },
|
|
66
|
-
{ data: { source: "url3" } },
|
|
67
|
-
{ data: { source: "url4" } },
|
|
68
|
-
{ data: { source: "url5" } },
|
|
69
|
-
{ data: { source: "url6" } },
|
|
70
|
-
// ... more items
|
|
71
|
-
];
|
|
72
|
-
|
|
73
61
|
renderHook(() => useBatchLoading(data, { initialBatchSize, riverId }), {
|
|
74
62
|
wrapper,
|
|
75
63
|
initialProps: { store },
|
|
76
64
|
});
|
|
77
65
|
|
|
78
|
-
const actions =
|
|
66
|
+
const actions = (appStore.getStore() as any).getActions();
|
|
79
67
|
|
|
80
68
|
expect(actions).toHaveLength(2);
|
|
81
69
|
|
|
@@ -91,7 +79,7 @@ describe("useBatchLoading", () => {
|
|
|
91
79
|
});
|
|
92
80
|
|
|
93
81
|
it("loadPipesData start loading new feed when 1 feed is done loading and 1 is in loading state", () => {
|
|
94
|
-
const store =
|
|
82
|
+
const store = {
|
|
95
83
|
zappPipes: {
|
|
96
84
|
url1: {
|
|
97
85
|
loading: false,
|
|
@@ -110,31 +98,17 @@ describe("useBatchLoading", () => {
|
|
|
110
98
|
},
|
|
111
99
|
},
|
|
112
100
|
test: "true",
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
useDispatchSpy.mockReturnValue(store.dispatch);
|
|
101
|
+
};
|
|
116
102
|
|
|
117
103
|
const initialBatchSize = 3;
|
|
118
104
|
const riverId = "123";
|
|
119
105
|
|
|
120
|
-
const data = [
|
|
121
|
-
{ data: { source: "url1" } },
|
|
122
|
-
{ data: { source: "url2" } },
|
|
123
|
-
{ data: { source: "url3" } },
|
|
124
|
-
{ data: { source: "url4" } },
|
|
125
|
-
{ data: { source: "url5" } },
|
|
126
|
-
{ data: { source: "url6" } },
|
|
127
|
-
// ... more items
|
|
128
|
-
];
|
|
129
|
-
|
|
130
|
-
expect(useDispatchSpy).toBeCalledTimes(0);
|
|
131
|
-
|
|
132
106
|
renderHook(() => useBatchLoading(data, { initialBatchSize, riverId }), {
|
|
133
107
|
wrapper,
|
|
134
108
|
initialProps: { store },
|
|
135
109
|
});
|
|
136
110
|
|
|
137
|
-
const actions =
|
|
111
|
+
const actions = (appStore.getStore() as any).getActions();
|
|
138
112
|
|
|
139
113
|
expect(actions).toHaveLength(1);
|
|
140
114
|
|
|
@@ -145,38 +119,26 @@ describe("useBatchLoading", () => {
|
|
|
145
119
|
});
|
|
146
120
|
|
|
147
121
|
it("loadPipesData has been called when no data cached", () => {
|
|
148
|
-
const store =
|
|
122
|
+
const store = {
|
|
149
123
|
zappPipes: {},
|
|
150
124
|
test: "true",
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
useDispatchSpy.mockReturnValue(store.dispatch);
|
|
125
|
+
};
|
|
154
126
|
|
|
155
127
|
const initialBatchSize = 3;
|
|
156
128
|
const riverId = "123";
|
|
157
129
|
|
|
158
|
-
const data = [
|
|
159
|
-
{ data: { source: "url1" } },
|
|
160
|
-
{ data: { source: "url2" } },
|
|
161
|
-
{ data: { source: "url3" } },
|
|
162
|
-
{ data: { source: "url4" } },
|
|
163
|
-
{ data: { source: "url5" } },
|
|
164
|
-
{ data: { source: "url6" } },
|
|
165
|
-
// ... more items
|
|
166
|
-
];
|
|
167
|
-
|
|
168
130
|
renderHook(() => useBatchLoading(data, { initialBatchSize, riverId }), {
|
|
169
131
|
wrapper,
|
|
170
132
|
initialProps: { store },
|
|
171
133
|
});
|
|
172
134
|
|
|
173
|
-
const actions =
|
|
135
|
+
const actions = (appStore.getStore() as any).getActions();
|
|
174
136
|
|
|
175
137
|
expect(actions).toHaveLength(3);
|
|
176
138
|
});
|
|
177
139
|
|
|
178
140
|
it("initial batch ready when all initial items loaded", () => {
|
|
179
|
-
const store =
|
|
141
|
+
const store = {
|
|
180
142
|
zappPipes: {
|
|
181
143
|
url1: {
|
|
182
144
|
loading: false,
|
|
@@ -194,19 +156,11 @@ describe("useBatchLoading", () => {
|
|
|
194
156
|
data: {},
|
|
195
157
|
},
|
|
196
158
|
},
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
useDispatchSpy.mockReturnValue(store.dispatch);
|
|
159
|
+
};
|
|
200
160
|
|
|
201
161
|
const initialBatchSize = 3;
|
|
202
162
|
const riverId = "123";
|
|
203
163
|
|
|
204
|
-
const data: Partial<ZappUIComponent>[] = [
|
|
205
|
-
{ data: { source: "url1" } },
|
|
206
|
-
{ data: { source: "url2" } },
|
|
207
|
-
{ data: { source: "url3" } },
|
|
208
|
-
];
|
|
209
|
-
|
|
210
164
|
const { result } = renderHook(
|
|
211
165
|
() => useBatchLoading(data, { initialBatchSize, riverId }),
|
|
212
166
|
{ wrapper, initialProps: { store } }
|
|
@@ -216,12 +170,10 @@ describe("useBatchLoading", () => {
|
|
|
216
170
|
});
|
|
217
171
|
|
|
218
172
|
it("gallery-qb: loadPipesData should be called only once for first component in the gallery", () => {
|
|
219
|
-
const store =
|
|
173
|
+
const store = {
|
|
220
174
|
zappPipes: {},
|
|
221
175
|
test: "true",
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
useDispatchSpy.mockReturnValue(store.dispatch);
|
|
176
|
+
};
|
|
225
177
|
|
|
226
178
|
const initialBatchSize = 3;
|
|
227
179
|
const riverId = "123";
|
|
@@ -231,11 +183,11 @@ describe("useBatchLoading", () => {
|
|
|
231
183
|
component_type: "gallery-qb",
|
|
232
184
|
ui_components: [{ data: { source: "url1" } }],
|
|
233
185
|
},
|
|
234
|
-
{ data: { source: "url2" } },
|
|
235
|
-
{ data: { source: "url3" } },
|
|
236
|
-
{ data: { source: "url4" } },
|
|
237
|
-
{ data: { source: "url5" } },
|
|
238
|
-
{ data: { source: "url6" } },
|
|
186
|
+
{ data: { source: "url2" }, component_type: "any" },
|
|
187
|
+
{ data: { source: "url3" }, component_type: "any" },
|
|
188
|
+
{ data: { source: "url4" }, component_type: "any" },
|
|
189
|
+
{ data: { source: "url5" }, component_type: "any" },
|
|
190
|
+
{ data: { source: "url6" }, component_type: "any" },
|
|
239
191
|
// ... more items
|
|
240
192
|
];
|
|
241
193
|
|
|
@@ -244,13 +196,13 @@ describe("useBatchLoading", () => {
|
|
|
244
196
|
initialProps: { store },
|
|
245
197
|
});
|
|
246
198
|
|
|
247
|
-
const actions =
|
|
199
|
+
const actions = (appStore.getStore() as any).getActions();
|
|
248
200
|
|
|
249
201
|
expect(actions).toHaveLength(1);
|
|
250
202
|
});
|
|
251
203
|
|
|
252
204
|
it("gallery-qb: initial batch ready when all initial items loaded", () => {
|
|
253
|
-
const store =
|
|
205
|
+
const store = {
|
|
254
206
|
zappPipes: {
|
|
255
207
|
url1: {
|
|
256
208
|
loading: false,
|
|
@@ -258,20 +210,19 @@ describe("useBatchLoading", () => {
|
|
|
258
210
|
data: {},
|
|
259
211
|
},
|
|
260
212
|
},
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
useDispatchSpy.mockReturnValue(store.dispatch);
|
|
213
|
+
};
|
|
264
214
|
|
|
265
215
|
const initialBatchSize = 3;
|
|
266
216
|
const riverId = "123";
|
|
267
217
|
|
|
268
|
-
const data
|
|
218
|
+
const data = [
|
|
269
219
|
{
|
|
270
220
|
component_type: "gallery-qb",
|
|
271
|
-
|
|
221
|
+
data: {},
|
|
222
|
+
ui_components: [{ data: { source: "url1" } }] as any,
|
|
272
223
|
},
|
|
273
|
-
{ data: { source: "url2" } },
|
|
274
|
-
{ data: { source: "url3" } },
|
|
224
|
+
{ data: { source: "url2" }, component_type: "any" },
|
|
225
|
+
{ data: { source: "url3" }, component_type: "any" },
|
|
275
226
|
];
|
|
276
227
|
|
|
277
228
|
const { result } = renderHook(
|
|
@@ -14,7 +14,7 @@ import { HOOKS_EVENTS } from "../../appUtils/HooksManager/constants";
|
|
|
14
14
|
import { getRiverFromRoute, getTargetRoute } from "../../navigationUtils";
|
|
15
15
|
import { useConnectionInfo } from "../connection";
|
|
16
16
|
|
|
17
|
-
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
17
|
+
import { isTV, isWeb } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
18
18
|
import { useNavbarState } from "../screen";
|
|
19
19
|
|
|
20
20
|
export { useNavigation } from "./useNavigation";
|
|
@@ -127,11 +127,13 @@ export function isNavBarVisible(
|
|
|
127
127
|
|
|
128
128
|
export const useBackHandler = (cb: () => boolean) => {
|
|
129
129
|
useEffect(() => {
|
|
130
|
-
|
|
130
|
+
if (!isWeb()) {
|
|
131
|
+
const unsubscribe = BackHandler.addEventListener("hardwareBackPress", cb);
|
|
131
132
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
return () => {
|
|
134
|
+
unsubscribe.remove();
|
|
135
|
+
};
|
|
136
|
+
}
|
|
135
137
|
}, [cb]);
|
|
136
138
|
};
|
|
137
139
|
|
package/testUtils/index.tsx
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { SafeAreaProvider } from "react-native-safe-area-context";
|
|
2
|
+
import { render } from "@testing-library/react-native";
|
|
3
3
|
import React, { PropsWithChildren } from "react";
|
|
4
|
-
import
|
|
5
|
-
|
|
4
|
+
import configureStore from "redux-mock-store";
|
|
6
5
|
import { Provider } from "react-redux";
|
|
6
|
+
import { View } from "react-native";
|
|
7
7
|
import thunk from "redux-thunk";
|
|
8
|
-
import
|
|
9
|
-
|
|
8
|
+
import * as R from "ramda";
|
|
9
|
+
|
|
10
10
|
import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
|
|
11
11
|
|
|
12
|
-
import { render } from "@testing-library/react-native";
|
|
13
|
-
import { AnalyticsProvider } from "../analyticsUtils";
|
|
14
12
|
import { ThemeContext } from "../theme";
|
|
13
|
+
import { AnalyticsProvider } from "../analyticsUtils";
|
|
15
14
|
|
|
16
15
|
export { getByTestId } from "./getByTestId";
|
|
17
16
|
|