@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
82 lines (65 loc) • 2.34 kB
text/typescript
import { useEffect, useMemo, useState } from "react";
import { AccessibilityManager } from "./index";
/**
* This hook is used to instantiate the accessibility manager and update localizations used by the class.
* If the plugin config is not provided or it does not contain any localizations, the accessibility manager will not be updated.
* We use the plugin configuration because it offers a flattened structure where we can easily access the accessibility labels and hints
* i.e. pluginConfiguration = {
* accessibility_close_label: "Close",
* accessibility_close_hint: "Press here to close",
* }
*/
export const useAccessibilityManager = (
pluginConfiguration: Record<string, any> = {}
) => {
const accessibilityManager = useMemo(() => {
return AccessibilityManager.getInstance();
}, []);
useEffect(() => {
if (pluginConfiguration) {
accessibilityManager.updateLocalizations(pluginConfiguration);
}
}, [pluginConfiguration, accessibilityManager]);
return accessibilityManager;
};
export const useInitialAnnouncementReady = (
accessibilityManager: AccessibilityManager
) => {
const [isReady, setIsReady] = useState(
accessibilityManager.isInitialPlayerAnnouncementReady
);
useEffect(() => {
const subscription = accessibilityManager
.getInitialAnnouncementReadyObservable()
.subscribe(setIsReady);
return () => subscription.unsubscribe();
}, [accessibilityManager]);
return isReady;
};
export const useAnnouncementActive = (
accessibilityManager: AccessibilityManager
) => {
const [isActive, setIsActive] = useState(false);
useEffect(() => {
const subscription = accessibilityManager
.getTTSStateObservable()
.subscribe(setIsActive);
return () => subscription.unsubscribe();
}, [accessibilityManager]);
return isActive;
};
export const useAccessibilityState = (
pluginConfiguration: Record<string, any> = {}
) => {
const accessibilityManager = useAccessibilityManager(pluginConfiguration);
const [state, setState] = useState<AccessibilityState>(
accessibilityManager.getState()
);
useEffect(() => {
const subscription = accessibilityManager
.getStateAsObservable()
.subscribe(setState);
return () => subscription.unsubscribe();
}, [accessibilityManager]);
return state;
};