UNPKG

@ammarahmed/notifee-react-native

Version:

Notifee - a feature rich notifications library for React Native.

135 lines (115 loc) 3.48 kB
/* * Copyright (c) 2016-present Invertase Limited */ import { objectHasProperty, isNumber, isObject, isValidEnum, isUndefined, isBoolean, } from '../utils'; import { Trigger, TimeUnit, RepeatFrequency, TimestampTrigger, IntervalTrigger, TriggerType, TimestampTriggerAlarmManager, } from '../types/Trigger'; const MINIMUM_INTERVAL = 15; function isMinimumInterval(interval: number, timeUnit: any): boolean { switch (timeUnit) { case TimeUnit.SECONDS: return interval / 60 >= MINIMUM_INTERVAL; case TimeUnit.MINUTES: return interval >= MINIMUM_INTERVAL; case TimeUnit.HOURS: return interval >= 1; case TimeUnit.DAYS: return interval >= 1; } return true; } export default function validateTrigger(trigger: Trigger): Trigger { if (!isObject(trigger)) { throw new Error("'trigger' expected an object value."); } switch (trigger.type) { case TriggerType.TIMESTAMP: return validateTimestampTrigger(trigger); case TriggerType.INTERVAL: return validateIntervalTrigger(trigger); default: throw new Error('Unknown trigger type'); } } function validateTimestampTrigger(trigger: TimestampTrigger): TimestampTrigger { if (!isNumber(trigger.timestamp)) { throw new Error("'trigger.timestamp' expected a number value."); } const now = Date.now(); if (trigger.timestamp <= now) { throw new Error("'trigger.timestamp' date must be in the future."); } const out: TimestampTrigger = { type: trigger.type, timestamp: trigger.timestamp, repeatFrequency: -1, }; if (objectHasProperty(trigger, 'repeatFrequency') && !isUndefined(trigger.repeatFrequency)) { if (!isValidEnum(trigger.repeatFrequency, RepeatFrequency)) { throw new Error("'trigger.repeatFrequency' expected a RepeatFrequency value."); } out.repeatFrequency = trigger.repeatFrequency; } if (objectHasProperty(trigger, 'alarmManager') && !isUndefined(trigger.alarmManager)) { if (isBoolean(trigger.alarmManager)) { if (trigger.alarmManager) { out.alarmManager = validateTimestampAlarmManager(); } } else { try { out.alarmManager = validateTimestampAlarmManager(trigger.alarmManager); } catch (e: any) { throw new Error(`'trigger.alarmManager' ${e.message}.`); } } } return out; } function validateTimestampAlarmManager( alarmManager?: TimestampTriggerAlarmManager, ): TimestampTriggerAlarmManager { const out: TimestampTriggerAlarmManager = { allowWhileIdle: false, }; if (!alarmManager) { return out; } if (isBoolean(alarmManager.allowWhileIdle) && alarmManager.allowWhileIdle) { out.allowWhileIdle = true; } return out; } function validateIntervalTrigger(trigger: IntervalTrigger): IntervalTrigger { if (!isNumber(trigger.interval)) { throw new Error("'trigger.interval' expected a number value."); } const out: IntervalTrigger = { type: trigger.type, interval: trigger.interval, timeUnit: TimeUnit.SECONDS, }; if (objectHasProperty(trigger, 'timeUnit') && !isUndefined(trigger.timeUnit)) { if (!isValidEnum(trigger.timeUnit, TimeUnit)) { throw new Error("'trigger.timeUnit' expected a TimeUnit value."); } out.timeUnit = trigger.timeUnit; } if (!isMinimumInterval(trigger.interval, out.timeUnit)) { throw new Error("'trigger.interval' expected to be at least 15 minutes."); } return out; }