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

Commit 3aa7ba6

Browse files
author
Dmitry Yadrikhinsky
committed
[TimeRangeModal] Rename to TaskTimeItemModel, add duration
1 parent 4794578 commit 3aa7ba6

File tree

10 files changed

+58
-26
lines changed

10 files changed

+58
-26
lines changed

src/components/TimeRangeModal/TimeRangeModal.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import { observer } from 'mobx-react';
88
import './TimeRangeModal.less';
99

1010
import rootStore from '../../services/RootStore';
11-
import TaskTimeModel from '../../models/TaskTimeModel';
11+
import TaskTimeItemModel from '../../models/TaskTimeItemModel';
1212
import { ITimeRangeModel } from '../../models/TaskModel';
1313
import { Undefined } from '../../types/CommonTypes';
14+
import TimeRangeDuration from './components/TimeRangeDuration';
1415

1516
const { tasksStore } = rootStore;
1617

@@ -20,7 +21,7 @@ enum RangeField {
2021
}
2122

2223
interface TimeRangeModalProps {
23-
taskTime?: TaskTimeModel;
24+
taskTime?: TaskTimeItemModel;
2425
visible: boolean;
2526
onClose: () => void;
2627
}
@@ -93,7 +94,7 @@ export default observer(function TimeRangeModal({
9394
/>
9495
</Form.Item>
9596
<Row>
96-
<Col span={12}>
97+
<Col span={8}>
9798
<Form.Item label="Start" labelCol={{ span: 24 }}>
9899
<TimePicker
99100
format="HH:mm"
@@ -102,7 +103,7 @@ export default observer(function TimeRangeModal({
102103
/>
103104
</Form.Item>
104105
</Col>
105-
<Col span={12}>
106+
<Col span={8}>
106107
<Form.Item label="End" labelCol={{ span: 24 }}>
107108
<TimePicker
108109
format="HH:mm"
@@ -112,6 +113,11 @@ export default observer(function TimeRangeModal({
112113
/>
113114
</Form.Item>
114115
</Col>
116+
<Col span={8}>
117+
<Form.Item label="Duration" labelCol={{ span: 24 }}>
118+
<TimeRangeDuration taskTimeItem={taskTime} />
119+
</Form.Item>
120+
</Col>
115121
</Row>
116122
<Button icon={<DeleteFilled />} onClick={handleDelete}>
117123
Remove
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import React from 'react';
2+
3+
import { useTimeItemsDuration } from '../../../hooks/TaskHooks';
4+
import TaskTimeItemModel from '../../../models/TaskTimeItemModel';
5+
6+
interface TimeRangeDurationProps {
7+
taskTimeItem?: TaskTimeItemModel;
8+
}
9+
10+
export default function TimeRangeDuration({
11+
taskTimeItem,
12+
}: TimeRangeDurationProps) {
13+
const duration = useTimeItemsDuration(
14+
taskTimeItem ? [taskTimeItem] : [],
15+
true
16+
);
17+
18+
return <div>{duration}</div>;
19+
}

src/hooks/TaskHooks.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useEffect, useRef, useState } from 'react';
22

33
import { calcDuration, msToTime } from '../helpers/DateTime';
44
import TaskModel from '../models/TaskModel';
5-
import TaskTimeModel from '../models/TaskTimeModel';
5+
import TaskTimeItemModel from '../models/TaskTimeItemModel';
66

77
export function useTaskDuration(model: TaskModel | undefined) {
88
model = model || ({} as TaskModel);
@@ -33,16 +33,23 @@ export function useTaskDuration(model: TaskModel | undefined) {
3333
return duration;
3434
}
3535

36-
export function useTimeItemsDuration(taskTime: TaskTimeModel[]) {
36+
export function useTimeItemsDuration(
37+
taskTime: TaskTimeItemModel[],
38+
showSeconds: boolean = false
39+
) {
3740
const [duration, setDuration] = useState<string>('');
3841
const intervalRef = useRef<NodeJS.Timeout>();
3942

4043
useEffect(() => {
4144
const haveActiveTime = taskTime.some((t) => !t.time.end);
42-
setDuration(msToTime(calcDuration(taskTime.map((t) => t.time)), false));
45+
setDuration(
46+
msToTime(calcDuration(taskTime.map((t) => t.time)), showSeconds)
47+
);
4348
if (haveActiveTime) {
4449
intervalRef.current = setInterval(() => {
45-
setDuration(msToTime(calcDuration(taskTime.map((t) => t.time)), false));
50+
setDuration(
51+
msToTime(calcDuration(taskTime.map((t) => t.time)), showSeconds)
52+
);
4653
}, 1000);
4754
}
4855
return () => {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import TaskModel, { ITimeRangeModel } from './TaskModel';
22

3-
export default class TaskTimeModel {
3+
export default class TaskTimeItemModel {
44
constructor(
55
public task: TaskModel,
66
public time: ITimeRangeModel,

src/screens/hours/HoursView.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import HoursCard from './components/HoursCard/HoursCard';
99
import getTimeItems from '../../services/TaskTimeItem';
1010
import SelectDate from './components/SelectDate/SelectDate';
1111
import TimeRangeModal from '../../components/TimeRangeModal/TimeRangeModal';
12-
import TaskTimeModel from '../../models/TaskTimeModel';
12+
import TaskTimeItemModel from '../../models/TaskTimeItemModel';
1313
import { Undefined } from '../../types/CommonTypes';
1414
import TotalHours from './components/TotalHours/TotalHours';
1515

@@ -18,7 +18,7 @@ const { tasksStore } = rootStore;
1818
export default observer(function HoursView() {
1919
const [date, setDate] = useState<Date>(new Date());
2020
const [currentTaskTime, setCurrentTaskTime] = useState<
21-
Undefined<TaskTimeModel>
21+
Undefined<TaskTimeItemModel>
2222
>();
2323

2424
const tasks = useMemo(() => tasksStore.getTasksByDate(date), [date]);

src/screens/hours/components/HoursCard/HoursCard.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { observer } from 'mobx-react';
55

66
import './HoursCard.less';
77

8-
import TaskTimeModel from '../../../../models/TaskTimeModel';
8+
import TaskTimeItemModel from '../../../../models/TaskTimeItemModel';
99
import PlayStopButton from '../../../../components/PlayStopButton/PlayStopButton';
1010
import rootStore from '../../../../services/RootStore';
1111
import { msToTime } from '../../../../helpers/DateTime';
@@ -21,8 +21,8 @@ function timeFormat(date: Date | undefined) {
2121
}
2222

2323
interface HoursCardProps {
24-
taskTime: TaskTimeModel;
25-
onClick: (taskTime: TaskTimeModel) => void;
24+
taskTime: TaskTimeItemModel;
25+
onClick: (taskTime: TaskTimeItemModel) => void;
2626
}
2727

2828
export default observer(function HoursCard({

src/screens/hours/components/TotalHours/TotalHours.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import React from 'react';
22
import { observer } from 'mobx-react';
33

44
import { useTimeItemsDuration } from '../../../../hooks/TaskHooks';
5-
import TaskTimeModel from '../../../../models/TaskTimeModel';
5+
import TaskTimeItemModel from '../../../../models/TaskTimeItemModel';
66

77
interface TotalHoursProps {
8-
timeItems: TaskTimeModel[];
8+
timeItems: TaskTimeItemModel[];
99
}
1010

1111
export default observer(function TotalHours({ timeItems }: TotalHoursProps) {

src/screens/projects/components/DrawerTask/DrawerTask.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import IconTile from '../../../../components/IconTile/IconTile';
1212
import Duration from './components/Duration';
1313
import TimeRangeModal from '../../../../components/TimeRangeModal/TimeRangeModal';
1414
import { Undefined } from '../../../../types/CommonTypes';
15-
import TaskTimeModel from '../../../../models/TaskTimeModel';
15+
import TaskTimeItemModel from '../../../../models/TaskTimeItemModel';
1616

1717
const { projectStore } = rootStore;
1818

@@ -28,7 +28,7 @@ export default observer(function DrawerTask({
2828
onClose,
2929
}: DrawerTaskProps) {
3030
const [currentTaskTime, setCurrentTaskTime] = useState<
31-
Undefined<TaskTimeModel>
31+
Undefined<TaskTimeItemModel>
3232
>();
3333

3434
const project = useMemo(() => projectStore.get(task?.projectId || ''), [

src/screens/projects/components/HoursByTask/HoursByTask.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { mapLastCurrent } from '../../../../helpers/IterateLastCurrent';
1212
import HoursItem from './components/HoursItem';
1313
import IconTile from '../../../../components/IconTile/IconTile';
1414
import { calcDuration, msToTime } from '../../../../helpers/DateTime';
15-
import TaskTimeModel from '../../../../models/TaskTimeModel';
15+
import TaskTimeItemModel from '../../../../models/TaskTimeItemModel';
1616

1717
function dateFormat(date: Date) {
1818
return format(date, 'dd.MM.yyyy');
@@ -25,7 +25,7 @@ function getDurationPerDay(timeItems: ITimeRangeModel[], date: Date) {
2525

2626
interface HoursByTaskProps {
2727
task?: TaskModel;
28-
onClick: (task: TaskTimeModel) => void;
28+
onClick: (task: TaskTimeItemModel) => void;
2929
}
3030

3131
export default observer(function HoursByTask({
@@ -45,7 +45,7 @@ export default observer(function HoursByTask({
4545
range={range}
4646
onClick={() => {
4747
console.log(task);
48-
task && onClick(new TaskTimeModel(task, range, index));
48+
task && onClick(new TaskTimeItemModel(task, range, index));
4949
}}
5050
/>
5151
);

src/services/TaskTimeItem.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
import isSameDay from 'date-fns/isSameDay';
22

33
import TaskModel from '../models/TaskModel';
4-
import TaskTimeModel from '../models/TaskTimeModel';
4+
import TaskTimeItemModel from '../models/TaskTimeItemModel';
55
import compareAsc from 'date-fns/compareAsc';
66

77
export default function getTimeItems(
88
tasks: TaskModel[],
99
date: Date
10-
): TaskTimeModel[] {
11-
let taskTime: TaskTimeModel[] = [];
10+
): TaskTimeItemModel[] {
11+
let taskTime: TaskTimeItemModel[] = [];
1212
tasks.forEach((task) => {
13-
const taskTimeItems: TaskTimeModel[] = [];
13+
const taskTimeItems: TaskTimeItemModel[] = [];
1414
for (let i = 0; i < task.time.length; i++) {
1515
const range = task.time[i];
1616
if (
1717
isSameDay(range.start, date) ||
1818
(range.end && isSameDay(range.end, date))
1919
) {
20-
taskTimeItems.push(new TaskTimeModel(task, range, i));
20+
taskTimeItems.push(new TaskTimeItemModel(task, range, i));
2121
}
2222
}
2323
taskTime = taskTime.concat(taskTimeItems);

0 commit comments

Comments
 (0)