@applicaster/zapp-react-native-utils 13.0.0-alpha.1150285364 → 13.0.0-alpha.1212224153

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.
@@ -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);
@@ -103,7 +103,7 @@ export interface Hook<T extends HookModule = HookModule> {
103
103
  identifier: string;
104
104
  configuration: T["configuration"];
105
105
  setStateAndNotify(
106
- event: (typeof HOOKS_EVENTS)[keyof typeof HOOKS_EVENTS],
106
+ event: typeof HOOKS_EVENTS[keyof typeof HOOKS_EVENTS],
107
107
  opts: {
108
108
  error?: typeof Error;
109
109
  route?: string;
@@ -112,7 +112,7 @@ export interface Hook<T extends HookModule = HookModule> {
112
112
  }
113
113
  );
114
114
  general?: {
115
- transition_type: (typeof HOOKS_EVENTS)[keyof typeof HOOKS_EVENTS];
115
+ transition_type: typeof HOOKS_EVENTS[keyof typeof HOOKS_EVENTS];
116
116
  allow_screen_plugin_presentation: boolean;
117
117
  is_flow_blocker: boolean;
118
118
  };
@@ -42,16 +42,12 @@ export const resolveObjectValues = async (
42
42
 
43
43
  const resolvedEntries = await Promise.all(
44
44
  entries.map(async ([key, value]) => {
45
- if (typeof value !== "string") {
46
- return [key, value];
47
- }
45
+ const regex = /@{([^/]+)\/([^}]*)}/;
48
46
 
49
- if (!value.startsWith("@")) {
47
+ if (typeof value !== "string") {
50
48
  return [key, value];
51
49
  }
52
50
 
53
- const regex = /@{([^/]+)\/([^}]*)}/;
54
-
55
51
  const match = (value as string).match(regex);
56
52
 
57
53
  if (match) {
@@ -13,7 +13,6 @@ import {
13
13
  import { subscriber } from "../../functionUtils";
14
14
  import { coreLogger } from "../../logger";
15
15
  import { ACTION } from "./utils/enums";
16
-
17
16
  const logger = coreLogger.addSubsystem("focusManager");
18
17
 
19
18
  const isFocusEnabled = (focusableItem): boolean => {
@@ -326,6 +325,8 @@ export const focusManager = (function () {
326
325
  },
327
326
  });
328
327
 
328
+ currentFocusNode = focusCandidate;
329
+
329
330
  focusableItem && setFocus(focusCandidate.id, null);
330
331
 
331
332
  return { success: true };
@@ -476,7 +477,7 @@ export const focusManager = (function () {
476
477
  function isCurrentFocusOnTheTopScreen() {
477
478
  const routes = R.pathOr([], ["root", "children"], focusableTree);
478
479
 
479
- if (currentFocusNode && routes.length <= 1) {
480
+ if (routes.length <= 1) {
480
481
  // there is only one or zero routes
481
482
  return true;
482
483
  }
@@ -81,12 +81,9 @@ export class ClosedCaptioningManager {
81
81
 
82
82
  static getInstance(): ClosedCaptioningManager {
83
83
  if (!ClosedCaptioningManager.ccManagerInstance) {
84
- log_debug("ClosedCaptioningManager: Creating new instance");
85
84
  ClosedCaptioningManager.ccManagerInstance = new ClosedCaptioningManager();
86
85
  }
87
86
 
88
- log_debug("ClosedCaptioningManager: Returning existing instance");
89
-
90
87
  return ClosedCaptioningManager.ccManagerInstance;
91
88
  }
92
89
 
@@ -95,41 +92,23 @@ export class ClosedCaptioningManager {
95
92
  PLATFORM_KEYS.deviceClosedCaptioningEnabled
96
93
  );
97
94
 
98
- if (existingState !== null) {
99
- log_debug(
100
- `ClosedCaptioningManager: Setting initial state to ${existingState}`
101
- );
95
+ log_debug("Initializing closed captioning manager", { existingState });
102
96
 
97
+ if (existingState !== null) {
103
98
  this.ccState$.next(existingState === "true" || existingState === true);
104
- } else {
105
- log_debug("ClosedCaptioningManager: No existing state found");
106
99
  }
107
100
 
108
101
  if (hasVizioAPIs()) {
109
- log_debug("ClosedCaptioningManager: Setting closed captioning handler");
110
-
111
102
  window.VIZIO!.setClosedCaptionHandler((isCCEnabled) => {
112
- log_debug(
113
- "ClosedCaptioningManager: There was a change in the CC state",
114
- { isCCEnabled }
115
- );
103
+ log_debug("CC state changed", { isCCEnabled });
116
104
 
117
105
  sessionStorage.setItem(
118
106
  PLATFORM_KEYS.deviceClosedCaptioningEnabled,
119
107
  isCCEnabled
120
108
  );
121
109
 
122
- log_debug(
123
- "ClosedCaptioningManager: Saved CC state to session storage",
124
- { isCCEnabled }
125
- );
126
-
127
110
  this.ccState$.next(isCCEnabled);
128
111
  });
129
- } else {
130
- log_debug(
131
- "ClosedCaptioningManager: Vizio APIs are not available, skipping setup"
132
- );
133
112
  }
134
113
  }
135
114
 
@@ -154,8 +154,8 @@ export class Player {
154
154
  this.isSeeking()
155
155
  ? this.playerState.seekPosition
156
156
  : this.playerState.adState
157
- ? this.playerState.adState.adPosition
158
- : this.playerState.contentPosition;
157
+ ? this.playerState.adState.adPosition
158
+ : this.playerState.contentPosition;
159
159
 
160
160
  getEntry = (): ZappEntry | null => this.entry;
161
161
 
@@ -1,4 +1,4 @@
1
- export { withTimeout, withTimeout$ } from "./withTimeout";
1
+ export { withTimeout } from "./withTimeout";
2
2
 
3
3
  export { onIdle } from "./onIdle";
4
4
 
@@ -1,20 +1,7 @@
1
- import { of, Observable } from "rxjs";
2
- import { delay } from "rxjs/operators";
3
-
4
- export const withTimeout = (timeout: number): Promise<void> => {
5
- return new Promise<void>((resolve) => {
1
+ export const withTimeout = (timeout: number) => {
2
+ return new Promise((resolve) => {
6
3
  setTimeout(() => {
7
4
  resolve(undefined);
8
5
  }, timeout);
9
6
  });
10
7
  };
11
-
12
- /**
13
- * Creates an observable that emits a single value after a specified timeout.
14
- *
15
- * @param timeout - The delay duration in milliseconds before emitting the value.
16
- * @returns An observable that emits `undefined` after the specified timeout.
17
- */
18
- export const withTimeout$ = (timeout: number): Observable<void> => {
19
- return of(undefined).pipe(delay(timeout));
20
- };
@@ -78,6 +78,8 @@ describe("createConfig", () => {
78
78
  extend: "styles",
79
79
  })(props);
80
80
 
81
+ console.log(mockGenerators.styles.mock.calls);
82
+
81
83
  expect(mockGenerators.styles).toBeCalledWith(props);
82
84
  });
83
85
 
@@ -0,0 +1,304 @@
1
+ // @ts-nocheck
2
+ import utils from "../utils";
3
+
4
+ describe("generateFontConfiguration", () => {
5
+ it("should generate default configuration for tvos", () => {
6
+ const expected = [
7
+ {
8
+ initial_value: 20,
9
+ label: "tvOS font Size",
10
+ key: "tvos_font_size",
11
+ type: "number_input",
12
+ },
13
+ {
14
+ initial_value: 40,
15
+ label: "tvOS line Height",
16
+ key: "tvos_line_height",
17
+ type: "number_input",
18
+ },
19
+ {
20
+ initial_value: 0.4,
21
+ label: "tvOS letter Spacing",
22
+ key: "tvos_letter_spacing",
23
+ type: "number_input",
24
+ },
25
+ ];
26
+
27
+ const platforms = {
28
+ tvos: "tvOS",
29
+ };
30
+
31
+ const generatedFontConfiguration =
32
+ utils.generateFontConfiguration(platforms);
33
+
34
+ expect(generatedFontConfiguration).toEqual(expected);
35
+ });
36
+
37
+ it("should generate default configuration for android_tv", () => {
38
+ const expected = [
39
+ {
40
+ initial_value: 20,
41
+ label: "Android TV font Size",
42
+ key: "android_tv_font_size",
43
+ type: "number_input",
44
+ },
45
+ {
46
+ initial_value: 40,
47
+ label: "Android TV line Height",
48
+ key: "android_tv_line_height",
49
+ type: "number_input",
50
+ },
51
+ {
52
+ initial_value: 0.4,
53
+ label: "Android TV letter Spacing",
54
+ key: "android_tv_letter_spacing",
55
+ type: "number_input",
56
+ },
57
+ ];
58
+
59
+ const platforms = {
60
+ android_tv: "Android TV",
61
+ };
62
+
63
+ const generatedFontConfiguration =
64
+ utils.generateFontConfiguration(platforms);
65
+
66
+ expect(generatedFontConfiguration).toEqual(expected);
67
+ });
68
+
69
+ it("should generate default configuration for lg_tv", () => {
70
+ const expected = [
71
+ {
72
+ initial_value: 20,
73
+ label: "LG TV font Size",
74
+ key: "lg_tv_font_size",
75
+ type: "number_input",
76
+ },
77
+ {
78
+ initial_value: 40,
79
+ label: "LG TV line Height",
80
+ key: "lg_tv_line_height",
81
+ type: "number_input",
82
+ },
83
+ {
84
+ initial_value: 0.4,
85
+ label: "LG TV letter Spacing",
86
+ key: "lg_tv_letter_spacing",
87
+ type: "number_input",
88
+ },
89
+ ];
90
+
91
+ const platforms = {
92
+ lg_tv: "LG TV",
93
+ };
94
+
95
+ const generatedFontConfiguration =
96
+ utils.generateFontConfiguration(platforms);
97
+
98
+ expect(generatedFontConfiguration).toEqual(expected);
99
+ });
100
+
101
+ it("should generate default configuration for samsung_tv", () => {
102
+ const expected = [
103
+ {
104
+ initial_value: 20,
105
+ label: "Samsung TV font Size",
106
+ key: "samsung_tv_font_size",
107
+ type: "number_input",
108
+ },
109
+ {
110
+ initial_value: 40,
111
+ label: "Samsung TV line Height",
112
+ key: "samsung_tv_line_height",
113
+ type: "number_input",
114
+ },
115
+ {
116
+ initial_value: 0.4,
117
+ label: "Samsung TV letter Spacing",
118
+ key: "samsung_tv_letter_spacing",
119
+ type: "number_input",
120
+ },
121
+ ];
122
+
123
+ const platforms = {
124
+ samsung_tv: "Samsung TV",
125
+ };
126
+
127
+ const generatedFontConfiguration =
128
+ utils.generateFontConfiguration(platforms);
129
+
130
+ expect(generatedFontConfiguration).toEqual(expected);
131
+ });
132
+ });
133
+
134
+ test("conditional_rule helper should return correct object", () => {
135
+ expect(utils.conditional_rule("a", "b")).toMatchObject({
136
+ key: "a",
137
+ condition_value: "b",
138
+ });
139
+ });
140
+
141
+ test("createConditionalConfig helper should return correct object", () => {
142
+ expect(
143
+ utils.createConditionalConfig([
144
+ ["a", "b"],
145
+ ["c", "d"],
146
+ ])
147
+ ).toEqual({
148
+ rules: "conditional",
149
+ conditional_fields: [
150
+ {
151
+ key: "a",
152
+ condition_value: "b",
153
+ },
154
+ {
155
+ key: "c",
156
+ condition_value: "d",
157
+ },
158
+ ],
159
+ });
160
+ });
161
+
162
+ test("conditional_horizontal_type should contain correct parameters", () => {
163
+ expect(
164
+ utils.conditional_horizontal_type_item_fixed.conditional_fields[0]
165
+ ).toMatchObject({
166
+ key: "styles/screen_picker_type",
167
+ condition_value: "horizontal",
168
+ });
169
+ });
170
+
171
+ test("conditional_vertical_type should contain correct parameters", () => {
172
+ expect(utils.conditional_vertical_type.conditional_fields[0]).toMatchObject({
173
+ key: "styles/screen_picker_type",
174
+ condition_value: "vertical",
175
+ });
176
+ });
177
+
178
+ test("conditional_horizontal_type_item_fixed should contain correct parameters", () => {
179
+ expect(
180
+ utils.conditional_horizontal_type_item_fixed.conditional_fields[0]
181
+ ).toMatchObject({
182
+ key: "styles/screen_picker_type",
183
+ condition_value: "horizontal",
184
+ });
185
+
186
+ expect(
187
+ utils.conditional_horizontal_type_item_fixed.conditional_fields[1]
188
+ ).toMatchObject({
189
+ key: "styles/screen_picker_item_size",
190
+ condition_value: "fixed",
191
+ });
192
+ });
193
+
194
+ test("conditional_horizontal_display_type_fixed should contain correct parameters", () => {
195
+ expect(
196
+ utils.conditional_horizontal_display_type_fixed.conditional_fields[0]
197
+ ).toMatchObject({
198
+ key: "styles/screen_picker_type",
199
+ condition_value: "horizontal",
200
+ });
201
+
202
+ expect(
203
+ utils.conditional_horizontal_display_type_fixed.conditional_fields[1]
204
+ ).toMatchObject({
205
+ key: "styles/screen_picker_horizontal_display_type",
206
+ condition_value: "fixed",
207
+ });
208
+ });
209
+
210
+ test("conditional_horizontal_display_type_fixed should contain correct parameters", () => {
211
+ expect(
212
+ utils.conditional_horizontal_asset_on.conditional_fields[0]
213
+ ).toMatchObject({
214
+ key: "styles/screen_picker_type",
215
+ condition_value: "horizontal",
216
+ });
217
+
218
+ expect(
219
+ utils.conditional_horizontal_asset_on.conditional_fields[1]
220
+ ).toMatchObject({
221
+ key: "styles/screen_picker_asset_switch",
222
+ condition_value: true,
223
+ });
224
+ });
225
+
226
+ describe("createVariationFields", () => {
227
+ const defaultInput = {
228
+ key: "somekey",
229
+ label: "default somekey label",
230
+ variants: [
231
+ {
232
+ initial_value: "a",
233
+ },
234
+ {
235
+ initial_value: "b",
236
+ label: "custom label",
237
+ },
238
+ ],
239
+ };
240
+
241
+ const config = utils.createVariationFields(defaultInput);
242
+
243
+ it("should return array containing object for conditional_vertical_type", () => {
244
+ expect(config[0].rules).toBe("conditional");
245
+
246
+ expect(config[0].conditional_fields).toEqual([
247
+ {
248
+ key: "styles/screen_picker_type",
249
+ condition_value: "vertical",
250
+ },
251
+ ]);
252
+
253
+ expect(config[0].type).toBe("number_input");
254
+ expect(config[0].key).toBe("screen_picker_vertical_somekey");
255
+ expect(config[0].label).toBe("default somekey label");
256
+ expect(config[0].initial_value).toBe("a");
257
+ });
258
+
259
+ it("should return array containing object for conditional_horizontal_type", () => {
260
+ expect(config[1].rules).toBe("conditional");
261
+
262
+ expect(config[1].conditional_fields).toEqual([
263
+ {
264
+ key: "styles/screen_picker_type",
265
+ condition_value: "horizontal",
266
+ },
267
+ ]);
268
+
269
+ expect(config[1].type).toBe("number_input");
270
+ expect(config[1].key).toBe("screen_picker_horizontal_somekey");
271
+ expect(config[1].label).toBe("custom label");
272
+ expect(config[1].initial_value).toBe("b");
273
+ });
274
+
275
+ it("should accept custom prefix (empty)", () => {
276
+ const config = utils.createVariationFields({
277
+ ...defaultInput,
278
+ prefix: "",
279
+ });
280
+
281
+ expect(config[0].key).toBe("vertical_somekey");
282
+ expect(config[1].key).toBe("horizontal_somekey");
283
+ });
284
+
285
+ it("should accept custom prefix (string)", () => {
286
+ const config = utils.createVariationFields({
287
+ ...defaultInput,
288
+ prefix: "string",
289
+ });
290
+
291
+ expect(config[0].key).toBe("string_vertical_somekey");
292
+ expect(config[1].key).toBe("string_horizontal_somekey");
293
+ });
294
+
295
+ it("should accept custom type (string)", () => {
296
+ const config = utils.createVariationFields({
297
+ ...defaultInput,
298
+ type: "text_input",
299
+ });
300
+
301
+ expect(config[0].type).toBe("text_input");
302
+ expect(config[1].type).toBe("text_input");
303
+ });
304
+ });