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

Commit 385046b

Browse files
author
Dmitry Yadrikhinsky
committed
[DrawerTask/Hours] Show modal
1 parent f912726 commit 385046b

File tree

5 files changed

+46
-17
lines changed

5 files changed

+46
-17
lines changed

src/screens/hours/HoursView.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ const { tasksStore } = rootStore;
1717

1818
export default observer(function HoursView() {
1919
const [date, setDate] = useState<Date>(new Date());
20-
const [showModal, setShowModal] = useState<boolean>(false);
2120
const [currentTaskTime, setCurrentTaskTime] = useState<
2221
Undefined<TaskTimeModel>
2322
>();
@@ -34,16 +33,13 @@ export default observer(function HoursView() {
3433
<HoursCard
3534
key={index}
3635
taskTime={taskTime}
37-
onClick={(taskTime) => {
38-
setCurrentTaskTime(taskTime);
39-
setShowModal(true);
40-
}}
36+
onClick={(taskTime) => setCurrentTaskTime(taskTime)}
4137
/>
4238
))}
4339
</Space>
4440
<TimeRangeModal
45-
visible={showModal}
46-
onClose={() => setShowModal(false)}
41+
visible={!!currentTaskTime}
42+
onClose={() => setCurrentTaskTime(undefined)}
4743
taskTime={currentTaskTime}
4844
/>
4945
</Layout>

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useMemo } from 'react';
1+
import React, { useMemo, useState } from 'react';
22
import { Checkbox, Drawer, Input, Space } from 'antd';
33
import { observer } from 'mobx-react';
44
import { ProjectOutlined } from '@ant-design/icons';
@@ -10,6 +10,9 @@ import rootStore from '../../../../services/RootStore';
1010
import HoursByTask from '../HoursByTask/HoursByTask';
1111
import IconTile from '../../../../components/IconTile/IconTile';
1212
import Duration from './components/Duration';
13+
import TimeRangeModal from '../../../../components/TimeRangeModal/TimeRangeModal';
14+
import { Undefined } from '../../../../types/CommonTypes';
15+
import TaskTimeModel from '../../../../models/TaskTimeModel';
1316

1417
const { projectStore } = rootStore;
1518

@@ -24,9 +27,14 @@ export default observer(function DrawerTask({
2427
visible,
2528
onClose,
2629
}: DrawerTaskProps) {
30+
const [currentTaskTime, setCurrentTaskTime] = useState<
31+
Undefined<TaskTimeModel>
32+
>();
33+
2734
const project = useMemo(() => projectStore.get(task?.projectId || ''), [
2835
task,
2936
]);
37+
3038
return (
3139
<Drawer
3240
placement="right"
@@ -75,8 +83,16 @@ export default observer(function DrawerTask({
7583

7684
<Duration task={task} />
7785

78-
<HoursByTask task={task} />
86+
<HoursByTask
87+
task={task}
88+
onClick={(taskItem) => setCurrentTaskTime(taskItem)}
89+
/>
7990
</Space>
91+
<TimeRangeModal
92+
visible={!!currentTaskTime}
93+
onClose={() => setCurrentTaskTime(undefined)}
94+
taskTime={currentTaskTime}
95+
/>
8096
</Drawer>
8197
);
8298
});

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import './HoursByTask.less';
99

1010
import TaskModel, { ITimeRangeModel } from '../../../../models/TaskModel';
1111
import { mapLastCurrent } from '../../../../helpers/IterateLastCurrent';
12-
import HoursItem from './HoursItem';
12+
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';
1516

1617
function dateFormat(date: Date) {
1718
return format(date, 'dd.MM.yyyy');
@@ -24,9 +25,13 @@ function getDurationPerDay(timeItems: ITimeRangeModel[], date: Date) {
2425

2526
interface HoursByTaskProps {
2627
task?: TaskModel;
28+
onClick: (task: TaskTimeModel) => void;
2729
}
2830

29-
export default observer(function HoursByTask({ task }: HoursByTaskProps) {
31+
export default observer(function HoursByTask({
32+
task,
33+
onClick,
34+
}: HoursByTaskProps) {
3035
return (
3136
<Card className="hours-by-task-container">
3237
<Space direction="vertical" className="hours-by-task">
@@ -35,6 +40,15 @@ export default observer(function HoursByTask({ task }: HoursByTaskProps) {
3540
</IconTile>
3641
{task?.time.length === 0 && <div>No billed hours</div>}
3742
{mapLastCurrent(task?.time || [], (last, range, index) => {
43+
const hoursItem = (
44+
<HoursItem
45+
range={range}
46+
onClick={() => {
47+
console.log(task);
48+
task && onClick(new TaskTimeModel(task, range, index));
49+
}}
50+
/>
51+
);
3852
if (!last || !isSameDay(last.start, range.start)) {
3953
const duration = getDurationPerDay(task?.time || [], range.start);
4054
return (
@@ -43,11 +57,11 @@ export default observer(function HoursByTask({ task }: HoursByTaskProps) {
4357
<div className="date">{dateFormat(range.start)}</div>
4458
<div className="duration-date">{duration}</div>
4559
</div>
46-
<HoursItem range={range} />
60+
{hoursItem}
4761
</div>
4862
);
4963
}
50-
return <HoursItem key={index} range={range} />;
64+
return hoursItem;
5165
})}
5266
</Space>
5367
</Card>

src/screens/projects/components/HoursByTask/HoursItem.less renamed to src/screens/projects/components/HoursByTask/components/HoursItem.less

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
.hours-item {
2+
cursor: pointer;
3+
24
.description {
35
font-size: 11px;
46
}

src/screens/projects/components/HoursByTask/HoursItem.tsx renamed to src/screens/projects/components/HoursByTask/components/HoursItem.tsx

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

66
import './HoursItem.less';
77

8-
import { msToTime } from '../../../../helpers/DateTime';
9-
import { ITimeRangeModel } from '../../../../models/TaskModel';
8+
import { msToTime } from '../../../../../helpers/DateTime';
9+
import { ITimeRangeModel } from '../../../../../models/TaskModel';
1010

1111
function hoursFormat(date: Date) {
1212
return format(date, 'HH:mm');
@@ -28,11 +28,12 @@ function getDuration(range: ITimeRangeModel): string {
2828

2929
interface HoursItemProps {
3030
range: ITimeRangeModel;
31+
onClick: () => void;
3132
}
3233

33-
export default observer(function HoursItem({ range }: HoursItemProps) {
34+
export default observer(function HoursItem({ range, onClick }: HoursItemProps) {
3435
return (
35-
<Card className="hours-item">
36+
<Card className="hours-item" onClick={onClick}>
3637
<div className="description">{range.description}</div>
3738
<div className="bottom">
3839
<div className="hours-range">{hoursRangeFormat(range)}</div>

0 commit comments

Comments
 (0)