/** * Static Daily Reminders Examples * * Examples demonstrating the static daily reminder functionality * that works without network content or content caching. * * @author Matthew Raymer * @version 1.0.0 */ import { DailyNotification } from '@timesafari/daily-notification-plugin'; /** * Basic Daily Reminder * * Schedule a simple daily reminder with default settings */ export async function scheduleBasicReminder() { try { await DailyNotification.scheduleDailyReminder({ id: 'morning_checkin', title: 'Good Morning!', body: 'Time to check your TimeSafari community updates', time: '09:00' }); console.log('✅ Basic reminder scheduled for 9:00 AM daily'); } catch (error) { console.error('❌ Failed to schedule basic reminder:', error); } } /** * Customized Daily Reminder * * Schedule a reminder with custom sound, vibration, and priority */ export async function scheduleCustomizedReminder() { try { await DailyNotification.scheduleDailyReminder({ id: 'evening_reflection', title: 'Evening Reflection', body: 'Take a moment to reflect on your day and plan for tomorrow', time: '20:00', sound: true, vibration: true, priority: 'high', repeatDaily: true }); console.log('✅ Customized reminder scheduled for 8:00 PM daily'); } catch (error) { console.error('❌ Failed to schedule customized reminder:', error); } } /** * Multiple Daily Reminders * * Schedule multiple reminders throughout the day */ export async function scheduleMultipleReminders() { const reminders = [ { id: 'morning_motivation', title: 'Morning Motivation', body: 'Start your day with positive energy!', time: '07:00', priority: 'high' as const }, { id: 'lunch_break', title: 'Lunch Break', body: 'Time for a well-deserved break', time: '12:30', priority: 'normal' as const }, { id: 'evening_gratitude', title: 'Evening Gratitude', body: 'What are you grateful for today?', time: '19:00', priority: 'normal' as const } ]; try { for (const reminder of reminders) { await DailyNotification.scheduleDailyReminder(reminder); console.log(`✅ Scheduled reminder: ${reminder.id} at ${reminder.time}`); } console.log('✅ All reminders scheduled successfully'); } catch (error) { console.error('❌ Failed to schedule multiple reminders:', error); } } /** * Get All Scheduled Reminders * * Retrieve and display all currently scheduled reminders */ export async function getAllScheduledReminders() { try { const result = await DailyNotification.getScheduledReminders(); if (result.reminders && result.reminders.length > 0) { console.log(`📋 Found ${result.reminders.length} scheduled reminders:`); result.reminders.forEach((reminder, index) => { console.log(`${index + 1}. ${reminder.title} (${reminder.id})`); console.log(` Time: ${reminder.time}`); console.log(` Priority: ${reminder.priority}`); console.log(` Repeat Daily: ${reminder.repeatDaily}`); console.log(` Scheduled: ${reminder.isScheduled ? 'Yes' : 'No'}`); console.log(''); }); } else { console.log('📋 No scheduled reminders found'); } } catch (error) { console.error('❌ Failed to get scheduled reminders:', error); } } /** * Update Existing Reminder * * Update an existing reminder with new settings */ export async function updateExistingReminder() { try { // Update the morning check-in reminder await DailyNotification.updateDailyReminder('morning_checkin', { title: 'Updated Morning Check-in', body: 'Time to check your TimeSafari community updates and plan your day', time: '08:30', priority: 'high' }); console.log('✅ Morning check-in reminder updated to 8:30 AM with high priority'); } catch (error) { console.error('❌ Failed to update reminder:', error); } } /** * Cancel Specific Reminder * * Cancel a specific reminder by ID */ export async function cancelSpecificReminder() { try { await DailyNotification.cancelDailyReminder('evening_reflection'); console.log('✅ Evening reflection reminder cancelled'); } catch (error) { console.error('❌ Failed to cancel reminder:', error); } } /** * Cancel All Reminders * * Cancel all scheduled reminders */ export async function cancelAllReminders() { try { const result = await DailyNotification.getScheduledReminders(); if (result.reminders && result.reminders.length > 0) { for (const reminder of result.reminders) { await DailyNotification.cancelDailyReminder(reminder.id); console.log(`✅ Cancelled reminder: ${reminder.id}`); } console.log('✅ All reminders cancelled successfully'); } else { console.log('📋 No reminders to cancel'); } } catch (error) { console.error('❌ Failed to cancel all reminders:', error); } } /** * Reminder Management Workflow * * Complete workflow demonstrating reminder management */ export async function reminderManagementWorkflow() { console.log('🚀 Starting reminder management workflow...\n'); try { // 1. Schedule initial reminders console.log('1. Scheduling initial reminders...'); await scheduleMultipleReminders(); console.log(''); // 2. Get all reminders console.log('2. Getting all scheduled reminders...'); await getAllScheduledReminders(); console.log(''); // 3. Update a reminder console.log('3. Updating morning check-in reminder...'); await updateExistingReminder(); console.log(''); // 4. Get updated reminders console.log('4. Getting updated reminders...'); await getAllScheduledReminders(); console.log(''); // 5. Cancel a specific reminder console.log('5. Cancelling evening reflection reminder...'); await cancelSpecificReminder(); console.log(''); // 6. Final reminder list console.log('6. Final reminder list...'); await getAllScheduledReminders(); console.log('🎉 Reminder management workflow completed successfully!'); } catch (error) { console.error('❌ Reminder management workflow failed:', error); } } /** * Time Format Validation Examples * * Examples of valid and invalid time formats */ export function timeFormatExamples() { console.log('⏰ Time Format Examples:'); console.log(''); const validTimes = [ '00:00', // Midnight '06:30', // 6:30 AM '12:00', // Noon '18:45', // 6:45 PM '23:59' // 11:59 PM ]; const invalidTimes = [ '24:00', // Invalid hour '12:60', // Invalid minute '9:00', // Missing leading zero '12:0', // Missing trailing zero '12', // Missing minutes 'abc' // Non-numeric ]; console.log('✅ Valid time formats:'); validTimes.forEach(time => { console.log(` "${time}" - Valid`); }); console.log(''); console.log('❌ Invalid time formats:'); invalidTimes.forEach(time => { console.log(` "${time}" - Invalid`); }); console.log(''); console.log('📝 Time format rules:'); console.log(' - Use HH:mm format (24-hour)'); console.log(' - Hours: 00-23'); console.log(' - Minutes: 00-59'); console.log(' - Always use leading zeros'); } /** * Platform-Specific Considerations * * Important notes for different platforms */ export function platformConsiderations() { console.log('📱 Platform-Specific Considerations:'); console.log(''); console.log('🤖 Android:'); console.log(' - Uses AlarmManager for precise scheduling'); console.log(' - Requires POST_NOTIFICATIONS permission'); console.log(' - May be affected by battery optimization'); console.log(' - Survives device reboots'); console.log(''); console.log('🍎 iOS:'); console.log(' - Uses UNUserNotificationCenter'); console.log(' - Requires notification permissions'); console.log(' - Limited to 64 scheduled notifications'); console.log(' - May be affected by Background App Refresh'); console.log(''); console.log('🌐 Web:'); console.log(' - Uses setTimeout for scheduling'); console.log(' - Requires notification permissions'); console.log(' - Limited by browser tab lifecycle'); console.log(' - May not persist across browser restarts'); console.log(''); console.log('💡 Best Practices:'); console.log(' - Always request notification permissions first'); console.log(' - Handle permission denials gracefully'); console.log(' - Test on actual devices, not just simulators'); console.log(' - Consider platform limitations in your app design'); } // Export all functions for easy importing export const StaticReminderExamples = { scheduleBasicReminder, scheduleCustomizedReminder, scheduleMultipleReminders, getAllScheduledReminders, updateExistingReminder, cancelSpecificReminder, cancelAllReminders, reminderManagementWorkflow, timeFormatExamples, platformConsiderations }; // Example usage if (require.main === module) { console.log('📚 Static Daily Reminders Examples'); console.log('=====================================\n'); // Show time format examples timeFormatExamples(); console.log(''); // Show platform considerations platformConsiderations(); console.log(''); console.log('💡 To run the examples, import and call the functions:'); console.log(' import { StaticReminderExamples } from "./static-daily-reminders";'); console.log(' await StaticReminderExamples.reminderManagementWorkflow();'); }