forked from Yadro/time-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDrawerTask.tsx
More file actions
114 lines (104 loc) · 3.02 KB
/
DrawerTask.tsx
File metadata and controls
114 lines (104 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import React, { useMemo, useState } from 'react';
import { Checkbox, Drawer, Input, Space } from 'antd';
import { observer } from 'mobx-react';
import { ProjectOutlined } from '@ant-design/icons';
import { createUseStyles } from 'react-jss';
import TaskModel from '../../../../modules/tasks/models/TaskModel';
import rootStore from '../../../../modules/RootStore';
import HoursByTask from '../HoursByTask/HoursByTask';
import IconTile from '../../../../components/IconTile/IconTile';
import Duration from './components/Duration';
import TimeRangeModal from '../../../../components/TimeRangeModal/TimeRangeModal';
import { Undefined } from '../../../../types/CommonTypes';
import TaskTimeItemModel from '../../../../modules/tasks/models/TaskTimeItemModel';
import IModalProps from '../../../../types/IModalProps';
const { TextArea } = Input;
const { projectStore } = rootStore;
interface DrawerTaskProps extends IModalProps {
task?: TaskModel;
}
export default observer(function DrawerTask({
task,
visible,
onClose,
}: DrawerTaskProps) {
const classes = useStyle();
const [currentTaskTime, setCurrentTaskTime] = useState<
Undefined<TaskTimeItemModel>
>();
const project = useMemo(() => projectStore.get(task?.projectId || ''), [
task,
]);
return (
<Drawer
placement="right"
closable={false}
onClose={onClose}
visible={visible}
>
<Space direction="vertical" className={classes.container}>
<Checkbox
onChange={(e) => {
const { checked } = e.target;
if (task) {
task.setChecked(checked);
}
}}
checked={task?.checked}
>
Mark as done
</Checkbox>
<div className={classes.iconWithValue}>
<IconTile backgroundColor="#713A91">
<ProjectOutlined style={{ color: 'white ' }} />
</IconTile>
<span className={classes.projectTitle}>{project?.title}</span>
</div>
<Input
value={task?.title}
placeholder="Task description"
onChange={(e) => {
const title = e.target.value;
if (task) {
task.setTitle(title);
}
}}
/>
<TextArea
placeholder="Details"
rows={4}
value={task?.details}
onChange={(e) => {
const details = e.target.value;
if (task) {
task.setDetails(details);
}
}}
/>
<Duration task={task} />
<HoursByTask
task={task}
onClick={(taskItem) => setCurrentTaskTime(taskItem)}
/>
</Space>
<TimeRangeModal
visible={!!currentTaskTime}
onClose={() => setCurrentTaskTime(undefined)}
taskTime={currentTaskTime}
/>
</Drawer>
);
});
const useStyle = createUseStyles({
container: {
width: '100%',
},
iconWithValue: {
display: 'flex',
flexDirection: 'row',
alignItems: 'center',
},
projectTitle: {
paddingLeft: 5,
},
});