react-native-healthkit-bridge
Version:
A comprehensive React Native bridge for Apple HealthKit with TypeScript support, advanced authorization, and flexible data queries
66 lines (65 loc) • 2.11 kB
JavaScript
import { NativeModules, Platform } from 'react-native';
import { NativeProvider } from './NativeProvider';
export class ProviderFactory {
constructor() { }
static getInstance() {
if (!ProviderFactory.instance) {
ProviderFactory.instance = new ProviderFactory();
}
return ProviderFactory.instance;
}
createProvider(config) {
try {
return this.createNativeProvider(config);
}
catch (error) {
console.error('Error creating NativeProvider:', error);
throw error;
}
}
createNativeProvider(config) {
try {
// Check if native module is available
if (!NativeModules.HealthKitBridge) {
throw new Error('Native HealthKitBridge module not found. Check if pods were installed correctly.');
}
return new NativeProvider(config);
}
catch (error) {
console.error('Error creating NativeProvider:', error);
throw error;
}
}
getAvailableProviders() {
const providers = [];
if (Platform.OS === 'ios' && NativeModules.HealthKitBridge) {
providers.push('native');
}
return providers;
}
getDefaultProvider() {
const availableProviders = this.getAvailableProviders();
if (availableProviders.includes('native')) {
return 'native';
}
throw new Error('NativeProvider is not available. Check if running on physical iOS device and if pods were installed.');
}
createDefaultProvider(config) {
return this.createProvider(config);
}
isNativeAvailable() {
return Platform.OS === 'ios' && (!!NativeModules.HealthKitBridge);
}
getProviderInfo() {
return {
name: 'NativeProvider',
version: '1.0.0',
available: this.isNativeAvailable()
};
}
getAllProvidersInfo() {
return [
this.getProviderInfo()
].map((info) => (Object.assign({ type: 'native' }, info)));
}
}