TodoCard.js
2.79 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
import React, { useState } from "react";
import { makeStyles } from "@material-ui/core/styles";
import Card from "@material-ui/core/Card";
import CardContent from "@material-ui/core/CardContent";
import Typography from "@material-ui/core/Typography";
import FormControlLabel from "@material-ui/core/FormControlLabel";
import Checkbox from "@material-ui/core/Checkbox";
import SettingButton from "./SettingButton.js";
const useStyles = makeStyles({
root: {
margin: "0.5rem",
},
date: {
fontSize: "0.8rem",
float: "left",
},
title: {
fontSize: "1.4rem",
clear: "both",
float: "left",
},
checkBox: {
clear: "both",
float: "left",
},
percent: {
color: "#00BB00",
float: "right",
},
});
export default function TodoCard({ data, isMine }) {
const classes = useStyles();
const [render, setRender] = useState(0);
const todo = data.todo.split(",").map((text) => {
return text;
});
const [checkState, setCheckState] = useState(
data.ck.split(",").map((ck) => {
return parseInt(ck);
})
);
const handleCheck = (idx) => {
if (localStorage["userName"] === data.name) {
let tempArr = checkState;
tempArr[idx] = tempArr[idx] ? 0 : 1;
setCheckState(tempArr);
data.ck = tempArr.join(",");
setRender([]);
modifyApi({
isPublic: data.isPublic,
name: localStorage["userName"],
date: data.date,
time: data.time,
title: data.title,
todo: data.todo,
ck: tempArr.join(","),
});
} else {
alert("You can't modify other people's list.");
}
};
const modifyApi = (data) => {
return fetch("/api/updatecard", {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
}).then((response) => response.json());
};
return (
<>
<Card className={classes.root}>
<CardContent>
<Typography className={classes.date} gutterBottom>
{" "}
{data.name} · {data.time}
</Typography>
<SettingButton isMine={isMine} data={data}></SettingButton>
<Typography className={classes.title} variant="h6">
{data.title}
</Typography>
<Typography className={classes.percent} variant="h6">
{checkState.reduce((a, b) => a + b)}/{checkState.length}
</Typography>
{todo.map((item, idx) => {
return (
<FormControlLabel
key={idx}
className={classes.checkBox}
control={<Checkbox onClick={(e) => handleCheck(idx)} />}
checked={Boolean(checkState[idx])}
label={item}
/>
);
})}
</CardContent>
</Card>
</>
);
}