@applicaster/zapp-react-native-utils 13.0.0-alpha.1552112220 → 13.0.0-alpha.1692038547
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/__tests__/__snapshots__/analyticsManagerNoModule.test.js.snap +9 -9
- package/analyticsUtils/helpers/hooks.ts +1 -1
- package/appUtils/HooksManager/Hook.ts +2 -2
- package/appUtils/HooksManager/__tests__/__snapshots__/hook.test.js.snap +7 -7
- package/appUtils/HooksManager/__tests__/__snapshots__/hooksManager.test.js.snap +186 -186
- package/appUtils/HooksManager/types.ts +5 -2
- package/appUtils/accessibilityManager/index.ts +42 -1
- package/appUtils/contextKeysManager/contextResolver.ts +77 -0
- package/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +7 -6
- package/appUtils/focusManager/index.ts +100 -65
- package/appUtils/focusManager/treeDataStructure/Tree/index.js +23 -0
- package/appUtils/focusManager/utils/enums.ts +4 -0
- package/appUtils/focusManagerAux/utils/index.ts +4 -3
- package/appUtils/keyCodes/__tests__/__snapshots__/keyCodes.test.js.snap +2 -2
- package/appUtils/keyCodes/__tests__/keyCodes.test.js +1 -1
- package/appUtils/orientationHelper.ts +1 -1
- package/appUtils/platform/const.ts +14 -0
- package/appUtils/platform/platformUtils.ts +41 -4
- package/appUtils/playerManager/player.ts +2 -2
- package/appUtils/playerManager/playerNative.ts +1 -1
- package/arrayUtils/__tests__/__snapshots__/arrayUtils.test.ts.snap +4 -4
- package/focusManager/FocusManager.ts +27 -3
- package/functionUtils/__tests__/__snapshots__/functionUtils.test.js.snap +4 -4
- 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 +16 -16
- 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 +3 -3
- 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/layout/useDimensions/useDimensions.ts +8 -0
- package/reactHooks/navigation/__tests__/index.test.tsx +0 -4
- package/reactHooks/navigation/index.ts +22 -214
- package/reactHooks/navigation/useGetBottomTabBarHeight.ts +12 -0
- package/reactHooks/navigation/useGetNavBarTopBorderWidth.ts +14 -0
- package/reactHooks/navigation/useGetTabBarHeight.ts +10 -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/TVSeekController.ts +4 -4
- package/reactHooks/player/__tests__/useAutoSeek._test.tsx +115 -0
- package/reactHooks/player/__tests__/useTapSeek._test.ts +94 -0
- package/reactHooks/state/useRefWithInitialValue.ts +14 -0
- package/reactHooks/state/useStateFromSubscribe.ts +23 -0
- 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/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
|
@@ -17,9 +17,10 @@ class ActionExecutor {
|
|
|
17
17
|
|
|
18
18
|
handleAction = async (
|
|
19
19
|
action: ActionType,
|
|
20
|
-
|
|
20
|
+
context?: Record<string, any>
|
|
21
21
|
): Promise<ActionResult> => {
|
|
22
22
|
const handler = this.registeredActions[action.type];
|
|
23
|
+
const entry = context?.entry as ZappEntry;
|
|
23
24
|
|
|
24
25
|
if (!handler) {
|
|
25
26
|
log_error(
|
|
@@ -38,11 +39,11 @@ class ActionExecutor {
|
|
|
38
39
|
);
|
|
39
40
|
|
|
40
41
|
try {
|
|
41
|
-
return handler(action,
|
|
42
|
+
return handler(action, context);
|
|
42
43
|
} catch (error) {
|
|
43
44
|
log_error(
|
|
44
45
|
`handleAction: error handling action type: ${action.type}, message: ${error.message}`,
|
|
45
|
-
{ action,
|
|
46
|
+
{ action, context, error }
|
|
46
47
|
);
|
|
47
48
|
|
|
48
49
|
throw error;
|
|
@@ -51,11 +52,11 @@ class ActionExecutor {
|
|
|
51
52
|
|
|
52
53
|
handleActions = async (
|
|
53
54
|
actionTypes: ActionType[],
|
|
54
|
-
|
|
55
|
+
context?: Record<string, any>
|
|
55
56
|
): Promise<ActionResult> => {
|
|
56
57
|
for (const action of actionTypes) {
|
|
57
58
|
// TODO: Handle action result error
|
|
58
|
-
const result = await this.handleAction(action,
|
|
59
|
+
const result = await this.handleAction(action, context);
|
|
59
60
|
|
|
60
61
|
if (result === ActionResult.Cancel) {
|
|
61
62
|
log_info(`handleActions: action: ${action.type} canceled`);
|
|
@@ -67,7 +68,10 @@ class ActionExecutor {
|
|
|
67
68
|
return ActionResult.Success;
|
|
68
69
|
};
|
|
69
70
|
|
|
70
|
-
handleEntryActions = async (
|
|
71
|
+
handleEntryActions = async (
|
|
72
|
+
entry: ZappEntry,
|
|
73
|
+
context?: Record<string, any>
|
|
74
|
+
): Promise<ActionResult> => {
|
|
71
75
|
const tapActions = entry.extensions?.tap_actions?.actions;
|
|
72
76
|
|
|
73
77
|
if (!tapActions) {
|
|
@@ -77,7 +81,7 @@ class ActionExecutor {
|
|
|
77
81
|
if (!Array.isArray(tapActions)) {
|
|
78
82
|
log_error(
|
|
79
83
|
`handleEntryActions: tapActions is not an array for id: ${entry.id} title: ${entry.title}`,
|
|
80
|
-
{ entry }
|
|
84
|
+
{ context, entry }
|
|
81
85
|
);
|
|
82
86
|
|
|
83
87
|
return;
|
|
@@ -87,7 +91,7 @@ class ActionExecutor {
|
|
|
87
91
|
return;
|
|
88
92
|
}
|
|
89
93
|
|
|
90
|
-
await this.handleActions(tapActions, entry);
|
|
94
|
+
await this.handleActions(tapActions, { ...context, entry });
|
|
91
95
|
};
|
|
92
96
|
|
|
93
97
|
unregisterAction = (actionType: string) => {
|
|
@@ -96,7 +100,10 @@ class ActionExecutor {
|
|
|
96
100
|
|
|
97
101
|
registerAction = (
|
|
98
102
|
type: string,
|
|
99
|
-
handler: (
|
|
103
|
+
handler: (
|
|
104
|
+
action: ActionType,
|
|
105
|
+
context?: Record<string, any>
|
|
106
|
+
) => Promise<ActionResult>
|
|
100
107
|
) => {
|
|
101
108
|
if (this.registeredActions[type]) {
|
|
102
109
|
log_error(`registerAction: action type: ${type} already registered`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="@applicaster/applicaster-types" />
|
|
2
|
-
|
|
2
|
+
import { localStorage } from "@applicaster/zapp-react-native-bridge/ZappStorage/LocalStorage";
|
|
3
3
|
import React, { createContext, useMemo } from "react";
|
|
4
4
|
import {
|
|
5
5
|
actionExecutor as _actionExecutor,
|
|
@@ -12,6 +12,13 @@ import { showConfirmationDialog } from "../alertUtils";
|
|
|
12
12
|
import { createCloudEvent, sendCloudEvent } from "../cloudEventsUtils";
|
|
13
13
|
import { createLogger } from "../logger";
|
|
14
14
|
import { StorageMultiSelectProvider } from "@applicaster/zapp-react-native-bridge/ZappStorage/StorageMultiSelectProvider";
|
|
15
|
+
import { ACTIVE_LAYOUT_ID_STORAGE_KEY } from "@applicaster/quick-brick-core/App/remoteContextReloader/consts";
|
|
16
|
+
import { appStore } from "@applicaster/zapp-react-native-redux/AppStore";
|
|
17
|
+
import { loadPipesData } from "@applicaster/zapp-react-native-redux/ZappPipes";
|
|
18
|
+
import {
|
|
19
|
+
EntryResolver,
|
|
20
|
+
resolveObjectValues,
|
|
21
|
+
} from "../appUtils/contextKeysManager/contextResolver";
|
|
15
22
|
|
|
16
23
|
const { log_error, log_info } = createLogger({
|
|
17
24
|
subsystem: "ActionExecutorContext",
|
|
@@ -21,15 +28,24 @@ const { log_error, log_info } = createLogger({
|
|
|
21
28
|
type ActionExecutorContextType = {
|
|
22
29
|
registerAction: (
|
|
23
30
|
type: string,
|
|
24
|
-
handler: (
|
|
31
|
+
handler: (
|
|
32
|
+
action: ActionType,
|
|
33
|
+
context?: Record<string, any>
|
|
34
|
+
) => Promise<ActionResult>
|
|
25
35
|
) => void;
|
|
26
36
|
unregisterAction: (type: string) => void;
|
|
27
|
-
handleAction: (
|
|
37
|
+
handleAction: (
|
|
38
|
+
action: ActionType,
|
|
39
|
+
context?: Record<string, any>
|
|
40
|
+
) => Promise<ActionResult>;
|
|
28
41
|
handleActions: (
|
|
29
42
|
actions: ActionType[],
|
|
30
|
-
|
|
43
|
+
context: Record<string, any>
|
|
44
|
+
) => Promise<ActionResult>;
|
|
45
|
+
handleEntryActions: (
|
|
46
|
+
entry: ZappEntry,
|
|
47
|
+
context?: Record<string, any>
|
|
31
48
|
) => Promise<ActionResult>;
|
|
32
|
-
handleEntryActions: (entry: ZappEntry) => Promise<ActionResult>;
|
|
33
49
|
};
|
|
34
50
|
type Props = {
|
|
35
51
|
children: React.ReactNode;
|
|
@@ -44,6 +60,44 @@ const prepareDefaultActions = (actionExecutor) => {
|
|
|
44
60
|
return ActionResult.Success;
|
|
45
61
|
});
|
|
46
62
|
|
|
63
|
+
actionExecutor.registerAction(
|
|
64
|
+
"refreshComponent",
|
|
65
|
+
async (_action, context) => {
|
|
66
|
+
const dispatch = appStore.getDispatch();
|
|
67
|
+
|
|
68
|
+
log_info("handleAction: refreshComponent event");
|
|
69
|
+
|
|
70
|
+
const dataSource = context?.component?.data?.source;
|
|
71
|
+
|
|
72
|
+
// TODO: Later we can pass component ids to do refresh instead of current one
|
|
73
|
+
// TODO: In theory we should wait callback to complete, before completing the action, but now it's not needed
|
|
74
|
+
// TODO: handle focused item removal
|
|
75
|
+
dispatch(
|
|
76
|
+
loadPipesData(dataSource, {
|
|
77
|
+
silentRefresh: false,
|
|
78
|
+
clearCache: true,
|
|
79
|
+
callback: (_data) => {},
|
|
80
|
+
riverId: context?.screenData?.id,
|
|
81
|
+
})
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
return ActionResult.Success;
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
actionExecutor.registerAction("switchLayout", async (action) => {
|
|
89
|
+
log_info("handleAction: switchLayout event");
|
|
90
|
+
|
|
91
|
+
await localStorage.setItem(
|
|
92
|
+
ACTIVE_LAYOUT_ID_STORAGE_KEY,
|
|
93
|
+
action.options.layoutId
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
QuickBrickManager.sendQuickBrickEvent(QUICK_BRICK_EVENTS.FORCE_APP_RELOAD);
|
|
97
|
+
|
|
98
|
+
return ActionResult.Success;
|
|
99
|
+
});
|
|
100
|
+
|
|
47
101
|
actionExecutor.registerAction("appRestart", async () => {
|
|
48
102
|
log_info(`handleAction: ${QUICK_BRICK_EVENTS.FORCE_APP_RELOAD} event`);
|
|
49
103
|
|
|
@@ -66,13 +120,21 @@ const prepareDefaultActions = (actionExecutor) => {
|
|
|
66
120
|
return confirmationPromise;
|
|
67
121
|
});
|
|
68
122
|
|
|
69
|
-
actionExecutor.registerAction("sendCloudEvent", async (action,
|
|
123
|
+
actionExecutor.registerAction("sendCloudEvent", async (action, context) => {
|
|
70
124
|
try {
|
|
71
125
|
const options = action.options;
|
|
72
126
|
|
|
127
|
+
const entry = context?.entry || {};
|
|
128
|
+
const entryResolver = new EntryResolver(entry);
|
|
129
|
+
|
|
130
|
+
const data =
|
|
131
|
+
options?.data && options.inflateData
|
|
132
|
+
? await resolveObjectValues(options.data, { entry: entryResolver })
|
|
133
|
+
: options?.data || entry;
|
|
134
|
+
|
|
73
135
|
const cloudEvent = await createCloudEvent({
|
|
74
136
|
type: options.type || "com.applicaster.selector.action.v1",
|
|
75
|
-
data
|
|
137
|
+
data,
|
|
76
138
|
subject: options.subject || entry?.id,
|
|
77
139
|
});
|
|
78
140
|
|
|
@@ -103,9 +165,12 @@ const prepareDefaultActions = (actionExecutor) => {
|
|
|
103
165
|
|
|
104
166
|
actionExecutor.registerAction(
|
|
105
167
|
"localStorageToggleFlag",
|
|
106
|
-
async (
|
|
168
|
+
async (
|
|
169
|
+
action: ActionType,
|
|
170
|
+
context?: Record<string, any>
|
|
171
|
+
): Promise<ActionResult> => {
|
|
107
172
|
const keyNamespace = action.options?.key;
|
|
108
|
-
const tag = entry?.extensions?.tag;
|
|
173
|
+
const tag = context?.entry?.extensions?.tag;
|
|
109
174
|
|
|
110
175
|
if (keyNamespace && tag) {
|
|
111
176
|
const multiSelectProvider =
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Alert } from "react-native";
|
|
2
|
+
import { isWeb } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
3
|
+
import { confirmationDialogStore } from "@applicaster/zapp-react-native-ui-components/Contexts/ConfirmDialogState";
|
|
4
|
+
|
|
5
|
+
// #region "Alert Dialog"
|
|
6
|
+
|
|
7
|
+
const globalAny: any = global;
|
|
8
|
+
|
|
9
|
+
const showWebAlertDialog = ({ message, completion }: AlertWebDialog) => {
|
|
10
|
+
globalAny?.alert?.(message);
|
|
11
|
+
completion?.();
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const showNativeAlertDialog = ({
|
|
15
|
+
title,
|
|
16
|
+
message,
|
|
17
|
+
okButtonText,
|
|
18
|
+
completion,
|
|
19
|
+
}: AlertDialogType) => {
|
|
20
|
+
Alert.alert(title, message, [
|
|
21
|
+
{
|
|
22
|
+
text: okButtonText,
|
|
23
|
+
onPress: completion,
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const showAlertDialog = ({
|
|
29
|
+
title,
|
|
30
|
+
message,
|
|
31
|
+
okButtonText,
|
|
32
|
+
completion,
|
|
33
|
+
}: AlertDialogType) => {
|
|
34
|
+
if (isWeb()) {
|
|
35
|
+
showWebAlertDialog({ message, completion });
|
|
36
|
+
} else {
|
|
37
|
+
showNativeAlertDialog({
|
|
38
|
+
title,
|
|
39
|
+
message,
|
|
40
|
+
okButtonText,
|
|
41
|
+
completion,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// #endregion "Alert Dialog"
|
|
47
|
+
|
|
48
|
+
// #region "Confirmation Dialog"
|
|
49
|
+
|
|
50
|
+
const showWebDialog = ({
|
|
51
|
+
message,
|
|
52
|
+
confirmCompletion,
|
|
53
|
+
cancelCompletion,
|
|
54
|
+
}: WebConfirmationDialog) => {
|
|
55
|
+
const isConfirmed = globalAny?.confirm?.(message);
|
|
56
|
+
|
|
57
|
+
if (isConfirmed) {
|
|
58
|
+
confirmCompletion?.();
|
|
59
|
+
} else {
|
|
60
|
+
cancelCompletion?.();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const showNativeDialog = ({
|
|
65
|
+
title,
|
|
66
|
+
message,
|
|
67
|
+
okButtonText,
|
|
68
|
+
cancelButtonText,
|
|
69
|
+
confirmCompletion,
|
|
70
|
+
cancelCompletion,
|
|
71
|
+
}: ConfirmationDialog) => {
|
|
72
|
+
Alert.alert(title, message, [
|
|
73
|
+
{
|
|
74
|
+
text: cancelButtonText,
|
|
75
|
+
onPress: cancelCompletion,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
text: okButtonText,
|
|
79
|
+
style: "destructive",
|
|
80
|
+
onPress: confirmCompletion,
|
|
81
|
+
},
|
|
82
|
+
]);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const handleCustomDialog = (data) => {
|
|
86
|
+
const {
|
|
87
|
+
showDialog,
|
|
88
|
+
hideDialog,
|
|
89
|
+
setConfirmAction,
|
|
90
|
+
setCancelAction,
|
|
91
|
+
setMessages,
|
|
92
|
+
} = confirmationDialogStore.getState();
|
|
93
|
+
|
|
94
|
+
setMessages(data.messages);
|
|
95
|
+
|
|
96
|
+
if (data?.cancelCompletion) {
|
|
97
|
+
setCancelAction(() => {
|
|
98
|
+
data.cancelCompletion();
|
|
99
|
+
hideDialog();
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (data?.confirmCompletion) {
|
|
104
|
+
setConfirmAction(() => {
|
|
105
|
+
data.confirmCompletion();
|
|
106
|
+
hideDialog();
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
showDialog();
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const showConfirmationDialog = ({
|
|
114
|
+
title,
|
|
115
|
+
message,
|
|
116
|
+
okButtonText,
|
|
117
|
+
cancelButtonText,
|
|
118
|
+
confirmCompletion,
|
|
119
|
+
cancelCompletion,
|
|
120
|
+
}: CustomConfirmationDialog): void => {
|
|
121
|
+
if (isWeb()) {
|
|
122
|
+
if (cancelCompletion) {
|
|
123
|
+
handleCustomDialog({
|
|
124
|
+
messages: {
|
|
125
|
+
title,
|
|
126
|
+
message,
|
|
127
|
+
okButtonText,
|
|
128
|
+
cancelButtonText,
|
|
129
|
+
},
|
|
130
|
+
confirmCompletion,
|
|
131
|
+
cancelCompletion,
|
|
132
|
+
});
|
|
133
|
+
} else {
|
|
134
|
+
showWebDialog({ message, confirmCompletion, cancelCompletion });
|
|
135
|
+
}
|
|
136
|
+
} else {
|
|
137
|
+
showNativeDialog({
|
|
138
|
+
title,
|
|
139
|
+
message,
|
|
140
|
+
okButtonText,
|
|
141
|
+
cancelButtonText,
|
|
142
|
+
confirmCompletion,
|
|
143
|
+
cancelCompletion,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// #endregion "Confirmation Dialog"
|
package/alertUtils/index.ts
CHANGED
|
@@ -1,148 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { isWeb } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
3
|
-
import { confirmationDialogStore } from "@applicaster/zapp-react-native-ui-components/Contexts/ConfirmDialogState";
|
|
4
|
-
|
|
5
|
-
// #region "Alert Dialog"
|
|
6
|
-
|
|
7
|
-
const globalAny: any = global;
|
|
8
|
-
|
|
9
|
-
const showWebAlertDialog = ({ message, completion }: AlertWebDialog) => {
|
|
10
|
-
globalAny?.alert?.(message);
|
|
11
|
-
completion?.();
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const showNativeAlertDialog = ({
|
|
15
|
-
title,
|
|
16
|
-
message,
|
|
17
|
-
okButtonText,
|
|
18
|
-
completion,
|
|
19
|
-
}: AlertDialogType) => {
|
|
20
|
-
Alert.alert(title, message, [
|
|
21
|
-
{
|
|
22
|
-
text: okButtonText,
|
|
23
|
-
onPress: completion,
|
|
24
|
-
},
|
|
25
|
-
]);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export const showAlertDialog = ({
|
|
29
|
-
title,
|
|
30
|
-
message,
|
|
31
|
-
okButtonText,
|
|
32
|
-
completion,
|
|
33
|
-
}: AlertDialogType) => {
|
|
34
|
-
if (isWeb()) {
|
|
35
|
-
showWebAlertDialog({ message, completion });
|
|
36
|
-
} else {
|
|
37
|
-
showNativeAlertDialog({
|
|
38
|
-
title,
|
|
39
|
-
message,
|
|
40
|
-
okButtonText,
|
|
41
|
-
completion,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
// #endregion "Alert Dialog"
|
|
47
|
-
|
|
48
|
-
// #region "Confirmation Dialog"
|
|
49
|
-
|
|
50
|
-
const showWebDialog = ({
|
|
51
|
-
message,
|
|
52
|
-
confirmCompletion,
|
|
53
|
-
cancelCompletion,
|
|
54
|
-
}: WebConfirmationDialog) => {
|
|
55
|
-
const isConfirmed = globalAny?.confirm?.(message);
|
|
56
|
-
|
|
57
|
-
if (isConfirmed) {
|
|
58
|
-
confirmCompletion?.();
|
|
59
|
-
} else {
|
|
60
|
-
cancelCompletion?.();
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const showNativeDialog = ({
|
|
65
|
-
title,
|
|
66
|
-
message,
|
|
67
|
-
okButtonText,
|
|
68
|
-
cancelButtonText,
|
|
69
|
-
confirmCompletion,
|
|
70
|
-
cancelCompletion,
|
|
71
|
-
}: ConfirmationDialog) => {
|
|
72
|
-
Alert.alert(title, message, [
|
|
73
|
-
{
|
|
74
|
-
text: cancelButtonText,
|
|
75
|
-
onPress: cancelCompletion,
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
text: okButtonText,
|
|
79
|
-
style: "destructive",
|
|
80
|
-
onPress: confirmCompletion,
|
|
81
|
-
},
|
|
82
|
-
]);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const handleCustomDialog = (data) => {
|
|
86
|
-
const {
|
|
87
|
-
showDialog,
|
|
88
|
-
hideDialog,
|
|
89
|
-
setConfirmAction,
|
|
90
|
-
setCancelAction,
|
|
91
|
-
setMessages,
|
|
92
|
-
} = confirmationDialogStore.getState();
|
|
93
|
-
|
|
94
|
-
setMessages(data.messages);
|
|
95
|
-
|
|
96
|
-
if (data?.cancelCompletion) {
|
|
97
|
-
setCancelAction(() => {
|
|
98
|
-
data.cancelCompletion();
|
|
99
|
-
hideDialog();
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if (data?.confirmCompletion) {
|
|
104
|
-
setConfirmAction(() => {
|
|
105
|
-
data.confirmCompletion();
|
|
106
|
-
hideDialog();
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
showDialog();
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
export const showConfirmationDialog = ({
|
|
114
|
-
title,
|
|
115
|
-
message,
|
|
116
|
-
okButtonText,
|
|
117
|
-
cancelButtonText,
|
|
118
|
-
confirmCompletion,
|
|
119
|
-
cancelCompletion,
|
|
120
|
-
}: CustomConfirmationDialog): void => {
|
|
121
|
-
if (isWeb()) {
|
|
122
|
-
if (cancelCompletion) {
|
|
123
|
-
handleCustomDialog({
|
|
124
|
-
messages: {
|
|
125
|
-
title,
|
|
126
|
-
message,
|
|
127
|
-
okButtonText,
|
|
128
|
-
cancelButtonText,
|
|
129
|
-
},
|
|
130
|
-
confirmCompletion,
|
|
131
|
-
cancelCompletion,
|
|
132
|
-
});
|
|
133
|
-
} else {
|
|
134
|
-
showWebDialog({ message, confirmCompletion, cancelCompletion });
|
|
135
|
-
}
|
|
136
|
-
} else {
|
|
137
|
-
showNativeDialog({
|
|
138
|
-
title,
|
|
139
|
-
message,
|
|
140
|
-
okButtonText,
|
|
141
|
-
cancelButtonText,
|
|
142
|
-
confirmCompletion,
|
|
143
|
-
cancelCompletion,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
// #endregion "Confirmation Dialog"
|
|
1
|
+
export { showAlertDialog, showConfirmationDialog } from "./alert";
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`AnalyticsManager - with undefined Native Module doesn't crash when calling the methods 1`] = `
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
[
|
|
5
|
+
[
|
|
6
|
+
{
|
|
7
7
|
"message": "Analytics Bridge is missing - no event will be sent",
|
|
8
8
|
},
|
|
9
9
|
],
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
[
|
|
11
|
+
{
|
|
12
12
|
"message": "Analytics Bridge is missing - no event will be sent",
|
|
13
13
|
},
|
|
14
14
|
],
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
[
|
|
16
|
+
{
|
|
17
17
|
"message": "Analytics Bridge is missing - no event will be sent",
|
|
18
18
|
},
|
|
19
19
|
],
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
[
|
|
21
|
+
{
|
|
22
22
|
"message": "Analytics Bridge is missing - no event will be sent",
|
|
23
23
|
},
|
|
24
24
|
],
|
|
@@ -2,7 +2,7 @@ import * as R from "ramda";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
|
|
4
4
|
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
5
|
-
import { useScreenContext } from "@applicaster/zapp-react-native-utils/reactHooks/screen";
|
|
5
|
+
import { useScreenContext } from "@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext";
|
|
6
6
|
|
|
7
7
|
import { getAnalyticsScreenPropertiesFromScreenData } from "@applicaster/zapp-react-native-utils/analyticsUtils/currentScreenProperities";
|
|
8
8
|
import { useAnalytics } from "@applicaster/zapp-react-native-utils/analyticsUtils";
|
|
@@ -16,7 +16,7 @@ const BASE_HOOK_PROPERTIES = ["screen_id", "identifier", "weight"];
|
|
|
16
16
|
* @returns {number} index
|
|
17
17
|
*/
|
|
18
18
|
const hookState: (
|
|
19
|
-
arg0: typeof HOOKS_EVENTS[keyof typeof HOOKS_EVENTS]
|
|
19
|
+
arg0: (typeof HOOKS_EVENTS)[keyof typeof HOOKS_EVENTS]
|
|
20
20
|
) => number = R.indexOf(R.__, R.values(HOOKS_EVENTS));
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -62,7 +62,7 @@ export class Hook implements HookInterface {
|
|
|
62
62
|
* @param {Array<Any>} args variadic arguments to invoke the handler with
|
|
63
63
|
*/
|
|
64
64
|
setStateAndNotify(
|
|
65
|
-
event: typeof HOOKS_EVENTS[keyof typeof HOOKS_EVENTS],
|
|
65
|
+
event: (typeof HOOKS_EVENTS)[keyof typeof HOOKS_EVENTS],
|
|
66
66
|
...args
|
|
67
67
|
) {
|
|
68
68
|
this.state = hookState(event);
|
|
@@ -2,27 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`Hook Hook Properties has all the hook properties 1`] = `
|
|
4
4
|
Hook {
|
|
5
|
-
"advertising":
|
|
6
|
-
"general":
|
|
5
|
+
"advertising": {},
|
|
6
|
+
"general": {
|
|
7
7
|
"allow_screen_plugin_presentation": true,
|
|
8
8
|
"is_flow_blocker": true,
|
|
9
9
|
},
|
|
10
|
-
"hooks":
|
|
10
|
+
"hooks": [],
|
|
11
11
|
"id": "A1234",
|
|
12
12
|
"identifier": "hook_screen",
|
|
13
13
|
"lastHook": true,
|
|
14
|
-
"manager":
|
|
14
|
+
"manager": {
|
|
15
15
|
"executeHook": [MockFunction],
|
|
16
16
|
"presentScreenHook": [MockFunction],
|
|
17
|
-
"subscriber":
|
|
17
|
+
"subscriber": {
|
|
18
18
|
"invokeHandler": [MockFunction],
|
|
19
19
|
},
|
|
20
20
|
},
|
|
21
21
|
"name": "Hook Screen",
|
|
22
|
-
"navigations":
|
|
22
|
+
"navigations": [],
|
|
23
23
|
"screen_id": "A1234",
|
|
24
24
|
"state": 0,
|
|
25
|
-
"styles":
|
|
25
|
+
"styles": {},
|
|
26
26
|
"type": "hook_screen",
|
|
27
27
|
"weight": 1,
|
|
28
28
|
}
|