import { createContext, type ReactNode, useContext, useEffect } from "react"; import { NitroModules } from "react-native-nitro-modules"; import type { OmniPlayerFactory } from "./specs/omni-player.nitro"; import type { OmniPlayer } from "./types/player"; import type { Source } from "./types/source"; import { useLazyRef } from "./utils/lazy-ref"; const ProviderFactory = NitroModules.createHybridObject( "OmniPlayerFactory", ); const PlayerCtx = createContext(null!); export const OmniProvider = ({ children, source, }: { source: Source; children: ReactNode; }) => { const player = useLazyRef(() => ProviderFactory.createPlayer(source)); useEffect(() => { player.current.source = source; }, [source]); return ( {children} ); }; export const usePlayer = () => { return useContext(PlayerCtx); };