import React from 'react'; import { ColorProp, FlexWidget, IconWidget, ListWidget, SvgWidget, TextWidget, } from 'react-native-android-widget'; import { getClockProgressSVG } from '../../components/clockProgress'; import { Category } from '../../models/category'; import { Task } from '../../models/task'; import { GetTaskColor } from '../../utils/colors'; const adaptDaysToGoToUnit = (t: Task) => { const timeLeft = t.lastDone! + (t.daysToRedo! * 24 * 60 * 60 * 1000) - Date.now(); if (timeLeft < 0) return 0; // Task is overdue else if (timeLeft < 3 * 60 * 60 * 1000) return Math.ceil(timeLeft / (60 * 1000)) + " minutes"; else if (timeLeft < 24 * 60 * 60 * 1000) return Math.ceil(timeLeft / (3600 * 1000)) + " hours"; else if (timeLeft < 7 * 24 * 60 * 60 * 1000) return Math.ceil(timeLeft / (24 * 3600 * 1000)) + " days"; else if (timeLeft < 30 * 24 * 60 * 60 * 1000) return Math.ceil(timeLeft / (7 * 24 * 3600 * 1000)) + " weeks"; else return Math.ceil(timeLeft / (30 * 24 * 3600 * 1000)) + " months"; }; export function HelloWidget({ tasks, categories }: { tasks: Task[], categories?: Category[] }) { const demoTasks: Task[] = [ new Task('Task 1', 1, 1, new Date().getTime() - 1000 * 60 * 60 * 24 * 0, 5), // 2 days ago new Task('Task 2', 2, 1, new Date().getTime() - 1000 * 60 * 60 * 24), // 1 day ago new Task('Task 3', 3, 1, new Date().getTime() - 1000 * 60 * 60 * 24 * 2), // 2 days ago new Task('Task 4', 4, 1, new Date().getTime() - 1000 * 60 * 60 * 24 * 3), // 3 days ago new Task('Task 5', 5, 1, new Date().getTime() - 1000 * 60 * 60 * 24 * 4), // 4 days ago new Task('Task 6', 6, 1, new Date().getTime() - 1000 * 60 * 60 * 24 * 10), // 4 days ago ]; tasks = (tasks ?? demoTasks)?.sort((a, b) => { const aExpiration = (Date.now() - a.lastDone!) / (a.daysToRedo! * 24 * 60 * 60 * 1000); const bExpiration = (Date.now() - b.lastDone!) / (b.daysToRedo! * 24 * 60 * 60 * 1000); return aExpiration - bExpiration; }).reverse(); return ( {tasks.map((task, index) => { const category = categories?.find(c => c.id === task.category); const timeLeft = adaptDaysToGoToUnit(task) const circleDegree = parseInt(timeLeft.toString()) > 0 ? ((task.daysToRedo! - (((Date.now() - task.lastDone!) / (24 * 3600 * 1000)))) / task.daysToRedo!) * 360 : 0; return ( 0 ? timeLeft + " left" : "Overdue"} style={{ color: '#ffffff', fontSize: 16, }} /> ) })} {(tasks && tasks.length === 0) && } ); }