Files
Trackeep/Others/mobile-app/src/utils/notifications.ts
T
Tomas Dvorak d27cf14110 first test
2026-02-08 14:14:55 +01:00

107 lines
3.3 KiB
TypeScript

import { useNotifications } from '../services/NotificationContext';
export class NotificationUtils {
private static notifications = useNotifications();
static scheduleTaskReminder(taskId: string, taskTitle: string, dueDate: Date) {
const reminderTime = new Date(dueDate.getTime() - 24 * 60 * 60 * 1000); // 1 day before
const now = new Date();
if (reminderTime > now) {
this.notifications.scheduleNotification({
id: `task-reminder-${taskId}`,
title: 'Task Due Soon',
message: `Task "${taskTitle}" is due tomorrow`,
date: reminderTime,
userInfo: { type: 'task', taskId },
});
}
// Schedule final reminder 1 hour before
const finalReminder = new Date(dueDate.getTime() - 60 * 60 * 1000);
if (finalReminder > now) {
this.notifications.scheduleNotification({
id: `task-final-${taskId}`,
title: 'Task Due Soon',
message: `Task "${taskTitle}" is due in 1 hour`,
date: finalReminder,
userInfo: { type: 'task', taskId },
});
}
}
static scheduleDeadlineReminder(taskId: string, taskTitle: string, deadline: Date) {
const reminderTimes = [
{ days: 7, message: 'due in 1 week' },
{ days: 3, message: 'due in 3 days' },
{ days: 1, message: 'due tomorrow' },
{ hours: 1, message: 'due in 1 hour' },
];
const now = new Date();
reminderTimes.forEach((reminder, index) => {
let reminderTime: Date;
if (reminder.days) {
reminderTime = new Date(deadline.getTime() - reminder.days * 24 * 60 * 60 * 1000);
} else if (reminder.hours) {
reminderTime = new Date(deadline.getTime() - reminder.hours * 60 * 60 * 1000);
} else {
return;
}
if (reminderTime > now) {
this.notifications.scheduleNotification({
id: `deadline-${taskId}-${index}`,
title: 'Deadline Reminder',
message: `Task "${taskTitle}" ${reminder.message}`,
date: reminderTime,
userInfo: { type: 'deadline', taskId },
});
}
});
}
static scheduleStudyReminder(courseId: string, courseTitle: string, studyTime: Date) {
this.notifications.scheduleNotification({
id: `study-${courseId}`,
title: 'Study Reminder',
message: `Time to study "${courseTitle}"`,
date: studyTime,
userInfo: { type: 'study', courseId },
});
}
static cancelTaskNotifications(taskId: string) {
this.notifications.cancelNotification(`task-reminder-${taskId}`);
this.notifications.cancelNotification(`task-final-${taskId}`);
// Cancel deadline notifications
for (let i = 0; i < 4; i++) {
this.notifications.cancelNotification(`deadline-${taskId}-${i}`);
}
}
static showTaskCompletedNotification(taskTitle: string) {
this.notifications.showLocalNotification(
'Task Completed! 🎉',
`Great job! You completed "${taskTitle}"`
);
}
static showTimeTrackingReminder() {
this.notifications.showLocalNotification(
'Time Tracking Reminder',
'Don\'t forget to track your time on current tasks'
);
}
static showDailySummaryNotification(completedTasks: number, totalHours: number) {
this.notifications.showLocalNotification(
'Daily Summary 📊',
`Completed ${completedTasks} tasks, tracked ${totalHours.toFixed(1)} hours today`
);
}
}