UNPKG

react-native-ios-alarmkit

Version:
146 lines (128 loc) 3.71 kB
import { AlarmKitManager } from './AlarmKitManager' import type { Alarm, AuthorizationState, Subscription, SimpleTimerConfig, SimpleAlarmConfig, AlarmButton, } from './types' const createDefaultButton = ( text: string, color: string, icon: string ): AlarmButton => ({ text, textColor: color, systemImageName: icon, }) export const AlarmKit = { get isSupported(): boolean { return AlarmKitManager.shared.isSupported }, async getAuthorizationState(): Promise<AuthorizationState> { return AlarmKitManager.shared.getAuthorizationState() }, async requestAuthorization(): Promise<boolean> { return AlarmKitManager.shared.requestAuthorization() }, async scheduleTimer( id: string, config: SimpleTimerConfig ): Promise<Alarm | null> { const stopButton = createDefaultButton('Stop', '#FFFFFF', 'stop.circle') const secondaryButton = config.snoozeEnabled ? createDefaultButton('Snooze', '#FFFFFF', 'zzz') : undefined return AlarmKitManager.shared.scheduleOrReschedule(id, { countdownDuration: { preAlert: config.duration, postAlert: config.snoozeDuration || 300, }, presentation: { alert: { title: config.title, stopButton, secondaryButton, secondaryButtonBehavior: config.snoozeEnabled ? 'countdown' : undefined, }, countdown: { title: 'Time Remaining', }, }, tintColor: config.tintColor, soundName: config.sound, }) }, async scheduleAlarm( id: string, config: SimpleAlarmConfig ): Promise<Alarm | null> { const stopButton = createDefaultButton('Stop', '#FFFFFF', 'stop.circle') const secondaryButton = config.snoozeEnabled ? createDefaultButton('Snooze', '#FFFFFF', 'zzz') : undefined return AlarmKitManager.shared.scheduleOrReschedule(id, { countdownDuration: { preAlert: 0, postAlert: config.snoozeEnabled ? config.snoozeDuration || 0 : 0, }, schedule: { type: 'relative', hour: config.hour, minute: config.minute, weekdays: config.weekdays, }, presentation: { alert: { title: config.title, stopButton, secondaryButton, secondaryButtonBehavior: config.snoozeEnabled ? 'countdown' : undefined, }, }, tintColor: config.tintColor, soundName: config.sound, }) }, async cancel(id: string): Promise<void> { return AlarmKitManager.shared.cancel(id) }, async stop(id: string): Promise<void> { return AlarmKitManager.shared.stop(id) }, async pause(id: string): Promise<void> { return AlarmKitManager.shared.pause(id) }, async resume(id: string): Promise<void> { return AlarmKitManager.shared.resume(id) }, async countdown(id: string): Promise<void> { return AlarmKitManager.shared.countdown(id) }, async getAlarms(): Promise<Alarm[]> { return AlarmKitManager.shared.getAlarms() }, addAlarmsListener(callback: (alarms: Alarm[]) => void): Subscription { return AlarmKitManager.shared.addAlarmUpdatesListener(callback) }, addAuthorizationListener( callback: (state: AuthorizationState) => void ): Subscription { return AlarmKitManager.shared.addAuthorizationUpdatesListener(callback) }, } export { AlarmKitManager } from './AlarmKitManager' export { AlarmConfigurationFactory } from './AlarmConfiguration' export { useAlarms, useAuthorizationState, type UseAlarmsResult, type UseAuthorizationResult, } from './hooks' export * from './types' export default AlarmKit