@@ -7,23 +7,38 @@ import { Label } from "@/components/ui/label";
7
7
8
8
const backendUrl = import . meta. env . VITE_BACKEND_URL || 'http://localhost:5000' ;
9
9
10
+ interface Project {
11
+ id ?: number ;
12
+ title : string ;
13
+ description : string ;
14
+ repoLink : string ;
15
+ }
16
+
17
+ interface ProfileData {
18
+ name : string ;
19
+ bio : string ;
20
+ githubUsername : string ;
21
+ leetcodeUsername : string ;
22
+ projects : Project [ ] ;
23
+ }
24
+
10
25
interface EditProfileFormProps {
11
- onProjectAdded : ( newProject : any ) => void ;
26
+ onProjectAdded : ( newProject : Project ) => void ;
12
27
}
13
28
14
29
const EditProfileForm : React . FC < EditProfileFormProps > = ( { onProjectAdded } ) => {
15
30
const { username } = useParams < { username : string } > ( ) ;
16
- const [ profileData , setProfileData ] = useState < any > ( {
31
+ const [ profileData , setProfileData ] = useState < ProfileData > ( {
17
32
name : '' ,
18
33
bio : '' ,
19
34
githubUsername : '' ,
20
35
leetcodeUsername : '' ,
21
36
projects : [ ] ,
22
37
} ) ;
23
38
const [ isLoading , setIsLoading ] = useState ( false ) ;
24
- const [ selectedProject , setSelectedProject ] = useState < any > ( null ) ;
39
+ const [ selectedProject , setSelectedProject ] = useState < Project | null > ( null ) ;
25
40
const [ newProjectMode , setNewProjectMode ] = useState ( false ) ;
26
- const [ newProject , setNewProject ] = useState ( {
41
+ const [ newProject , setNewProject ] = useState < Project > ( {
27
42
title : '' ,
28
43
description : '' ,
29
44
repoLink : '' ,
@@ -46,7 +61,7 @@ const EditProfileForm: React.FC<EditProfileFormProps> = ({ onProjectAdded }) =>
46
61
47
62
const handleChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
48
63
const { name, value } = e . target ;
49
- setProfileData ( prevData => ( {
64
+ setProfileData ( ( prevData : ProfileData ) => ( {
50
65
...prevData ,
51
66
[ name ] : value ,
52
67
} ) ) ;
@@ -55,12 +70,12 @@ const EditProfileForm: React.FC<EditProfileFormProps> = ({ onProjectAdded }) =>
55
70
const handleProjectChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
56
71
const { name, value } = e . target ;
57
72
if ( selectedProject ) {
58
- setSelectedProject ( prevProject => ( {
73
+ setSelectedProject ( ( prevProject : Project ) => ( {
59
74
...prevProject ,
60
75
[ name ] : value ,
61
76
} ) ) ;
62
77
} else {
63
- setNewProject ( prevProject => ( {
78
+ setNewProject ( ( prevProject : Project ) => ( {
64
79
...prevProject ,
65
80
[ name ] : value ,
66
81
} ) ) ;
@@ -93,7 +108,7 @@ const EditProfileForm: React.FC<EditProfileFormProps> = ({ onProjectAdded }) =>
93
108
const addedProject = response . data . project ;
94
109
95
110
if ( addedProject ) {
96
- setProfileData ( prevData => ( {
111
+ setProfileData ( ( prevData : ProfileData ) => ( {
97
112
...prevData ,
98
113
projects : [ ...prevData . projects , addedProject ] ,
99
114
} ) ) ;
@@ -117,9 +132,9 @@ const EditProfileForm: React.FC<EditProfileFormProps> = ({ onProjectAdded }) =>
117
132
const updatedProject = { ...selectedProject } ;
118
133
await axios . put ( `${ backendUrl } /profile/${ username } /projects/${ selectedProject . id } ` , updatedProject , { withCredentials : true } ) ;
119
134
120
- setProfileData ( prevData => ( {
135
+ setProfileData ( ( prevData : ProfileData ) => ( {
121
136
...prevData ,
122
- projects : prevData . projects . map ( ( p : any ) => p . id === selectedProject . id ? updatedProject : p ) ,
137
+ projects : prevData . projects . map ( ( p : Project ) => p . id === selectedProject . id ? updatedProject : p ) ,
123
138
} ) ) ;
124
139
setSelectedProject ( null ) ;
125
140
}
@@ -133,9 +148,9 @@ const EditProfileForm: React.FC<EditProfileFormProps> = ({ onProjectAdded }) =>
133
148
try {
134
149
const response = await axios . delete ( `${ backendUrl } /profile/${ username } /projects/${ projectId } ` , { withCredentials : true } ) ;
135
150
if ( response . status === 200 ) {
136
- setProfileData ( prevData => ( {
151
+ setProfileData ( ( prevData : ProfileData ) => ( {
137
152
...prevData ,
138
- projects : prevData . projects . filter ( ( project : any ) => project . id !== projectId ) ,
153
+ projects : prevData . projects . filter ( ( project : Project ) => project . id !== projectId ) ,
139
154
} ) ) ;
140
155
alert ( 'Project deleted successfully' ) ;
141
156
if ( selectedProject && selectedProject . id === projectId ) {
@@ -211,7 +226,7 @@ const EditProfileForm: React.FC<EditProfileFormProps> = ({ onProjectAdded }) =>
211
226
212
227
< h2 > Existing Projects</ h2 >
213
228
< ul >
214
- { profileData . projects && profileData . projects . map ( ( project , index ) => (
229
+ { profileData . projects && profileData . projects . map ( ( project : Project , index : number ) => (
215
230
project && project . title ? (
216
231
< li key = { project . id || index } >
217
232
< h3 onClick = { ( ) => setSelectedProject ( project ) } > { project . title } </ h3 >
@@ -258,7 +273,7 @@ const EditProfileForm: React.FC<EditProfileFormProps> = ({ onProjectAdded }) =>
258
273
< Button onClick = { handleUpdateProject } disabled = { isLoading } >
259
274
{ isLoading ? 'Updating...' : 'Update Project' }
260
275
</ Button >
261
- < Button onClick = { ( ) => handleDeleteProject ( selectedProject . id ) } disabled = { isLoading } >
276
+ < Button onClick = { ( ) => handleDeleteProject ( selectedProject . id ! ) } disabled = { isLoading } >
262
277
{ isLoading ? 'Deleting...' : 'Delete Project' }
263
278
</ Button >
264
279
</ div >
@@ -314,4 +329,4 @@ const EditProfileForm: React.FC<EditProfileFormProps> = ({ onProjectAdded }) =>
314
329
) ;
315
330
} ;
316
331
317
- export default EditProfileForm ;
332
+ export default EditProfileForm ;
0 commit comments