forked from YJU-OKURA/project_minori-next-deployment-repo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMaterialList.tsx
104 lines (97 loc) · 3.13 KB
/
MaterialList.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
import {useEffect, useState} from 'react';
import Image from 'next/image';
import Link from 'next/link';
import MaterialForm from './MaterialForm';
import deleteMaterial from '@/src/api/material/deleteMaterial';
import postPromptAccess from '@/src/api/prompts/postPromptAccess';
import {Material, ParamsProps} from '@/src/interfaces/navbar';
import icons from '@/public/svgs/navbar';
const MaterialList = ({
materials,
params,
cId,
}: {
materials: Material[];
params: ParamsProps;
cId: string | null;
}) => {
const [isToggleOpen, setIsToggleOpen] = useState<boolean[]>([]);
const [isOpen, setIsOpen] = useState<boolean>(false);
const [editData, setEditData] = useState<Material>();
const handleClickSubject = (mId: number) => {
if (materials[mId] && materials[mId].prompts.length === 0 && cId) {
postPromptAccess(parseInt(cId), mId);
}
};
const toggleDropdown = (index: number) => {
setIsToggleOpen(prev =>
prev.map((open, i) => (i === index ? !open : false))
);
};
useEffect(() => {
setIsToggleOpen(new Array(materials.length).fill(false));
}, [materials]);
const handleMaterialDelete = (mId: number) => {
deleteMaterial(1, mId);
};
return (
<div>
<ul>
{materials.map((material, index) => {
return (
<li className="relative flex mb-3 py-1 items-center" key={index}>
<Image
src={icons.book}
alt="prompt"
width={15}
height={15}
className="w-6 h-6 mr-3"
></Image>
<div
className="flex w-full items-center justify-between"
onClick={() => handleClickSubject(parseInt(material.id))}
>
<Link href={`/${params.className}/${material.name}`}>
{material.name}
</Link>
<Image
src={icons.moreHoriz}
alt="icon"
width={30}
height={30}
onClick={() => toggleDropdown(index)}
></Image>
</div>
{isToggleOpen[index] ? (
<div className="absolute top-[32px] right-0 z-20 bg-white rounded-lg overflow-hidden drop-shadow-lg">
<div
className="p-2 hover:bg-gray-200"
onClick={() => {
setEditData(material);
setIsOpen(true);
setIsToggleOpen(prev => prev.map(() => false));
}}
>
Edit Material
</div>
<div
className="p-2 hover:bg-gray-200"
onClick={() => {
handleMaterialDelete(parseInt(material.id));
}}
>
Delete
</div>
</div>
) : null}
</li>
);
})}
{isOpen ? (
<MaterialForm setIsOpen={setIsOpen} editData={editData} />
) : null}
</ul>
</div>
);
};
export default MaterialList;