Skip to content

Commit 8867228

Browse files
committed
fix prompt creation in course view (again)
1 parent 517fdc2 commit 8867228

File tree

1 file changed

+30
-48
lines changed
  • src/client/components/Courses/Course

1 file changed

+30
-48
lines changed

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

Lines changed: 30 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,9 @@
11
import { Edit, OpenInNew } from '@mui/icons-material'
2-
import {
3-
Alert,
4-
Box,
5-
Button,
6-
Checkbox,
7-
Container,
8-
FormControlLabel,
9-
Input,
10-
Modal,
11-
Paper,
12-
Skeleton,
13-
Stack,
14-
Tab,
15-
TextField,
16-
Tooltip,
17-
Typography,
18-
} from '@mui/material'
2+
import { Alert, Box, Button, Checkbox, Container, FormControlLabel, Input, Modal, Paper, Skeleton, Stack, Tab, Tooltip, Typography } from '@mui/material'
193
import { enqueueSnackbar } from 'notistack'
204
import { useEffect, useState } from 'react'
215
import { useTranslation } from 'react-i18next'
22-
import { Form, Link, Route, Routes, useParams } from 'react-router-dom'
6+
import { Link, Route, Routes, useParams } from 'react-router-dom'
237

248
import { PUBLIC_URL } from '../../../../config'
259
import useCourse from '../../../hooks/useCourse'
@@ -38,9 +22,7 @@ import { RouterTabs } from '../../common/RouterTabs'
3822
import Discussion from './Discussions'
3923
import { ApiErrorView } from '../../common/ApiErrorView'
4024
import apiClient from '../../../util/apiClient'
41-
import { t } from 'i18next'
42-
import UserTable from '../../Admin/Usage/UserTable'
43-
import UserSearch, { ActionUserSearch } from '../../Admin/UserSearch'
25+
import { ActionUserSearch } from '../../Admin/UserSearch'
4426

4527
const Course = () => {
4628
const [showTeachers, setShowTeachers] = useState(false)
@@ -53,22 +35,22 @@ const Course = () => {
5335
const { language } = i18n
5436

5537
const { user, isLoading: userLoading } = useCurrentUser()
56-
const { data: course, isSuccess: isCourseSuccess, error, refetch: refetchCourse } = useCourse(id)
57-
console.log(course)
38+
const { data: chatInstance, isSuccess: isCourseSuccess, error, refetch: refetchCourse } = useCourse(id)
39+
console.log(chatInstance)
5840
if (error) {
5941
return <ApiErrorView error={error} />
6042
}
6143
useEffect(() => {
6244
if (isCourseSuccess) {
63-
setResponsibilities(course?.responsibilities)
45+
setResponsibilities(chatInstance?.responsibilities)
6446
}
6547
}, [isCourseSuccess])
6648

6749
if (userLoading || !user || !isCourseSuccess) return null
6850

69-
const studentLink = `${window.location.origin}${PUBLIC_URL}/${course.courseId}`
51+
const studentLink = `${window.location.origin}${PUBLIC_URL}/${chatInstance.courseId}`
7052

71-
const amongResponsibles = course.responsibilities ? course.responsibilities.some((r) => r.user.id === user.id) : false
53+
const amongResponsibles = chatInstance.responsibilities ? chatInstance.responsibilities.some((r) => r.user.id === user.id) : false
7254

7355
if (!user.isAdmin && !amongResponsibles) {
7456
return (
@@ -83,13 +65,14 @@ const Course = () => {
8365
enqueueSnackbar(t('linkCopied'), { variant: 'info' })
8466
}
8567

86-
const courseEnabled = course.usageLimit > 0
68+
const courseEnabled = chatInstance.usageLimit > 0
8769

88-
const isCourseActive = courseEnabled && Date.parse(course.activityPeriod.endDate) > Date.now() && Date.parse(course.activityPeriod.startDate) <= Date.now()
70+
const isCourseActive =
71+
courseEnabled && Date.parse(chatInstance.activityPeriod.endDate) > Date.now() && Date.parse(chatInstance.activityPeriod.startDate) <= Date.now()
8972

90-
const willBeEnabled = courseEnabled && Date.parse(course.activityPeriod.startDate) > Date.now()
73+
const willBeEnabled = courseEnabled && Date.parse(chatInstance.activityPeriod.startDate) > Date.now()
9174

92-
const wasEnabled = courseEnabled && Date.parse(course.activityPeriod.endDate) < Date.now()
75+
const wasEnabled = courseEnabled && Date.parse(chatInstance.activityPeriod.endDate) < Date.now()
9376

9477
const getInfoSeverity = () => {
9578
if (!courseEnabled) return 'warning'
@@ -100,8 +83,8 @@ const Course = () => {
10083
const getInfoMessage = () => {
10184
if (!courseEnabled) return t('course:curreNotOpen')
10285
if (isCourseActive) return t('course:curreOpen')
103-
if (willBeEnabled) return `${t('course:curreWillBeOpen')} ${course.activityPeriod.startDate}`
104-
if (wasEnabled) return `${t('course:curreWasOpen')} ${course.activityPeriod.endDate}`
86+
if (willBeEnabled) return `${t('course:curreWillBeOpen')} ${chatInstance.activityPeriod.startDate}`
87+
if (wasEnabled) return `${t('course:curreWasOpen')} ${chatInstance.activityPeriod.endDate}`
10588
return ''
10689
}
10790

@@ -124,15 +107,15 @@ const Course = () => {
124107
}
125108
const handleAddResponsible = async (user: User) => {
126109
const username = user.username
127-
const result = await apiClient.post(`/courses/${course.id}/responsibilities/assign`, { username: username })
110+
const result = await apiClient.post(`/courses/${chatInstance.id}/responsibilities/assign`, { username: username })
128111
if (result.status === 200) {
129112
const responsibility = result.data
130113
setResponsibilities([...responsibilities, responsibility])
131114
refetchCourse()
132115
}
133116
}
134117
const handleRemoveResponsibility = async (responsibility) => {
135-
const result = await apiClient.post(`/courses/${course.id}/responsibilities/remove`, { username: responsibility.user?.username })
118+
const result = await apiClient.post(`/courses/${chatInstance.id}/responsibilities/remove`, { username: responsibility.user?.username })
136119
if (result.status === 200) {
137120
const filteredResponsibilities = responsibilities.filter((r) => r.id !== responsibility.id)
138121
setResponsibilities(filteredResponsibilities)
@@ -155,33 +138,33 @@ const Course = () => {
155138
>
156139
<div style={{ display: 'flex', flexWrap: 'wrap' }}>
157140
<div style={{ ...full, boxSizing: 'border-box', height: '50px' }}>
158-
<Typography variant="h5">{course.name[language]}</Typography>
141+
<Typography variant="h5">{chatInstance.name[language]}</Typography>
159142
</div>
160143

161144
<div style={{ ...left, boxSizing: 'border-box', height: '50px' }}>
162-
<Typography>{course.courseUnits.map((cu) => cu.code).join(', ')}</Typography>
145+
<Typography>{chatInstance.courseUnits.map((cu) => cu.code).join(', ')}</Typography>
163146
</div>
164147
<div style={{ ...right, boxSizing: 'border-box', height: '50px' }}>
165-
<Typography style={{ fontStyle: 'italic' }}>{getCurTypeLabel(course.courseUnitRealisationTypeUrn ?? '', language)}</Typography>
148+
<Typography style={{ fontStyle: 'italic' }}>{getCurTypeLabel(chatInstance.courseUnitRealisationTypeUrn ?? '', language)}</Typography>
166149
</div>
167150

168151
<div style={{ ...left, boxSizing: 'border-box' }}>
169152
<Typography>
170-
{t('active')} {formatDate(course.activityPeriod)}
153+
{t('active')} {formatDate(chatInstance.activityPeriod)}
171154
</Typography>
172155
</div>
173156

174157
<div style={{ ...right, boxSizing: 'border-box' }}>
175-
<Link to={`https://studies.helsinki.fi/kurssit/toteutus/${course.courseId}`} target="_blank">
158+
<Link to={`https://studies.helsinki.fi/kurssit/toteutus/${chatInstance.courseId}`} target="_blank">
176159
{t('course:coursePage')} <OpenInNew fontSize="small" />
177160
</Link>
178161
</div>
179162

180163
{courseEnabled && (
181164
<div style={{ ...left, boxSizing: 'border-box' }}>
182165
<Typography>
183-
{t('admin:model')}: {course.model} <span style={{ marginRight: 20 }} />
184-
{t('admin:usageLimit')}: {course.usageLimit}
166+
{t('admin:model')}: {chatInstance.model} <span style={{ marginRight: 20 }} />
167+
{t('admin:usageLimit')}: {chatInstance.usageLimit}
185168
</Typography>
186169
</div>
187170
)}
@@ -267,8 +250,7 @@ const Course = () => {
267250
height: '80vh',
268251
background: 'white',
269252
padding: '2rem',
270-
overflowY: 'scroll'
271-
253+
overflowY: 'scroll',
272254
}}
273255
>
274256
<ActionUserSearch
@@ -282,7 +264,7 @@ const Course = () => {
282264
</Modal>
283265

284266
<Modal open={activityPeriodFormOpen} onClose={() => setActivityPeriodFormOpen(false)}>
285-
<EditCourseForm course={course} setOpen={setActivityPeriodFormOpen} user={user} />
267+
<EditCourseForm course={chatInstance} setOpen={setActivityPeriodFormOpen} user={user} />
286268
</Modal>
287269

288270
<Box my={2}>
@@ -297,15 +279,15 @@ const Course = () => {
297279
<Routes>
298280
<Route path="/" element={<Stats courseId={id} />} />
299281
<Route path={`/discussions/*`} element={<Discussion />} />
300-
<Route path="/prompts" element={<Prompts courseId={id} />} />
282+
<Route path="/prompts" element={<Prompts courseId={id} chatInstanceId={chatInstance.id} />} />
301283
<Route path="/rag" element={<Rag />} />
302284
</Routes>
303285
</Container>
304286
)
305287
}
306288

307289
const AssignedResponsibilityManagement = ({ responsibility, handleRemove }) => {
308-
const { t, i18n } = useTranslation()
290+
const { t } = useTranslation()
309291
if (!responsibility.createdByUserId) {
310292
return <Stack direction={'row'} sx={{ marginLeft: 'auto', alignItems: 'center', height: '1rem' }}></Stack>
311293
}
@@ -317,7 +299,7 @@ const AssignedResponsibilityManagement = ({ responsibility, handleRemove }) => {
317299
)
318300
}
319301

320-
const Prompts = ({ courseId }: { courseId: string }) => {
302+
const Prompts = ({ courseId, chatInstanceId }: { courseId: string; chatInstanceId: string }) => {
321303
const { t } = useTranslation()
322304
const [name, setName] = useState('')
323305
const [system, setSystem] = useState('')
@@ -343,7 +325,7 @@ const Prompts = ({ courseId }: { courseId: string }) => {
343325
const handleSave = async () => {
344326
try {
345327
await createMutation.mutateAsync({
346-
chatInstanceId: courseId,
328+
chatInstanceId,
347329
type: 'CHAT_INSTANCE',
348330
name,
349331
systemMessage: system,

0 commit comments

Comments
 (0)