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
+ const handleConfirmDelete = ( ) => {
101
+ deleteSession ( {
102
+ variables : {
103
+ ID : sessionToDelete ,
104
+ } ,
105
+ } )
106
+ . then ( ( ) => {
107
+ setDeleteSessionModel ( false ) ;
108
+ setSessionToDelete ( '' ) ;
109
+ } )
110
+ . catch ( ( error ) => {
111
+ console . error ( 'Error deleting session:' , error ) ;
112
+ } ) ;
113
+ } ;
28
114
29
- const data = SessionData ;
30
115
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' } ,
116
+ { Header : t ( 'Sessionname' ) , accessor : 'Sessionname' } ,
117
+ { Header : t ( 'description' ) , accessor : 'description' } ,
118
+ { Header : t ( 'platform' ) , accessor : 'platform' } ,
119
+ { Header : t ( 'duration' ) , accessor : 'duration' } ,
120
+ { Header : t ( 'organizer' ) , accessor : 'organizer' } ,
121
+
36
122
{
37
123
Header : 'Action' ,
38
124
accessor : '' ,
39
- Cell : ( ) => < Icon icon = "entypo:dots-three-vertical" color = "#9e85f5" /> ,
125
+ Cell : ( { row } : any ) => (
126
+ < div className = { `items-center${ row . length > 0 ? ' flex' : ' flex' } ` } >
127
+ < Icon
128
+ icon = "el:file-edit-alt"
129
+ className = "mr-2"
130
+ width = "25"
131
+ height = "25"
132
+ cursor = "pointer"
133
+ color = "#9e85f5"
134
+ />
135
+ < Icon
136
+ icon = "mdi:trash-can"
137
+ width = "30"
138
+ height = "30"
139
+ cursor = "pointer"
140
+ color = "#9e85f5"
141
+ onClick = { ( ) => handleDeleteSession ( row . original . id ) }
142
+ />
143
+ </ div >
144
+ ) ,
40
145
} ,
41
146
] ;
42
147
148
+ const removeModel = ( ) => {
149
+ let newState = ! addSessionModel ;
150
+ setAddSessionModel ( newState ) ;
151
+ } ;
152
+
153
+ const removeDeleteModel = ( ) => {
154
+ let newState = ! deleteSessionModel ;
155
+ setDeleteSessionModel ( newState ) ;
156
+ } ;
157
+
43
158
return (
44
159
< >
45
160
{ /* =========================== Start:: add Session Model =============================== */ }
@@ -61,29 +176,35 @@ const AdminSission = () => {
61
176
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
62
177
< input
63
178
type = "text"
64
- name = "name "
179
+ name = "Sessionname "
65
180
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
181
placeholder = { t ( 'SessionName' ) }
182
+ onChange = { handleInputChange }
183
+ value = { sessionInput . Sessionname }
67
184
/>
68
185
</ div >
69
186
</ div >
70
187
< div className = "input my-3 h-9 " >
71
188
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
72
189
< input
73
190
type = "text"
74
- name = "name "
191
+ name = "description "
75
192
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' ) }
193
+ placeholder = { t ( 'description' ) }
194
+ onChange = { handleInputChange }
195
+ value = { sessionInput . description }
77
196
/>
78
197
</ div >
79
198
</ div >
80
199
< div className = "input my-3 h-9 " >
81
200
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
82
201
< input
83
202
type = "text"
84
- name = "name "
203
+ name = "platform "
85
204
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' ) }
205
+ placeholder = { t ( 'platform' ) }
206
+ onChange = { handleInputChange }
207
+ value = { sessionInput . platform }
87
208
/>
88
209
</ div >
89
210
</ div >
@@ -92,9 +213,11 @@ const AdminSission = () => {
92
213
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
93
214
< input
94
215
type = "time"
95
- name = "name "
216
+ name = "duration "
96
217
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' ) }
218
+ placeholder = { t ( 'duration' ) }
219
+ onChange = { handleInputChange }
220
+ value = { sessionInput . duration }
98
221
/>
99
222
</ div >
100
223
</ div >
@@ -103,9 +226,11 @@ const AdminSission = () => {
103
226
< div className = "grouped-input flex items-center h-full w-full rounded-md" >
104
227
< input
105
228
type = "text"
106
- name = "name "
229
+ name = "organizer "
107
230
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' ) }
231
+ placeholder = { t ( 'organizer' ) }
232
+ onChange = { handleInputChange }
233
+ value = { sessionInput . organizer }
109
234
/>
110
235
</ div >
111
236
</ div >
@@ -114,19 +239,17 @@ const AdminSission = () => {
114
239
variant = "info"
115
240
size = "sm"
116
241
style = "w-[30%] md:w-1/4 text-sm font-sans"
117
- data-testid = "remove"
118
- onClick = { ( ) => removeModel ( ) }
242
+ onClick = { toggleAddSessionModel }
119
243
>
120
- { ' ' }
121
- { t ( 'Cancel' ) } { ' ' }
244
+ { t ( 'Cancel' ) }
122
245
</ Button >
123
246
< Button
124
247
variant = "primary"
125
248
size = "sm"
126
249
style = "w-[30%] md:w-1/4 text-sm font-sans"
250
+ onClick = { handleSaveSession }
127
251
>
128
- { ' ' }
129
- { t ( 'Save' ) } { ' ' }
252
+ { t ( 'Save' ) }
130
253
</ Button >
131
254
</ div >
132
255
</ form >
@@ -160,16 +283,15 @@ const AdminSission = () => {
160
283
variant = "info"
161
284
size = "sm"
162
285
style = "w-[30%] md:w-1/4 text-sm font-sans"
163
- data-testid = "delete"
164
- onClick = { ( ) => removeDeleteModel ( ) }
286
+ onClick = { removeDeleteModel }
165
287
>
166
- { ' ' }
167
- { t ( 'Cancel' ) } { ' ' }
288
+ { t ( 'Cancel' ) }
168
289
</ Button >
169
290
< Button
170
- variant = "danger "
291
+ variant = "primary "
171
292
size = "sm"
172
293
style = "w-[30%] md:w-1/4 text-sm font-sans"
294
+ onClick = { handleConfirmDelete }
173
295
>
174
296
{ ' ' }
175
297
{ t ( 'Delete' ) } { ' ' }
@@ -291,12 +413,16 @@ const AdminSission = () => {
291
413
</ Button >
292
414
</ div >
293
415
</ div >
294
- < div className = "" >
295
- < DataTable
296
- data = { data }
297
- columns = { columns }
298
- title = "Developers list"
299
- />
416
+ < div >
417
+ { loading ? (
418
+ < div > Loading...</ div >
419
+ ) : (
420
+ < DataTable
421
+ data = { getSessionModel }
422
+ columns = { columns }
423
+ title = { t ( 'Sessions List' ) }
424
+ />
425
+ ) }
300
426
</ div >
301
427
</ div >
302
428
</ div >
0 commit comments