react-native-ios-alarmkit
Version:
React Native wrapper for iOS AlarmKit framework
133 lines (132 loc) • 3.72 kB
JavaScript
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(),
};