UNPKG

react-native-tvfocus

Version:

React Native tvOS and Android TV library to improve focus management with multiple screens.

41 lines (40 loc) 1.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.withFocusScreen = void 0; const React = require("react"); const react_1 = require("react"); const focus_manager_1 = require("./focus-manager"); const _FocusContext = function FocusContext(props) { const [focus] = react_1.useState(() => new focus_manager_1.default()); const [context, setContext] = react_1.useState(() => ({ focus, active: props.active })); const [, forceUpdate] = react_1.useReducer(a => !a, false); react_1.useEffect(() => { focus.forceUpdate = forceUpdate; }, [focus, forceUpdate]); react_1.useEffect(() => { focus.focusFirstIfNoDefault(); }, [focus]); if (focus.active && !props.active) { focus.willBecomeInactive(); // @ts-expect-error focus.active = false; setContext({ focus, active: false }); } else if (!focus.active && props.active) { focus.willBecomeActive(); // @ts-expect-error focus.active = true; setContext({ focus, active: true }); } return React.createElement(focus_manager_1.FocusManagerContext.Provider, { value: context }, props.children); }; const FocusContext = React.memo(_FocusContext); exports.default = FocusContext; function withFocusScreen(component) { const { useIsFocused } = require('@react-navigation/native'); return function FocusScreen(props) { const active = useIsFocused(); return React.createElement(FocusContext, { active: active }, React.createElement(component, props)); }; } exports.withFocusScreen = withFocusScreen;