You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

342 lines
9.6 KiB

/**
* 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();');
}