mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 12:03:00 +00:00
107 lines
3.3 KiB
TypeScript
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`
|
|
);
|
|
}
|
|
}
|