forked from Yadro/time-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEditProjectModal.tsx
More file actions
87 lines (75 loc) · 2.06 KB
/
EditProjectModal.tsx
File metadata and controls
87 lines (75 loc) · 2.06 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
import React, { useEffect, useState } from 'react';
import { Button, Input, Modal, Space } from 'antd';
import { DeleteFilled, SaveOutlined } from '@ant-design/icons';
import { observer } from 'mobx-react';
import ProjectModel from '../../../../modules/projects/models/ProjectModel';
import rootStore from '../../../../modules/RootStore';
import ChooseColor from './components/ChooseColor';
const { projectStore } = rootStore;
interface EditProjectModalProps {
project?: ProjectModel;
onClose: () => void;
}
const EditProjectModal = observer(({ project }: EditProjectModalProps) => {
const [title, setTitle] = useState<string>('');
const [color, setColor] = useState<string>('');
const canDelete = projectStore.projects.length > 1;
useEffect(() => {
const { editProject } = projectStore;
if (editProject) {
setTitle(editProject.title);
setColor(editProject.color);
}
}, []);
useEffect(() => {
setTitle(project?.title || '');
}, [project]);
function handleOk() {
if (project) {
projectStore.setProjectProps(project, title, color);
}
onClose();
}
function handleCancel() {
onClose();
}
function handleDelete() {
if (project && canDelete) {
rootStore.deleteProject(project);
}
onClose();
}
function onClose() {
projectStore.setEditableProject(undefined);
}
return (
<Modal
title="Edit project"
visible={!!projectStore.editProject}
onOk={handleOk}
onCancel={handleCancel}
okText="Save"
okButtonProps={{ icon: <SaveOutlined /> }}
>
<Space direction="vertical">
<Input
placeholder="Project name..."
value={title}
onChange={(e) => setTitle(e.target.value)}
/>
<ChooseColor
activeColor={color}
onChoose={(color) => setColor(color)}
/>
<Button
icon={<DeleteFilled />}
onClick={handleDelete}
disabled={!canDelete}
>
Delete
</Button>
</Space>
</Modal>
);
});
export default EditProjectModal;