1
- /* eslint-disable */
2
1
import { Icon } from '@iconify/react' ;
3
- import React , { useState } from 'react' ;
2
+ import React , { useState , useEffect } from 'react' ;
4
3
import { useTranslation } from 'react-i18next' ;
5
4
import DataTable from '../../components/DataTable' ;
6
- import Sidebar from '../../components/Sidebar' ;
7
- import SessionData from '../../dummyData/session.json' ;
8
5
import useDocumentTitle from '../../hook/useDocumentTitle' ;
9
6
import Button from './../../components/Buttons' ;
7
+ import { gql , useQuery , useMutation } from '@apollo/client' ;
8
+
9
+ // Define your GraphQL queries and mutations
10
+ import {
11
+ GET_SESSIONS ,
12
+ CREATE_SESSION ,
13
+ DELETE_SESSION ,
14
+ EDIT_SESSION ,
15
+ } from '../../Mutations/session' ;
16
+
17
+ interface Session {
18
+ id : string ;
19
+ Sessionname : string ;
20
+ description : string ;
21
+ platform : string ;
22
+ duration : string ;
23
+ organizer : string ;
24
+ }
10
25
11
26
const AdminSission = ( ) => {
12
27
useDocumentTitle ( 'Sessions' ) ;
13
28
const { t } = useTranslation ( ) ;
14
-
29
+ const [ getSessionModel , setSessionModel ] = useState < Session [ ] > ( [ ] ) ;
30
+ const [ addSessionModel , setAddSessionModel ] = useState ( false ) ;
15
31
const [ deleteSessionModel , setDeleteSessionModel ] = useState ( false ) ;
16
32
const [ updateTraineeModel , setUpdateTraineeModel ] = useState ( false ) ;
17
- const [ addSessionModel , setAddSessionModel ] = useState ( false ) ;
33
+ const [ sessionToDelete , setSessionToDelete ] = useState ( '' ) ;
18
34
19
- const removeModel = ( ) => {
20
- let newState = ! addSessionModel ;
21
- setAddSessionModel ( newState ) ;
35
+ const { loading, error, data } = useQuery ( GET_SESSIONS ) ;
36
+ useEffect ( ( ) => {
37
+ if ( data ) {
38
+ const allSessions = data . getAllSessions . map ( ( session : any ) => ( {
39
+ id : session . id ,
40
+ Sessionname : session . Sessionname ,
41
+ description : session . description ,
42
+ platform : session . platform ,
43
+ duration : session . duration ,
44
+ organizer : session . organizer ,
45
+ } ) ) ;
46
+
47
+ setSessionModel ( allSessions ) ;
48
+ }
49
+ } , [ data ] ) ;
50
+
51
+
52
+ const [ sessionInput , setSessionInput ] = useState ( {
53
+ Sessionname : '' ,
54
+ description : '' ,
55
+ platform : '' ,
56
+ duration : '' ,
57
+ organizer : '' ,
58
+ } ) ;
59
+
60
+ const [ createSession ] = useMutation ( CREATE_SESSION , {
61
+ onCompleted : ( data ) => {
62
+ setAddSessionModel ( false ) ;
63
+ setSessionInput ( {
64
+ Sessionname : '' ,
65
+ description : '' ,
66
+ platform : '' ,
67
+ duration : '' ,
68
+ organizer : '' ,
69
+ } ) ;
70
+ } ,
71
+ onError : ( error ) => {
72
+ console . error ( 'Error add session:' , error ) ;
73
+ } , } ) ;
74
+
75
+
76
+ const toggleAddSessionModel = ( ) => {
77
+ setAddSessionModel ( ! addSessionModel ) ;
22
78
} ;
23
- const removeDeleteModel = ( ) => {
24
- let newState = ! deleteSessionModel ;
25
- setDeleteSessionModel ( newState ) ;
79
+
80
+ const handleInputChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
81
+ const { name, value } = e . target ;
82
+ setSessionInput ( { ...sessionInput , [ name ] : value } ) ;
26
83
} ;
27
84
85
+ const handleSaveSession = ( ) => {
86
+ // console.log('sessionInput:', sessionInput);
87
+ createSession ( {
88
+ variables : {
89
+ sessionInput : sessionInput ,
90
+ } ,
91
+ } ) ;
92
+ } ;
93
+
94
+
95
+ const [ deleteSession ] = useMutation ( DELETE_SESSION ) ;
96
+ const handleDeleteSession = ( sessionId : string ) => {
97
+ setSessionToDelete ( sessionId ) ;
98
+ setDeleteSessionModel ( true ) ;
99
+ } ;
100
+
101
+ const handleConfirmDelete = ( ) => {
102
+ deleteSession ( {
103
+ variables : {
104
+ ID : sessionToDelete , // Use "ID" here instead of "id"
105
+ } ,
106
+ } )
107
+ . then ( ( ) => {
108
+ setDeleteSessionModel ( false ) ;
109
+ setSessionToDelete ( '' ) ;
110
+ } )
111
+ . catch ( ( error ) => {
112
+ console . error ( 'Error deleting session:' , error ) ;
113
+ } ) ;
114
+ } ;
115
+
28
116
29
- const data = SessionData ;
30
117
const columns = [
31
- { Header : 'Session' , accessor : 'session' } ,
32
- { Header : 'Description' , accessor : 'desc' } ,
33
- { Header : 'Platform' , accessor : 'place' } ,
34
- { Header : 'Duration' , accessor : 'duration' } ,
35
- { Header : 'Organizer' , accessor : 'organizer' } ,
118
+ { Header : t ( 'Sessionname' ) , accessor : 'Sessionname' } ,
119
+ { Header : t ( 'description' ) , accessor : 'description' } ,
120
+ { Header : t ( 'platform' ) , accessor : 'platform' } ,
121
+ { Header : t ( 'duration' ) , accessor : 'duration' } ,
122
+ { Header : t ( 'organizer' ) , accessor : 'organizer' } ,
123
+
36
124
{
37
125
Header : 'Action' ,
38
126
accessor : '' ,
39
- Cell : ( ) => < Icon icon = "entypo:dots-three-vertical" color = "#9e85f5" /> ,
127
+ Cell : ( { row } : any ) => (
128
+ < div className = { `items-center${ row . length > 0 ? ' flex' : ' flex' } ` } >
129
+ < Icon
130
+ icon = "el:file-edit-alt"
131
+ className = "mr-2"
132
+ width = "25"
133
+ height = "25"
134
+ cursor = "pointer"
135
+ color = "#9e85f5"
136
+ />
137
+ < Icon
138
+ icon = "mdi:trash-can"
139
+ width = "30"
140
+ height = "30"
141
+ cursor = "pointer"
142
+ color = "#9e85f5"
143
+ onClick = { ( ) => handleDeleteSession ( row . original . id ) }
144
+ />
145
+ </ div >
146
+ ) ,
40
147
} ,
41
148
] ;
42
149
150
+ const removeModel = ( ) => {
151
+ let newState = ! addSessionModel ;
152
+ setAddSessionModel ( newState ) ;
153
+ } ;
154
+
155
+ const removeDeleteModel = ( ) => {
156
+ let newState = ! deleteSessionModel ;
157
+ setDeleteSessionModel ( newState ) ;
158
+ } ;
159
+
43
160
return (
44
161
< >
45
162
{ /* =========================== Start:: add Session Model =============================== */ }
@@ -61,29 +178,35 @@ const AdminSission = () => {
61
178
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
62
179
< input
63
180
type = "text"
64
- name = "name "
181
+ name = "Sessionname "
65
182
className = "border border-primary rounded outline-none px-5 font-sans dark:bg-dark-frame-bg dark:text-white text-xs py-2 w-full"
66
183
placeholder = { t ( 'SessionName' ) }
184
+ onChange = { handleInputChange }
185
+ value = { sessionInput . Sessionname }
67
186
/>
68
187
</ div >
69
188
</ div >
70
189
< div className = "input my-3 h-9 " >
71
190
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
72
191
< input
73
192
type = "text"
74
- name = "name "
193
+ name = "description "
75
194
className = " border border-primary py-2 rounded outline-none px-5 dark:bg-dark-frame-bg dark:text-white font-sans text-xs w-full"
76
- placeholder = { t ( 'Description' ) }
195
+ placeholder = { t ( 'description' ) }
196
+ onChange = { handleInputChange }
197
+ value = { sessionInput . description }
77
198
/>
78
199
</ div >
79
200
</ div >
80
201
< div className = "input my-3 h-9 " >
81
202
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
82
203
< input
83
204
type = "text"
84
- name = "name "
205
+ name = "platform "
85
206
className = "border border-primary py-2 rounded dark:bg-dark-frame-bg dark:text-white outline-none px-5 font-sans text-xs w-full"
86
- placeholder = { t ( 'Platform' ) }
207
+ placeholder = { t ( 'platform' ) }
208
+ onChange = { handleInputChange }
209
+ value = { sessionInput . platform }
87
210
/>
88
211
</ div >
89
212
</ div >
@@ -92,9 +215,11 @@ const AdminSission = () => {
92
215
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
93
216
< input
94
217
type = "time"
95
- name = "name "
218
+ name = "duration "
96
219
className = "border border-primary py-2 dark:bg-dark-frame-bg dark:text-white rounded outline-none px-5 font-sans text-xs w-full"
97
- placeholder = { t ( 'Duration' ) }
220
+ placeholder = { t ( 'duration' ) }
221
+ onChange = { handleInputChange }
222
+ value = { sessionInput . duration }
98
223
/>
99
224
</ div >
100
225
</ div >
@@ -103,9 +228,11 @@ const AdminSission = () => {
103
228
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
104
229
< input
105
230
type = "text"
106
- name = "name "
231
+ name = "organizer "
107
232
className = " border border-primary py-2 dark:bg-dark-frame-bg dark:text-white rounded outline-none px-5 font-sans text-xs w-full"
108
- placeholder = { t ( 'Organizer' ) }
233
+ placeholder = { t ( 'organizer' ) }
234
+ onChange = { handleInputChange }
235
+ value = { sessionInput . organizer }
109
236
/>
110
237
</ div >
111
238
</ div >
@@ -114,19 +241,17 @@ const AdminSission = () => {
114
241
variant = "info"
115
242
size = "sm"
116
243
style = "w-[30%] md:w-1/4 text-sm font-sans"
117
- data-testid = "remove"
118
- onClick = { ( ) => removeModel ( ) }
244
+ onClick = { toggleAddSessionModel }
119
245
>
120
- { ' ' }
121
- { t ( 'Cancel' ) } { ' ' }
246
+ { t ( 'Cancel' ) }
122
247
</ Button >
123
248
< Button
124
249
variant = "primary"
125
250
size = "sm"
126
251
style = "w-[30%] md:w-1/4 text-sm font-sans"
252
+ onClick = { handleSaveSession }
127
253
>
128
- { ' ' }
129
- { t ( 'Save' ) } { ' ' }
254
+ { t ( 'Save' ) }
130
255
</ Button >
131
256
</ div >
132
257
</ form >
@@ -160,16 +285,15 @@ const AdminSission = () => {
160
285
variant = "info"
161
286
size = "sm"
162
287
style = "w-[30%] md:w-1/4 text-sm font-sans"
163
- data-testid = "delete"
164
- onClick = { ( ) => removeDeleteModel ( ) }
288
+ onClick = { removeDeleteModel }
165
289
>
166
- { ' ' }
167
- { t ( 'Cancel' ) } { ' ' }
290
+ { t ( 'Cancel' ) }
168
291
</ Button >
169
292
< Button
170
- variant = "danger "
293
+ variant = "primary "
171
294
size = "sm"
172
295
style = "w-[30%] md:w-1/4 text-sm font-sans"
296
+ onClick = { handleConfirmDelete }
173
297
>
174
298
{ ' ' }
175
299
{ t ( 'Delete' ) } { ' ' }
@@ -291,12 +415,16 @@ const AdminSission = () => {
291
415
</ Button >
292
416
</ div >
293
417
</ div >
294
- < div className = "" >
295
- < DataTable
296
- data = { data }
297
- columns = { columns }
298
- title = "Developers list"
299
- />
418
+ < div >
419
+ { loading ? (
420
+ < div > Loading...</ div >
421
+ ) : (
422
+ < DataTable
423
+ data = { getSessionModel }
424
+ columns = { columns }
425
+ title = { t ( 'Sessions List' ) }
426
+ />
427
+ ) }
300
428
</ div >
301
429
</ div >
302
430
</ div >
0 commit comments