-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrule-table.tsx
111 lines (98 loc) · 3.34 KB
/
rule-table.tsx
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
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow
} from "@/components/ui/table";
import { useStorage } from "@plasmohq/storage/hook";
import { CiEdit } from "react-icons/ci";
import { IoMdAdd } from "react-icons/io";
import { MdDeleteForever } from "react-icons/md";
import { PiClockCountdownBold } from "react-icons/pi";
import { MdOutlineAccessAlarms } from "react-icons/md";
import { Badge } from "~components/ui/badge";
import { Button } from "~components/ui/button";
import { defaultValueFunction, storageConfig, useCurrentIdStore, usePageVisibleStore, useVersionStore } from "~store";
import { Switch } from "~components/ui/switch";
const RuleTable = () => {
const { version } = useVersionStore()
const { setOpenPage } = usePageVisibleStore()
const [rules, setRules] = useStorage<RuleType[]>(storageConfig, defaultValueFunction)
const { setId } = useCurrentIdStore()
const handleEdit = (id: string) => {
setId(id)
setOpenPage('ruleForm')
}
const handleRemove = (id: string) => {
setRules(rules.filter(rule => rule.id !== id))
}
const handleAdd = () => {
setId("")
setOpenPage('ruleForm')
}
const handleCountdown = () => {
setOpenPage('countdownList')
}
const handleRemoved = () => {
setOpenPage('removedList')
}
const onCheckedChange = (id: string, checked: boolean) => {
setRules(rules.map(rule => {
if (rule.id === id) {
return {
...rule,
switchOn: checked
}
}
return rule
}))
}
return (
<>
<div className="flex justify-between items-center mb-2">
<div className="flex justify-start items-center gap-2">
<Button variant="outline" size="icon" onClick={handleAdd}>
<IoMdAdd className="h-5 w-5" />
</Button>
<Button variant="outline" size="icon" onClick={handleCountdown}>
<MdOutlineAccessAlarms className="h-5 w-5" />
</Button>
<Button variant="outline" size="icon" onClick={handleRemoved}>
<PiClockCountdownBold className="h-5 w-5" />
</Button>
</div>
<Badge variant="outline"> v {version}</Badge>
</div>
<Table >
<TableHeader>
<TableRow>
<TableHead>Title</TableHead>
<TableHead>Timeout</TableHead>
<TableHead>SwitchOn</TableHead>
<TableHead className="text-right">Action</TableHead>
</TableRow>
</TableHeader>
<TableBody >
{rules.map((rule) => (
<TableRow key={rule.id} className={`${!rule.switchOn && "opacity-50"}`} >
<TableCell className={`font-medium`}>{rule.title}</TableCell>
<TableCell>{rule.time.toString() + " " + rule.unit}</TableCell>
<TableCell>
<Switch
checked={rule.switchOn}
onCheckedChange={() => onCheckedChange(rule.id, !rule.switchOn)}
/></TableCell>
<TableCell className="text-right flex items-center justify-end gap-3">
<CiEdit className="h-5 w-5" onClick={() => handleEdit(rule.id)} />
<MdDeleteForever className="h-5 w-5" onClick={() => handleRemove(rule.id)} />
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</>
)
}
export default RuleTable