react-airplay
Version:
Airplay bridge for React Native
34 lines (32 loc) • 1.96 kB
JavaScript
import { useEffect, useState } from 'react';
import { AirplayConnectivityContext, ExternalPlaybackAvailabilityContext, onAvAudioSessionRoutesChanged, onExternalPlaybackAvailabilityChanged } from './airplayModule';
export const useExternalPlaybackAvailability = options => {
var _options$useCachedVal2;
const [isExternalPlaybackAvailable, setIsExternalPlaybackAvailable] = useState(false);
useEffect(() => {
var _options$useCachedVal;
if ((_options$useCachedVal = options === null || options === void 0 ? void 0 : options.useCachedValue) !== null && _options$useCachedVal !== void 0 ? _options$useCachedVal : false) return;
const subscription = onExternalPlaybackAvailabilityChanged(setIsExternalPlaybackAvailable);
ExternalPlaybackAvailabilityContext === null || ExternalPlaybackAvailabilityContext === void 0 ? void 0 : ExternalPlaybackAvailabilityContext.fetchExternalPlaybackAvailability().then(setIsExternalPlaybackAvailable);
return subscription.remove.bind(subscription);
}, [(_options$useCachedVal2 = options === null || options === void 0 ? void 0 : options.useCachedValue) !== null && _options$useCachedVal2 !== void 0 ? _options$useCachedVal2 : false]);
return isExternalPlaybackAvailable;
};
export const useAirplayConnectivity = () => {
const routes = useAirplayRoutes();
return routes.length > 0;
};
export const useAirplayRoutes = () => {
const routes = useAvAudioSessionRoutes();
return routes.filter(route => route.portType === 'AirPlay');
};
export const useAvAudioSessionRoutes = () => {
const [routes, setRoutes] = useState([]);
useEffect(() => {
const subscription = onAvAudioSessionRoutesChanged(setRoutes);
AirplayConnectivityContext === null || AirplayConnectivityContext === void 0 ? void 0 : AirplayConnectivityContext.fetchAvAudioSessionRoutes().then(setRoutes);
return subscription.remove.bind(subscription);
}, []);
return routes;
};
//# sourceMappingURL=hooks.js.map