@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.
- package/actionsExecutor/ActionExecutor.ts +16 -9
- package/actionsExecutor/ActionExecutorContext.tsx +74 -9
- package/alertUtils/alert.ts +148 -0
- package/alertUtils/index.ts +1 -148
- package/analyticsUtils/AnalyticPlayerListener.ts +18 -1
- package/analyticsUtils/__tests__/__snapshots__/analyticsManagerNoModule.test.js.snap +9 -9
- package/analyticsUtils/helpers/hooks.ts +1 -1
- package/appUtils/HooksManager/{Hook.js → Hook.ts} +35 -23
- package/appUtils/HooksManager/__tests__/__snapshots__/hook.test.js.snap +10 -8
- package/appUtils/HooksManager/__tests__/__snapshots__/hooksManager.test.js.snap +693 -0
- package/appUtils/HooksManager/__tests__/hook.test.js +196 -184
- package/appUtils/HooksManager/__tests__/hooksManager.test.js +96 -99
- package/appUtils/HooksManager/{constants.js → constants.ts} +1 -1
- package/appUtils/HooksManager/{index.js → index.ts} +121 -112
- package/appUtils/HooksManager/types.ts +119 -0
- package/appUtils/RiverFocusManager/index.js +17 -12
- package/appUtils/accessibilityManager/index.ts +42 -1
- package/appUtils/contextKeysManager/contextResolver.ts +77 -0
- package/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +6 -6
- package/appUtils/focusManager/index.ts +91 -65
- package/appUtils/focusManager/treeDataStructure/Tree/index.js +25 -3
- package/appUtils/focusManager/treeDataStructure/Utils/index.js +1 -3
- package/appUtils/focusManager/utils/enums.ts +4 -0
- package/appUtils/focusManagerAux/utils/index.ts +4 -3
- package/appUtils/{index.js → index.ts} +1 -1
- package/appUtils/keyCodes/__tests__/__snapshots__/keyCodes.test.js.snap +2 -2
- package/appUtils/keyCodes/__tests__/keyCodes.test.js +4 -4
- package/appUtils/keyCodes/{index.js → index.ts} +2 -0
- package/appUtils/keyCodes/keys/index.ts +3 -0
- package/appUtils/keyCodes/{keys.android.js → keys/keyEventMapper.ts} +0 -19
- package/appUtils/keyCodes/keys/keys.android.ts +18 -0
- package/appUtils/keyCodes/keys/keys.ios.ts +25 -0
- package/appUtils/keyCodes/keys/keys.ts +15 -0
- package/appUtils/keyCodes/{keysByPlatform.js → keys/keysByPlatform.ts} +4 -0
- package/appUtils/keyCodes/keysByPlatform.ts +8 -0
- package/appUtils/keyInputHandler/KeyInputHandler.ts +68 -0
- package/appUtils/orientationHelper.ts +1 -1
- package/appUtils/platform/const.ts +14 -0
- package/appUtils/platform/platformUtils.ts +17 -15
- package/appUtils/playerManager/player.ts +19 -7
- package/appUtils/playerManager/playerNative.ts +3 -2
- package/appUtils/playerManager/usePlayerControllerSetup.tsx +3 -3
- package/arrayUtils/__tests__/__snapshots__/arrayUtils.test.ts.snap +4 -4
- package/domUtils/{cookieManager.js → cookieManager.ts} +1 -2
- package/functionUtils/__tests__/__snapshots__/functionUtils.test.js.snap +4 -4
- package/functionUtils/index.ts +15 -11
- package/idleUtils/__tests__/withTimeout$.test.ts +37 -0
- package/idleUtils/index.ts +1 -1
- package/idleUtils/withTimeout.ts +15 -2
- package/logger/const.ts +9 -67
- package/manifestUtils/__tests__/createConfig.test.js +18 -16
- package/modalState/index.ts +1 -5
- package/navigationUtils/__tests__/__snapshots__/navigationUtils.test.js.snap +6 -6
- package/navigationUtils/__tests__/itemTypes.test.js +2 -2
- package/navigationUtils/__tests__/navigationUtils.test.js +2 -2
- package/navigationUtils/index.ts +17 -8
- package/package.json +3 -2
- package/reactHooks/autoscrolling/__tests__/useTrackCurrentAutoScrollingElement.test.ts +1 -1
- package/reactHooks/autoscrolling/__tests__/useTrackedView.test.tsx +1 -1
- package/reactHooks/cell-click/__tests__/index.test.js +10 -2
- package/reactHooks/cell-click/index.ts +7 -1
- package/reactHooks/feed/__tests__/useBuildPipesUrl.test.tsx +4 -4
- package/reactHooks/feed/__tests__/useFeedLoader.test.tsx +10 -11
- package/reactHooks/feed/useFeedLoader.tsx +1 -1
- package/reactHooks/feed/usePipesCacheReset.ts +5 -5
- package/reactHooks/flatList/__tests__/index.test.tsx +30 -21
- package/reactHooks/layout/__tests__/index.test.tsx +10 -10
- package/reactHooks/layout/useDimensions/helpers/__tests__/getInitialDimensions.native.test.js +14 -28
- package/reactHooks/layout/useDimensions/helpers/__tests__/getInitialDimensions.test.js +1 -1
- package/reactHooks/navigation/__tests__/index.test.tsx +0 -4
- package/reactHooks/navigation/index.ts +29 -218
- package/reactHooks/navigation/useGetBottomTabBarHeight.ts +12 -0
- package/reactHooks/navigation/useGetNavBarTopBorderWidth.ts +14 -0
- package/reactHooks/navigation/useGetTabBarHeight.ts +12 -0
- package/reactHooks/navigation/useIsScreenActive.ts +17 -0
- package/reactHooks/navigation/useNavigationPluginData.ts +15 -0
- package/reactHooks/navigation/useNavigationType.ts +15 -0
- package/reactHooks/navigation/usePathname.ts +4 -0
- package/reactHooks/navigation/useRoute.ts +100 -0
- package/reactHooks/navigation/useUniqueRouteSuffix.ts +41 -0
- package/reactHooks/player/TVSeekControlller/ISeekController.ts +32 -0
- package/reactHooks/player/TVSeekControlller/LongPressSeekController.ts +71 -0
- package/reactHooks/player/TVSeekControlller/TVSeekController.ts +258 -0
- package/reactHooks/player/TVSeekControlller/TapSeekController.ts +53 -0
- package/reactHooks/player/__tests__/{useAutoSeek.test.tsx → useAutoSeek._test.tsx} +2 -3
- package/reactHooks/player/const.ts +0 -4
- package/reactHooks/player/index.ts +0 -6
- package/reactHooks/usePluginConfiguration.ts +1 -1
- package/reactHooks/useSubscriberFor.ts +4 -3
- package/reactUtils/__tests__/reactUtils.test.js +10 -28
- package/reactUtils/createContext/__tests__/__snapshots__/helpers.test.js.snap +19 -19
- package/reactUtils/createContext/__tests__/__snapshots__/index.test.js.snap +2 -2
- package/reactUtils/createContext/__tests__/__snapshots__/provider.test.js.snap +3 -3
- package/reactUtils/createContext/__tests__/helpers.test.js +8 -8
- package/reactUtils/index.ts +0 -14
- package/screenState/index.ts +24 -10
- package/theme/__mocks__/index.ts +4 -0
- package/theme/index.ts +1 -1
- package/time/Timer.ts +5 -2
- package/types.ts +1 -0
- package/zappFrameworkUtils/presentPluginOneTime.ts +2 -3
- package/appUtils/keyCodes/keys.ios.js +0 -46
- package/reactHooks/player/useAutoSeek.tsx +0 -87
- package/reactHooks/player/useSeek.tsx +0 -66
- package/reactHooks/player/useTapSeek.tsx +0 -58
- /package/appUtils/HooksManager/{logger.js → logger.ts} +0 -0
- /package/appUtils/{directionHelper.js → directionHelper.ts} +0 -0
- /package/appUtils/keyCodes/{androidTVKeys.js → androidTVKeys.ts} +0 -0
- /package/appUtils/keyCodes/{keys.web.js → keys/keys.web.ts} +0 -0
- /package/appUtils/{localizationsHelper.js → localizationsHelper.ts} +0 -0
- /package/domUtils/{logger.js → logger.ts} +0 -0
- /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
|
-
|
|
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
|
|
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 = (
|
|
94
|
-
const logEvent = typeof event === "string" ? { message: event } : event;
|
|
95
|
-
};
|
|
48
|
+
log = (_event) => {};
|
|
96
49
|
|
|
97
|
-
debug = (
|
|
98
|
-
const logEvent = typeof event === "string" ? { message: event } : event;
|
|
99
|
-
};
|
|
50
|
+
debug = (_event) => {};
|
|
100
51
|
|
|
101
|
-
info = (
|
|
102
|
-
const logEvent = typeof event === "string" ? { message: event } : event;
|
|
103
|
-
};
|
|
52
|
+
info = (_event) => {};
|
|
104
53
|
|
|
105
|
-
warning = (
|
|
106
|
-
const logEvent = typeof event === "string" ? { message: event } : event;
|
|
107
|
-
};
|
|
54
|
+
warning = (_event) => {};
|
|
108
55
|
|
|
109
|
-
warn = (
|
|
56
|
+
warn = (_event) => {
|
|
110
57
|
this.warning(event);
|
|
111
58
|
};
|
|
112
59
|
|
|
113
|
-
error = (
|
|
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 = (
|
|
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
|
-
|
|
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
|
|
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
|
|
19
|
-
styles: jest.fn(() => ({ styles })),
|
|
16
|
+
const mockGenerators = {
|
|
17
|
+
styles: jest.fn(() => ({ styles: mockStyles })),
|
|
20
18
|
stylesGroup: jest.fn(() => ({
|
|
21
|
-
styles:
|
|
19
|
+
styles: mockStylesWithGroup,
|
|
22
20
|
})),
|
|
23
|
-
customConfiguration: jest.fn(() => ({ custom_configuration: [
|
|
21
|
+
customConfiguration: jest.fn(() => ({ custom_configuration: [mockStyles] })),
|
|
24
22
|
customConfigurationGroup: jest.fn(() => ({
|
|
25
|
-
custom_configuration: [
|
|
23
|
+
custom_configuration: [mockStylesWithGroup],
|
|
26
24
|
})),
|
|
27
25
|
};
|
|
28
26
|
|
|
29
|
-
jest.
|
|
27
|
+
jest.doMock("../defaultManifestConfigurations", () => ({
|
|
30
28
|
defaultConfigurations: {
|
|
31
|
-
styles:
|
|
32
|
-
stylesGroup:
|
|
33
|
-
customConfiguration:
|
|
34
|
-
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
|
-
|
|
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", () => {
|
package/modalState/index.ts
CHANGED
|
@@ -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
|
-
|
|
5
|
-
"assets":
|
|
4
|
+
{
|
|
5
|
+
"assets": {
|
|
6
6
|
"appLogo": "appLogo.png",
|
|
7
7
|
},
|
|
8
8
|
"home": false,
|
|
9
|
-
"nav_items":
|
|
10
|
-
|
|
9
|
+
"nav_items": [
|
|
10
|
+
{
|
|
11
11
|
"type": "label",
|
|
12
12
|
},
|
|
13
13
|
],
|
|
14
|
-
"rules":
|
|
14
|
+
"rules": {},
|
|
15
15
|
"selected": "A1234",
|
|
16
|
-
"styles":
|
|
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)).
|
|
65
|
-
expect(itemIsOfType(river)).
|
|
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.
|
|
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.
|
|
276
|
+
expect(targetRoute).not.toContainEntry("//");
|
|
277
277
|
});
|
|
278
278
|
});
|
|
279
279
|
});
|
package/navigationUtils/index.ts
CHANGED
|
@@ -324,7 +324,13 @@ export function getPathAttributes({
|
|
|
324
324
|
* @param {object} rivers
|
|
325
325
|
* @returns {object}
|
|
326
326
|
*/
|
|
327
|
-
export function getRiverFromRoute({
|
|
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
|
-
|
|
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
|
-
|
|
641
|
-
|
|
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.
|
|
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.
|
|
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
|
},
|
|
@@ -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
|
|
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: () =>
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
17
|
+
const mockLogger = {
|
|
17
18
|
warning: jest.fn(),
|
|
18
19
|
log: jest.fn(),
|
|
19
20
|
info: jest.fn(),
|
|
20
21
|
};
|
|
21
22
|
|
|
22
|
-
const
|
|
23
|
+
const mockNavigator: any = {
|
|
23
24
|
currentRoute: "/river/A1234",
|
|
24
25
|
getStack: jest.fn(() => []),
|
|
25
26
|
};
|
|
26
27
|
|
|
27
|
-
const
|
|
28
|
+
const mockRouteData: any = {
|
|
28
29
|
screenData: {},
|
|
29
30
|
pathname: "/river/A1234",
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
jest.
|
|
33
|
+
jest.doMock("../../logger", () => ({
|
|
33
34
|
reactHooksLogger: {
|
|
34
|
-
addSubsystem: jest.fn(() =>
|
|
35
|
+
addSubsystem: jest.fn(() => mockLogger),
|
|
35
36
|
},
|
|
36
37
|
}));
|
|
37
38
|
|
|
38
39
|
jest
|
|
39
40
|
.spyOn(useNavigationHooks, "useNavigation")
|
|
40
|
-
.mockImplementation(() =>
|
|
41
|
+
.mockImplementation(() => mockNavigator);
|
|
41
42
|
|
|
42
|
-
jest.spyOn(
|
|
43
|
-
|
|
44
|
-
const { useFeedLoader } = require("../useFeedLoader");
|
|
43
|
+
jest.spyOn(useRouteHook, "useRoute").mockImplementation(() => mockRouteData);
|
|
45
44
|
|
|
46
45
|
const mockZappPipesData = {
|
|
47
46
|
data: {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { useDispatch } from "react-redux";
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
|
|
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-
|
|
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
|
-
|
|
70
|
-
(
|
|
71
|
-
onLoadFinished
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|
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 =
|
|
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
|
-
|
|
110
|
-
(
|
|
111
|
-
onLoadFinished
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
act(() => {
|
|
113
|
+
result.current.renderItem(
|
|
114
|
+
({ onLoadFinished }) => {
|
|
115
|
+
onLoadFinished();
|
|
116
|
+
},
|
|
117
|
+
{ item: element1, index: 0 }
|
|
118
|
+
);
|
|
119
|
+
});
|
|
115
120
|
|
|
116
|
-
const {
|
|
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 =
|
|
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 {
|
|
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 =
|
|
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
|
});
|