## Log Table ```dataviewjs const pages = dv.pages() const table = dv.markdownTable(['Pomodoro','Duration', 'Begin', 'End'], pages.file.lists .filter(item=>item.pomodoro) .sort(item => item.end, 'desc') .map(item=> { return [item.pomodoro, `${item.duration.as('minutes')} m`, item.begin, item.end] }) ) dv.paragraph(table) ``` ## Summary ```dataviewjs const pages = dv.pages(); const emoji = "🍅"; dv.table( ["Date", "Pomodoros", "Total"], pages.file.lists .filter((item) => item?.pomodoro == "WORK") .groupBy((item) => { if (item.end && item.end.length >= 10) { return item.end.substring(0, 10); } else { return "Unknown Date"; } }) .map((group) => { let sum = 0; group.rows.forEach((row) => (sum += row.duration.as("minutes"))); return [ group.key, group.rows.length > 5 ? `${emoji} ${group.rows.length}` : `${emoji.repeat(group.rows.length)}`, `${sum} min`, ]; }) ) ``` ## Task Tracking ```dataviewjs const pages = dv.pages(); const emoji = "🍅"; dv.table( ["Task", "Pomodoros", "Total"], pages.file.tasks .filter((task) => task.children.some((child) => child.pomodoro == "WORK")) .map((task) => { let p = task.children .filter((child) => child.pomodoro == "WORK") .map((child) => child.duration.as("minutes")); let sum = p .reduce((a, b) => a+b,0) let pomodoros = p.length > 5 ? `${emoji} ${p.length}` : `${emoji.repeat(p.length)}`; return [task.text, pomodoros, `${sum} minutes`]; }) ) ``` ## Logs