1
1
import { Edit , OpenInNew } from '@mui/icons-material'
2
2
import { Alert , Box , Button , Checkbox , Container , FormControlLabel , Input , Modal , Paper , Skeleton , Stack , Tab , TextField , Tooltip , Typography } from '@mui/material'
3
3
import { enqueueSnackbar } from 'notistack'
4
- import { useState } from 'react'
4
+ import { useEffect , useState } from 'react'
5
5
import { useTranslation } from 'react-i18next'
6
6
import { Form , Link , Route , Routes , useParams } from 'react-router-dom'
7
7
@@ -10,7 +10,7 @@ import useCourse from '../../../hooks/useCourse'
10
10
import useCurrentUser from '../../../hooks/useCurrentUser'
11
11
import { useCreatePromptMutation , useDeletePromptMutation } from '../../../hooks/usePromptMutation'
12
12
import usePrompts from '../../../hooks/usePrompts'
13
- import type { Message as MessageType } from '../../../types'
13
+ import type { Message as MessageType , Responsebility } from '../../../types'
14
14
import Conversation from '../../Chat/Conversation'
15
15
import SystemMessage from '../../Chat/SystemMessage'
16
16
import Rag from '../../Rag/Rag'
@@ -28,19 +28,23 @@ const Course = () => {
28
28
const [ showTeachers , setShowTeachers ] = useState ( false )
29
29
30
30
const [ activityPeriodFormOpen , setActivityPeriodFormOpen ] = useState ( false )
31
-
31
+ const [ responsibilities , setResponsibilities ] = useState < Responsebility [ ] > ( [ ] )
32
32
const { id } = useParams ( ) as { id : string }
33
33
const { t, i18n } = useTranslation ( )
34
34
35
35
const { language } = i18n
36
36
37
37
const { user, isLoading : userLoading } = useCurrentUser ( )
38
-
39
- const { data : course , isSuccess : isCourseSuccess , error } = useCourse ( id )
38
+ const { data : course , isSuccess : isCourseSuccess , error, refetch : refetchCourse } = useCourse ( id )
40
39
console . log ( course )
41
40
if ( error ) {
42
41
return < ApiErrorView error = { error } />
43
42
}
43
+ useEffect ( ( ) => {
44
+ if ( isCourseSuccess ) {
45
+ setResponsibilities ( course ?. responsibilities )
46
+ }
47
+ } , [ isCourseSuccess ] )
44
48
45
49
if ( userLoading || ! user || ! isCourseSuccess ) return null
46
50
@@ -103,10 +107,20 @@ const Course = () => {
103
107
const handleAddResponsible = async ( e ) => {
104
108
e . preventDefault ( )
105
109
const username = e . target . username . value
106
- apiClient . post ( `/courses/${ course . id } /responsibilities/assign` , { username : username } )
110
+ const result = await apiClient . post ( `/courses/${ course . id } /responsibilities/assign` , { username : username } )
111
+ if ( result . status === 200 ) {
112
+ const responsibility = result . data
113
+ setResponsibilities ( [ ...responsibilities , responsibility ] )
114
+ refetchCourse ( )
115
+ }
116
+
107
117
}
108
- const handleRemoveResponsibility = ( responsibility ) => {
109
- apiClient . post ( `/courses/${ course . id } /responsibilities/remove` , { username : responsibility . user ?. username } )
118
+ const handleRemoveResponsibility = async ( responsibility ) => {
119
+ const result = await apiClient . post ( `/courses/${ course . id } /responsibilities/remove` , { username : responsibility . user ?. username } )
120
+ if ( result . status === 200 ) {
121
+ const filteredResponsibilities = responsibilities . filter ( ( r ) => r . id !== responsibility . id )
122
+ setResponsibilities ( filteredResponsibilities )
123
+ }
110
124
}
111
125
return (
112
126
< Container sx = { { mt : '4rem' , mb : '10rem' } } maxWidth = "xl" >
@@ -198,8 +212,7 @@ const Course = () => {
198
212
< Button type = { 'submit' } > Lisää</ Button >
199
213
</ Form >
200
214
< Stack sx = { { margin : 1 , padding : 1 , borderColor : 'gray' , borderWidth : 1 , borderStyle : 'solid' } } >
201
-
202
- { course . responsibilities . map ( ( responsibility ) => (
215
+ { responsibilities . map ( ( responsibility ) => (
203
216
< Box key = { responsibility . id } sx = { { display : 'flex' , alignItems : 'center' , padding : 1 } } >
204
217
< Typography > { responsibility . user . last_name } { responsibility . user . first_names } </ Typography >
205
218
< AssignedResponsibilityManagement handleRemove = { ( ) => { handleRemoveResponsibility ( responsibility ) } } responsibility = { responsibility } />
@@ -239,10 +252,12 @@ const Course = () => {
239
252
const AssignedResponsibilityManagement = ( { responsibility, handleRemove} ) => {
240
253
const { t, i18n } = useTranslation ( )
241
254
if ( ! responsibility . createdByUserId ) {
242
- return ( < > </ > )
243
- }
255
+ return (
256
+ < Stack direction = { 'row' } sx = { { marginLeft : 'auto' , alignItems : 'center' , height : '1rem' } } >
257
+ </ Stack >
258
+ ) }
244
259
return (
245
- < Stack direction = { 'row' } sx = { { marginLeft : 'auto' , alignItems : 'center' } } >
260
+ < Stack direction = { 'row' } sx = { { marginLeft : 'auto' , alignItems : 'center' , height : '1rem' } } >
246
261
< Typography > { t ( 'course:customResponsibility' ) } </ Typography >
247
262
< Button onClick = { handleRemove } > { t ( 'course:remove' ) } </ Button >
248
263
</ Stack >
0 commit comments