Skip to content

Commit 0c28d63

Browse files
responsibility changes are shown in realtime
1 parent d7398cc commit 0c28d63

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

src/client/components/Courses/Course/index.tsx

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Edit, OpenInNew } from '@mui/icons-material'
22
import { Alert, Box, Button, Checkbox, Container, FormControlLabel, Input, Modal, Paper, Skeleton, Stack, Tab, TextField, Tooltip, Typography } from '@mui/material'
33
import { enqueueSnackbar } from 'notistack'
4-
import { useState } from 'react'
4+
import { useEffect, useState } from 'react'
55
import { useTranslation } from 'react-i18next'
66
import { Form, Link, Route, Routes, useParams } from 'react-router-dom'
77

@@ -10,7 +10,7 @@ import useCourse from '../../../hooks/useCourse'
1010
import useCurrentUser from '../../../hooks/useCurrentUser'
1111
import { useCreatePromptMutation, useDeletePromptMutation } from '../../../hooks/usePromptMutation'
1212
import usePrompts from '../../../hooks/usePrompts'
13-
import type { Message as MessageType } from '../../../types'
13+
import type { Message as MessageType, Responsebility } from '../../../types'
1414
import Conversation from '../../Chat/Conversation'
1515
import SystemMessage from '../../Chat/SystemMessage'
1616
import Rag from '../../Rag/Rag'
@@ -28,19 +28,23 @@ const Course = () => {
2828
const [showTeachers, setShowTeachers] = useState(false)
2929

3030
const [activityPeriodFormOpen, setActivityPeriodFormOpen] = useState(false)
31-
31+
const [responsibilities, setResponsibilities] = useState<Responsebility[]>([])
3232
const { id } = useParams() as { id: string }
3333
const { t, i18n } = useTranslation()
3434

3535
const { language } = i18n
3636

3737
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)
4039
console.log(course)
4140
if (error) {
4241
return <ApiErrorView error={error} />
4342
}
43+
useEffect(() => {
44+
if(isCourseSuccess){
45+
setResponsibilities(course?.responsibilities)
46+
}
47+
}, [isCourseSuccess])
4448

4549
if (userLoading || !user || !isCourseSuccess) return null
4650

@@ -103,10 +107,20 @@ const Course = () => {
103107
const handleAddResponsible = async (e) => {
104108
e.preventDefault()
105109
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+
107117
}
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+
}
110124
}
111125
return (
112126
<Container sx={{ mt: '4rem', mb: '10rem' }} maxWidth="xl">
@@ -198,8 +212,7 @@ const Course = () => {
198212
<Button type={'submit'}>Lisää</Button>
199213
</Form>
200214
<Stack sx={{margin: 1, padding: 1, borderColor: 'gray', borderWidth: 1, borderStyle: 'solid'}}>
201-
202-
{course.responsibilities.map((responsibility) => (
215+
{responsibilities.map((responsibility) => (
203216
<Box key={responsibility.id} sx={{display: 'flex', alignItems: 'center', padding: 1}}>
204217
<Typography>{responsibility.user.last_name} {responsibility.user.first_names}</Typography>
205218
<AssignedResponsibilityManagement handleRemove={() => {handleRemoveResponsibility(responsibility)}} responsibility={responsibility}/>
@@ -239,10 +252,12 @@ const Course = () => {
239252
const AssignedResponsibilityManagement = ({responsibility, handleRemove}) => {
240253
const { t, i18n } = useTranslation()
241254
if(!responsibility.createdByUserId){
242-
return (<></>)
243-
}
255+
return (
256+
<Stack direction={'row'} sx={{marginLeft: 'auto', alignItems: 'center', height: '1rem'}} >
257+
</Stack>
258+
)}
244259
return (
245-
<Stack direction={'row'} sx={{marginLeft: 'auto', alignItems: 'center'}} >
260+
<Stack direction={'row'} sx={{marginLeft: 'auto', alignItems: 'center', height: '1rem'}} >
246261
<Typography>{t('course:customResponsibility')}</Typography>
247262
<Button onClick={handleRemove}>{t('course:remove')}</Button>
248263
</Stack>

src/client/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,9 @@ export interface Enrolment {
107107
}
108108
}
109109

110-
interface Responsebility {
110+
export interface Responsebility {
111111
id: string
112+
createdByUserId: string | null
112113
user: {
113114
id: string
114115
username: string

src/server/routes/course.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,19 @@ courseRouter.post('/:id/responsibilities/assign', async (req, res) => {
364364
createdByUserId: user.id,
365365
})
366366

367-
res.json(createdResponsibility)
367+
const responsibilityToReturn = {
368+
id: createdResponsibility.id,
369+
createdByUserId: createdResponsibility.createdByUserId,
370+
user: {
371+
id: userToAssign.id,
372+
first_names: userToAssign.firstNames,
373+
last_name: userToAssign.lastName,
374+
username: userToAssign.username
375+
}
376+
}
377+
378+
379+
res.json(responsibilityToReturn)
368380
})
369381

370382
courseRouter.post('/:id/responsibilities/remove', async (req, res) => {

0 commit comments

Comments
 (0)