@applicaster/zapp-react-native-utils 13.0.0-alpha.8532113155 → 13.0.0-alpha.9103242840

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) {
@@ -28,7 +28,6 @@ exports[`focusManager should be defined 1`] = `
28
28
  "moveFocus": [Function],
29
29
  "on": [Function],
30
30
  "press": [Function],
31
- "pressIn": [Function],
32
31
  "pressOut": [Function],
33
32
  "recoverFocus": [Function],
34
33
  "register": [Function],
@@ -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 };
@@ -345,14 +346,6 @@ export const focusManager = (function () {
345
346
  });
346
347
  }
347
348
 
348
- function pressIn() {
349
- const currentFocusable = getCurrentFocus();
350
-
351
- if (currentFocusable) {
352
- currentFocusable.pressIn(null);
353
- }
354
- }
355
-
356
349
  /**
357
350
  * calls the `press` method on the current focus component
358
351
  * @public
@@ -484,7 +477,7 @@ export const focusManager = (function () {
484
477
  function isCurrentFocusOnTheTopScreen() {
485
478
  const routes = R.pathOr([], ["root", "children"], focusableTree);
486
479
 
487
- if (currentFocusNode && routes.length <= 1) {
480
+ if (routes.length <= 1) {
488
481
  // there is only one or zero routes
489
482
  return true;
490
483
  }
@@ -560,7 +553,6 @@ export const focusManager = (function () {
560
553
  invokeHandler,
561
554
  removeHandler,
562
555
  longPress,
563
- pressIn,
564
556
  pressOut,
565
557
  enableFocus,
566
558
  setInitialFocus,
@@ -77,22 +77,13 @@ export class ClosedCaptioningManager {
77
77
 
78
78
  private constructor() {
79
79
  this.initialize();
80
-
81
- window["vizioDebug"] = {
82
- setCCEnabled: (isCCEnabled: boolean) => {
83
- this.ccState$.next(isCCEnabled);
84
- },
85
- };
86
80
  }
87
81
 
88
82
  static getInstance(): ClosedCaptioningManager {
89
83
  if (!ClosedCaptioningManager.ccManagerInstance) {
90
- log_debug("ClosedCaptioningManager: Creating new instance");
91
84
  ClosedCaptioningManager.ccManagerInstance = new ClosedCaptioningManager();
92
85
  }
93
86
 
94
- log_debug("ClosedCaptioningManager: Returning existing instance");
95
-
96
87
  return ClosedCaptioningManager.ccManagerInstance;
97
88
  }
98
89
 
@@ -101,41 +92,23 @@ export class ClosedCaptioningManager {
101
92
  PLATFORM_KEYS.deviceClosedCaptioningEnabled
102
93
  );
103
94
 
104
- if (existingState !== null) {
105
- log_debug(
106
- `ClosedCaptioningManager: Setting initial state to ${existingState}`
107
- );
95
+ log_debug("Initializing closed captioning manager", { existingState });
108
96
 
97
+ if (existingState !== null) {
109
98
  this.ccState$.next(existingState === "true" || existingState === true);
110
- } else {
111
- log_debug("ClosedCaptioningManager: No existing state found");
112
99
  }
113
100
 
114
101
  if (hasVizioAPIs()) {
115
- log_debug("ClosedCaptioningManager: Setting closed captioning handler");
116
-
117
102
  window.VIZIO!.setClosedCaptionHandler((isCCEnabled) => {
118
- log_debug(
119
- "ClosedCaptioningManager: There was a change in the CC state",
120
- { isCCEnabled }
121
- );
103
+ log_debug("CC state changed", { isCCEnabled });
122
104
 
123
105
  sessionStorage.setItem(
124
106
  PLATFORM_KEYS.deviceClosedCaptioningEnabled,
125
107
  isCCEnabled
126
108
  );
127
109
 
128
- log_debug(
129
- "ClosedCaptioningManager: Saved CC state to session storage",
130
- { isCCEnabled }
131
- );
132
-
133
110
  this.ccState$.next(isCCEnabled);
134
111
  });
135
- } else {
136
- log_debug(
137
- "ClosedCaptioningManager: Vizio APIs are not available, skipping setup"
138
- );
139
112
  }
140
113
  }
141
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
+ });