UNPKG

react-native-ios-alarmkit

Version:
133 lines (132 loc) 3.72 kB
import { NitroModules } from 'react-native-nitro-modules'; import { AlarmKitError, AlarmKitErrorCode } from './types'; const AlarmKitModule = NitroModules.createHybridObject('AlarmKit'); class AlarmKitManagerClass { get isSupported() { return AlarmKitModule.isSupported; } async getAuthorizationState() { try { const state = await AlarmKitModule.getAuthorizationState(); return state; } catch (error) { throw AlarmKitError.fromError(error); } } async requestAuthorization() { try { return await AlarmKitModule.requestAuthorization(); } catch (error) { throw AlarmKitError.fromError(error); } } async schedule(id, configuration) { try { const json = await AlarmKitModule.schedule(id, JSON.stringify(configuration)); if (!json) return null; return JSON.parse(json); } catch (error) { throw AlarmKitError.fromError(error); } } async cancel(id) { try { return await AlarmKitModule.cancel(id); } catch (error) { throw AlarmKitError.fromError(error); } } async stop(id) { try { return await AlarmKitModule.stop(id); } catch (error) { throw AlarmKitError.fromError(error); } } async pause(id) { try { return await AlarmKitModule.pause(id); } catch (error) { throw AlarmKitError.fromError(error); } } async resume(id) { try { return await AlarmKitModule.resume(id); } catch (error) { throw AlarmKitError.fromError(error); } } async countdown(id) { try { return await AlarmKitModule.countdown(id); } catch (error) { throw AlarmKitError.fromError(error); } } async getAlarms() { try { const json = await AlarmKitModule.getAlarms(); return JSON.parse(json); } catch (error) { throw AlarmKitError.fromError(error); } } addAlarmUpdatesListener(callback) { const id = AlarmKitModule.addAlarmsListener((json) => { callback(JSON.parse(json)); }); return { remove: () => AlarmKitModule.removeAlarmsListener(id), }; } addAuthorizationUpdatesListener(callback) { const id = AlarmKitModule.addAuthorizationListener((state) => { callback(state); }); return { remove: () => AlarmKitModule.removeAuthorizationListener(id), }; } async scheduleOrReschedule(id, configuration) { try { await this.cancel(id); } catch (error) { if (error instanceof AlarmKitError) { if (error.code !== AlarmKitErrorCode.ALARM_NOT_FOUND && error.code !== AlarmKitErrorCode.UNKNOWN) { throw error; } } } return this.schedule(id, configuration); } async cancelIfExists(id) { try { await this.cancel(id); } catch (error) { if (error instanceof AlarmKitError) { if (error.code === AlarmKitErrorCode.ALARM_NOT_FOUND || error.code === AlarmKitErrorCode.UNKNOWN) { return; } } throw error; } } } export const AlarmKitManager = { shared: new AlarmKitManagerClass(), };