Skip to content
This repository was archived by the owner on Dec 26, 2022. It is now read-only.

Commit 7f49cbc

Browse files
committed
Last active day
1 parent 7618d13 commit 7f49cbc

File tree

6 files changed

+38
-8
lines changed

6 files changed

+38
-8
lines changed

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
"javascript.format.enable": false,
1111
"typescript.format.enable": false,
1212

13+
"[typescript]": {
14+
"editor.defaultFormatter": "esbenp.prettier-vscode",
15+
"editor.formatOnSave": true
16+
},
17+
1318
"search.exclude": {
1419
".git": true,
1520
".eslintcache": true,

src/helpers/ArrayHelper.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,7 @@ export function mapCurrentNext<T, R = any>(
4444
}
4545
return result;
4646
}
47+
48+
export function last<T>(arr: T[]): T | undefined {
49+
return arr[arr.length - 1];
50+
}

src/helpers/DateTime.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ITimeRangeModel } from '../modules/tasks/models/TaskModel';
2-
import { format } from 'date-fns';
2+
import { format, isSameMonth, isSameYear } from 'date-fns';
3+
34
import { iterPrevCurrent } from './ArrayHelper';
45

56
function timePad(time: number): string {
@@ -45,6 +46,17 @@ export function msToTime(s: number, showSeconds: boolean = true) {
4546
return timeItemsToString(sign, hrs, mins, secs, showSeconds);
4647
}
4748

49+
export function taskLastActiveDateFormat(date: Date) {
50+
const now = new Date();
51+
if (isSameMonth(date, now)) {
52+
return format(date, 'E dd');
53+
}
54+
if (isSameYear(date, now)) {
55+
return format(date, 'dd/MM');
56+
}
57+
return format(date, 'dd/MM/yy');
58+
}
59+
4860
export function timeToMs(date: Date) {
4961
const hours = date.getHours();
5062
const minutes = date.getMinutes();

src/helpers/TreeModelHelper.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
import { toJS } from 'mobx';
2-
31
import { ITreeItem, ITreeItemWithParent } from '../types/ITreeItem';
42
import { TaskInMyDay } from '../modules/tasks/models/TaskInMyDay';
53
import TaskModel from '../modules/tasks/models/TaskModel';
64
import TaskFactory from '../modules/tasks/TaskFactory';
75
import ProjectModel from '../modules/projects/models/ProjectModel';
86

9-
// @ts-ignore TODO remove
10-
window.toJS = toJS;
11-
127
const TreeModelHelper = {
138
getPathToNode<T extends ITreeItemWithParent = ITreeItemWithParent>(node: T) {
149
const result: string[] = [];

src/modules/tasks/models/TaskModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ export default class TaskModel extends AbstractModel
154154
const normalDate = startOfDay(date);
155155
const found = this.datesInProgress.find((d) => isSameDay(d, normalDate));
156156
if (!found) {
157-
this.datesInProgress.push(normalDate);
157+
this.datesInProgress = [...this.datesInProgress, normalDate];
158158
}
159159
}
160160
}

src/screens/projects/components/TaskNode/TaskNode.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { SyntheticEvent, useCallback } from 'react';
1+
import React, { SyntheticEvent, useCallback, useMemo } from 'react';
22
import {
33
CaretRightFilled,
44
DeleteOutlined,
@@ -12,6 +12,8 @@ import TaskModel from '../../../../modules/tasks/models/TaskModel';
1212
import rootStore from '../../../../modules/RootStore';
1313
import * as TaskHooks from '../../../../hooks/TaskHooks';
1414
import { Features } from '../../../../config';
15+
import { last } from '../../../../helpers/ArrayHelper';
16+
import { taskLastActiveDateFormat } from '../../../../helpers/DateTime';
1517

1618
const { tasksStore } = rootStore;
1719

@@ -24,6 +26,14 @@ export default observer(function TaskNode({ task }: TaskNodeProps) {
2426

2527
const duration = TaskHooks.useTaskDuration(task);
2628

29+
const lastDateInProgress = useMemo(() => {
30+
const lastDate = last(task.datesInProgress);
31+
if (lastDate) {
32+
return taskLastActiveDateFormat(lastDate)
33+
}
34+
return undefined;
35+
}, [task.datesInProgress]);
36+
2737
const preventDefault = useCallback((fn: () => void) => {
2838
return (e: SyntheticEvent) => {
2939
e.stopPropagation();
@@ -34,6 +44,7 @@ export default observer(function TaskNode({ task }: TaskNodeProps) {
3444
return (
3545
<div className={classes.taskNode}>
3646
<span className={classes.taskTitle}>{task.title}</span>
47+
<span className={classes.date}>{lastDateInProgress}</span>
3748
<span>{duration}</span>
3849
<span className={classes.taskNodeActions}>
3950
{Features.myDay && (
@@ -72,4 +83,7 @@ const useStyle = createUseStyles({
7283
taskTitle: {
7384
flex: 1,
7485
},
86+
date: {
87+
marginRight: 5,
88+
}
7589
});

0 commit comments

Comments
 (0)