@@ -6,119 +6,160 @@ import Image from "next/image";
6
6
import Link from "next/link" ;
7
7
import { color } from 'framer-motion' ;
8
8
9
- const AddFolderForm = ( { onAddFolder } ) => {
9
+ async function createFolder ( name , location , userId ) {
10
+ const res = await fetch ( `http://127.0.0.1:8080/api/collection/create/${ userId } ` , {
11
+ method : "POST" ,
12
+ headers : {
13
+ "Content-Type" : "application/json" ,
14
+ "Access-Control-Allow-Origin" : "*" ,
15
+ } ,
16
+ mode : "cors" ,
17
+ body : JSON . stringify ( {
18
+ name : name ,
19
+ location : location ,
20
+ } ) ,
21
+ } ) ;
22
+ const data = await res . json ( ) ;
23
+ console . log ( "CREATE FOLDER" , data ) ;
24
+
25
+ }
26
+
27
+
28
+ const AddFolderForm = ( { onAddFolder, folders, setFolders } ) => {
10
29
const [ showForm , setShowForm ] = useState ( false ) ;
11
- const [ folders , setFolders ] = useState ( [ ] ) ;
30
+ // const [folders, setFolders] = useState([]);
12
31
const initialValues = {
13
32
folderName : '' ,
14
33
location : '' ,
15
34
} ;
16
35
17
- const handleSubmit = ( values , { resetForm } ) => {
36
+ const handleSubmit = async ( values , { resetForm } ) => {
18
37
console . log ( 'Submitted values:' , values ) ;
19
38
20
- const newFolder = {
39
+ const newFolder = {
21
40
id : new Date ( ) . getTime ( ) ,
22
41
folderName : values . folderName ,
23
42
location : values . location ,
24
43
} ;
25
44
26
- setFolders ( ( prevFolders ) => [ ...prevFolders , newFolder ] ) ;
27
- onAddFolder ( newFolder ) ;
45
+ await createFolder ( values . folderName , values . location , 1 ) ;
46
+
47
+ // setFolders((prevFolders) => [...prevFolders, newFolder]);
48
+ // onAddFolder(newFolder);
49
+
50
+ // refresh page
51
+ window . location . reload ( ) ;
52
+
53
+
54
+
55
+
28
56
resetForm ( ) ;
29
57
setShowForm ( false ) ;
30
58
} ;
31
59
32
- const handleDeleteFolder = ( folderId ) => {
33
- setFolders ( ( prevFolders ) => prevFolders . filter ( ( folder ) => folder . id !== folderId ) ) ;
34
- console . log ( 'Deleting folder with id:' , folderId ) ;
60
+ async function deleteFolder ( folderId ) {
61
+ const res = await fetch ( `http://127.0.0.1:8080/api/collection/delete/${ folderId } ` , {
62
+ method : "DELETE" ,
63
+ headers : {
64
+ "Content-Type" : "application/json" ,
65
+ "Access-Control-Allow-Origin" : "*" ,
66
+ } ,
67
+ mode : "cors" ,
68
+ } ) ;
69
+ const data = await res . json ( ) ;
70
+ console . log ( "DELETE FOLDER" , data ) ;
71
+ }
72
+
73
+
74
+ const handleDeleteFolder = async ( folderId ) => {
75
+ await deleteFolder ( folderId ) ;
76
+ // refresh page
77
+ window . location . reload ( ) ;
35
78
} ;
36
79
37
80
return (
38
81
< div >
39
82
< Button variant = "outlined" color = "primary" onClick = { ( ) => setShowForm ( true ) } >
40
83
New Folder
41
84
</ Button >
42
-
85
+
43
86
{ showForm && (
44
87
< Formik initialValues = { initialValues } onSubmit = { handleSubmit } >
45
-
88
+
46
89
< Form style = { { display : 'flex' , flexDirection : 'column' , alignItems : 'center' } } >
47
90
< div style = { { display : 'flex' , flexDirection : 'column' , maxWidth : '300px' } } >
48
- < Field
49
- name = "folderName"
50
- label = "Folder Name"
51
- as = { TextField }
52
- variant = "outlined"
53
- margin = "normal"
54
- required
55
- fullWidth
56
- />
57
- < Field
58
- name = "location"
59
- label = "Location"
60
- as = { TextField }
61
- variant = "outlined"
62
- margin = "normal"
63
- required
64
- fullWidth
65
- />
66
-
91
+ < Field
92
+ name = "folderName"
93
+ label = "Folder Name"
94
+ as = { TextField }
95
+ variant = "outlined"
96
+ margin = "normal"
97
+ required
98
+ fullWidth
99
+ />
100
+ < Field
101
+ name = "location"
102
+ label = "Location"
103
+ as = { TextField }
104
+ variant = "outlined"
105
+ margin = "normal"
106
+ required
107
+ fullWidth
108
+ />
109
+
67
110
< Button type = "submit" variant = "outlined" color = "info" style = { { marginTop : '10px' } } >
68
111
Create Folder
69
112
</ Button >
70
113
< Button variant = "outlined" color = "info" onClick = { ( ) => setShowForm ( false ) } style = { { marginTop : '10px' } } >
71
114
Cancel
72
115
</ Button >
73
116
</ div >
74
-
117
+
75
118
</ Form >
76
-
119
+
77
120
</ Formik >
78
121
) }
79
122
80
- < div style = { { display : 'flex' , flexWrap : 'wrap' , marginTop : '20px' , marginLeft : '20%' } } >
81
- { folders . map ( ( folder ) => (
82
-
83
-
84
- < div style = { { textDecoration : 'none' , color : 'inherit' } } >
85
- < Card style = { { width : '100px' , margin : '10px' , position : 'relative' } } >
86
- < CardMedia
87
- component = "img"
88
- height = "140"
89
- image = "/folder.jpg"
90
- alt = "Folder Image"
91
- />
92
- < Link
93
- href = { {
94
- pathname : "/DirPage" ,
95
- query : {
96
- name : folder . folderName ,
97
- } ,
98
- } }
99
- key = { folder . id }
100
- passHref
101
- >
102
- < CardContent >
103
- < div style = { { display : 'flex' , justifyContent : 'space-between' , alignItems : 'center' } } >
104
-
105
-
106
- </ div >
107
- < span > { folder . folderName } </ span >
108
- </ CardContent >
109
- </ Link >
110
- < IconButton onClick = { ( ) => handleDeleteFolder ( folder . id ) } size = "small" style = { { position : 'absolute' , top : '5px' , right : '5px' } } >
111
- < Delete />
112
- </ IconButton >
113
- </ Card >
114
- </ div >
115
-
116
-
117
123
118
-
119
- ) ) }
124
+ < div style = { { display : 'flex' , flexWrap : 'wrap' , marginTop : '20px' , marginLeft : '20%' } } >
125
+ { Array . from ( new Set ( folders . map ( folder => folder . folderName ) ) ) . map ( uniqueFolderName => {
126
+ const folder = folders . find ( f => f . folderName === uniqueFolderName ) ;
127
+
128
+ return (
129
+ < div key = { folder . id } style = { { textDecoration : 'none' , color : 'inherit' } } >
130
+ < Card style = { { width : '100px' , margin : '10px' , position : 'relative' } } >
131
+ < CardMedia
132
+ component = "img"
133
+ height = "140"
134
+ image = "/folder.png"
135
+ alt = "Folder Image"
136
+ />
137
+ < Link
138
+ href = { {
139
+ pathname : "/DirPage" ,
140
+ query : {
141
+ name : folder . folderName ,
142
+ id : folder . id ,
143
+ } ,
144
+ } }
145
+ passHref
146
+ >
147
+ < CardContent >
148
+ < div style = { { display : 'flex' , justifyContent : 'space-between' , alignItems : 'center' } } > </ div >
149
+ < span > { folder . folderName } </ span >
150
+ </ CardContent >
151
+ </ Link >
152
+ < IconButton onClick = { ( ) => handleDeleteFolder ( folder . id ) } size = "small" style = { { position : 'absolute' , top : '5px' , right : '5px' } } >
153
+ < Delete />
154
+ </ IconButton >
155
+ </ Card >
156
+ </ div >
157
+ ) ;
158
+ } ) }
120
159
</ div >
160
+
121
161
</ div >
162
+
122
163
) ;
123
164
} ;
124
165
0 commit comments