@applicaster/zapp-react-native-utils 13.0.0-alpha.1488035644 → 13.0.0-alpha.1605643562
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/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +1 -0
- package/appUtils/focusManager/index.ts +9 -0
- package/appUtils/platform/platformUtils.ts +30 -3
- package/equalUtils/index.ts +10 -3
- package/manifestUtils/__tests__/createConfig.test.js +0 -2
- package/package.json +2 -2
- package/reactHooks/layout/useDimensions/useDimensions.ts +8 -0
- package/reactHooks/navigation/useGetTabBarHeight.ts +1 -3
- package/reactHooks/state/useRefWithInitialValue.ts +14 -0
- package/reactHooks/state/useStateFromSubscribe.ts +23 -0
- package/screenState/index.ts +24 -10
|
@@ -345,6 +345,14 @@ export const focusManager = (function () {
|
|
|
345
345
|
});
|
|
346
346
|
}
|
|
347
347
|
|
|
348
|
+
function pressIn() {
|
|
349
|
+
const currentFocusable = getCurrentFocus();
|
|
350
|
+
|
|
351
|
+
if (currentFocusable) {
|
|
352
|
+
currentFocusable.pressIn(null);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
348
356
|
/**
|
|
349
357
|
* calls the `press` method on the current focus component
|
|
350
358
|
* @public
|
|
@@ -552,6 +560,7 @@ export const focusManager = (function () {
|
|
|
552
560
|
invokeHandler,
|
|
553
561
|
removeHandler,
|
|
554
562
|
longPress,
|
|
563
|
+
pressIn,
|
|
555
564
|
pressOut,
|
|
556
565
|
enableFocus,
|
|
557
566
|
setInitialFocus,
|
|
@@ -77,13 +77,22 @@ 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
|
+
};
|
|
80
86
|
}
|
|
81
87
|
|
|
82
88
|
static getInstance(): ClosedCaptioningManager {
|
|
83
89
|
if (!ClosedCaptioningManager.ccManagerInstance) {
|
|
90
|
+
log_debug("ClosedCaptioningManager: Creating new instance");
|
|
84
91
|
ClosedCaptioningManager.ccManagerInstance = new ClosedCaptioningManager();
|
|
85
92
|
}
|
|
86
93
|
|
|
94
|
+
log_debug("ClosedCaptioningManager: Returning existing instance");
|
|
95
|
+
|
|
87
96
|
return ClosedCaptioningManager.ccManagerInstance;
|
|
88
97
|
}
|
|
89
98
|
|
|
@@ -92,23 +101,41 @@ export class ClosedCaptioningManager {
|
|
|
92
101
|
PLATFORM_KEYS.deviceClosedCaptioningEnabled
|
|
93
102
|
);
|
|
94
103
|
|
|
95
|
-
log_debug("Initializing closed captioning manager", { existingState });
|
|
96
|
-
|
|
97
104
|
if (existingState !== null) {
|
|
105
|
+
log_debug(
|
|
106
|
+
`ClosedCaptioningManager: Setting initial state to ${existingState}`
|
|
107
|
+
);
|
|
108
|
+
|
|
98
109
|
this.ccState$.next(existingState === "true" || existingState === true);
|
|
110
|
+
} else {
|
|
111
|
+
log_debug("ClosedCaptioningManager: No existing state found");
|
|
99
112
|
}
|
|
100
113
|
|
|
101
114
|
if (hasVizioAPIs()) {
|
|
115
|
+
log_debug("ClosedCaptioningManager: Setting closed captioning handler");
|
|
116
|
+
|
|
102
117
|
window.VIZIO!.setClosedCaptionHandler((isCCEnabled) => {
|
|
103
|
-
log_debug(
|
|
118
|
+
log_debug(
|
|
119
|
+
"ClosedCaptioningManager: There was a change in the CC state",
|
|
120
|
+
{ isCCEnabled }
|
|
121
|
+
);
|
|
104
122
|
|
|
105
123
|
sessionStorage.setItem(
|
|
106
124
|
PLATFORM_KEYS.deviceClosedCaptioningEnabled,
|
|
107
125
|
isCCEnabled
|
|
108
126
|
);
|
|
109
127
|
|
|
128
|
+
log_debug(
|
|
129
|
+
"ClosedCaptioningManager: Saved CC state to session storage",
|
|
130
|
+
{ isCCEnabled }
|
|
131
|
+
);
|
|
132
|
+
|
|
110
133
|
this.ccState$.next(isCCEnabled);
|
|
111
134
|
});
|
|
135
|
+
} else {
|
|
136
|
+
log_debug(
|
|
137
|
+
"ClosedCaptioningManager: Vizio APIs are not available, skipping setup"
|
|
138
|
+
);
|
|
112
139
|
}
|
|
113
140
|
}
|
|
114
141
|
|
package/equalUtils/index.ts
CHANGED
|
@@ -49,9 +49,16 @@ export const isEqual =
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
if (compareRemainingKeysBySameValue) {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
const allKeys = new Set([...Object.keys(prev), ...Object.keys(next)]);
|
|
53
|
+
|
|
54
|
+
const declaredKeys = new Set([
|
|
55
|
+
...byValue,
|
|
56
|
+
...byReference,
|
|
57
|
+
...byComparator.keys,
|
|
58
|
+
]);
|
|
59
|
+
|
|
60
|
+
const undeclaredKeys = Array.from(allKeys).filter(
|
|
61
|
+
(key) => !declaredKeys.has(key)
|
|
55
62
|
);
|
|
56
63
|
|
|
57
64
|
const isRestKeysEqualAllBySameValue = undeclaredKeys.every((key) =>
|
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.1605643562",
|
|
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.1605643562",
|
|
32
32
|
"buffer": "^5.2.1",
|
|
33
33
|
"camelize": "^1.0.0",
|
|
34
34
|
"create-react-context": "^0.2.3",
|
|
@@ -52,6 +52,14 @@ export const useDimensions: UseDimensions = (
|
|
|
52
52
|
? { fullDimensions }
|
|
53
53
|
: { ...fullDimensions };
|
|
54
54
|
|
|
55
|
+
if (options.updateForInactiveScreens === undefined) {
|
|
56
|
+
options.updateForInactiveScreens = true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (options.fullDimensions === undefined) {
|
|
60
|
+
options.fullDimensions = false;
|
|
61
|
+
}
|
|
62
|
+
|
|
55
63
|
const [dimensions, setDimensions] = useState(getInitialDimensions(context));
|
|
56
64
|
const deviceInfo = useRef(getDeviceInfo(dimensions, appData));
|
|
57
65
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
2
|
-
|
|
3
1
|
import { platformSelect } from "../../reactUtils";
|
|
4
2
|
|
|
5
3
|
const TAB_BAR_HEIGHT_IOS = 49;
|
|
@@ -7,6 +5,6 @@ const TAB_BAR_HEIGHT_ANDROID = 56;
|
|
|
7
5
|
|
|
8
6
|
export const useGetTabBarHeight = () =>
|
|
9
7
|
platformSelect({
|
|
10
|
-
ios: TAB_BAR_HEIGHT_IOS
|
|
8
|
+
ios: TAB_BAR_HEIGHT_IOS,
|
|
11
9
|
android: TAB_BAR_HEIGHT_ANDROID,
|
|
12
10
|
}) as number;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* returns a ref with an initial value that is lazily evaluated once
|
|
5
|
+
* */
|
|
6
|
+
export const useRefWithInitialValue = <T>(initialValueGetter: () => T) => {
|
|
7
|
+
const ref = React.useRef<T>(null);
|
|
8
|
+
|
|
9
|
+
if (ref.current === null) {
|
|
10
|
+
ref.current = initialValueGetter();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return ref;
|
|
14
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import type { Subject } from "rxjs";
|
|
3
|
+
|
|
4
|
+
export const useStateFromSubscribe = <T, U>(
|
|
5
|
+
subject: Subject<T>,
|
|
6
|
+
onUpdate: (
|
|
7
|
+
observerValue: T,
|
|
8
|
+
next: React.Dispatch<React.SetStateAction<U>>
|
|
9
|
+
) => void,
|
|
10
|
+
initialValue: U
|
|
11
|
+
) => {
|
|
12
|
+
const [state, setState] = useState<U>(initialValue);
|
|
13
|
+
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const subscription = subject.subscribe((observer) =>
|
|
16
|
+
onUpdate(observer, setState)
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
return () => subscription.unsubscribe();
|
|
20
|
+
}, [subject]);
|
|
21
|
+
|
|
22
|
+
return state;
|
|
23
|
+
};
|
package/screenState/index.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { create } from "zustand";
|
|
2
2
|
import { produce } from "immer";
|
|
3
3
|
import { path } from "ramda";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import { useShallow } from "zustand/react/shallow";
|
|
4
6
|
|
|
5
7
|
type ScreenState = {
|
|
6
8
|
selectedEntry: {
|
|
@@ -18,6 +20,8 @@ type ScreenStore = {
|
|
|
18
20
|
setSelectedEntry: (screenId: string, entryId: string) => void;
|
|
19
21
|
};
|
|
20
22
|
|
|
23
|
+
type SetSelectedEntry = (screenId: string, entryId: string) => void;
|
|
24
|
+
|
|
21
25
|
const useScreenStore = create<ScreenStore>((set) => ({
|
|
22
26
|
screens: screensInitialState,
|
|
23
27
|
setSelectedEntry: (screenId, entryId) =>
|
|
@@ -35,17 +39,27 @@ const useScreenStore = create<ScreenStore>((set) => ({
|
|
|
35
39
|
export function useScreenState(
|
|
36
40
|
screenId: ScreenId
|
|
37
41
|
): null | { screen: ScreenState; setSelectedEntry: (entryId: string) => void } {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
) as ScreenState;
|
|
42
|
+
const screenState = useScreenStore<ScreenState>(
|
|
43
|
+
useShallow(path(["screens", screenId]))
|
|
44
|
+
);
|
|
42
45
|
|
|
43
|
-
const setSelectedEntry = useScreenStore(
|
|
46
|
+
const setSelectedEntry = useScreenStore<SetSelectedEntry>(
|
|
47
|
+
useShallow(path(["setSelectedEntry"]))
|
|
48
|
+
);
|
|
44
49
|
|
|
45
|
-
|
|
50
|
+
const memoizedSetSelectedEntry = React.useCallback(
|
|
51
|
+
(entryId) => setSelectedEntry(screenId, entryId),
|
|
52
|
+
[screenId, setSelectedEntry]
|
|
53
|
+
);
|
|
46
54
|
|
|
47
|
-
return
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
return React.useMemo(
|
|
56
|
+
() =>
|
|
57
|
+
!screenId
|
|
58
|
+
? null
|
|
59
|
+
: {
|
|
60
|
+
screen: screenState,
|
|
61
|
+
setSelectedEntry: memoizedSetSelectedEntry,
|
|
62
|
+
},
|
|
63
|
+
[screenId, screenState]
|
|
64
|
+
);
|
|
51
65
|
}
|