link 2 exam

This commit is contained in:
Primakov Alexandr Alexandrovich
2024-08-29 09:55:05 +03:00
parent a8195cd627
commit 5911cdf8a8
6 changed files with 137 additions and 21 deletions

View File

@@ -21,9 +21,9 @@ export const api = createApi({
init?: RequestInit | undefined,
) => {
const response = await fetch(input, init)
if (response.status === 403) keycloak.login()
return response
},
headers: {
@@ -40,8 +40,8 @@ export const api = createApi({
providesTags: ['CourseList'],
}),
createUpdateCourse: builder.mutation<
BaseResponse<Course>,
Partial<Course> & Pick<Course, 'name'>
BaseResponse<Course>,
Partial<Course> & Pick<Course, 'name'>
>({
query: (course) => ({
url: '/course',
@@ -54,8 +54,8 @@ export const api = createApi({
query: (courseId) => `/course/students/${courseId}`,
}),
manualAddStudent: builder.mutation<
BaseResponse<void>,
{ lessonId: string; user: User }
BaseResponse<void>,
{ lessonId: string; user: User }
>({
query: ({ lessonId, user }) => ({
url: `/lesson/add-student/${lessonId}`,
@@ -63,14 +63,14 @@ export const api = createApi({
body: user,
}),
}),
lessonList: builder.query<BaseResponse<Lesson[]>, string>({
query: (courseId) => `/lesson/list/${courseId}`,
providesTags: ['LessonList'],
}),
createLesson: builder.mutation<
BaseResponse<Lesson>,
Partial<Lesson> & Pick<Lesson, 'name' | 'date'> & { courseId: string }
BaseResponse<Lesson>,
Partial<Lesson> & Pick<Lesson, 'name' | 'date'> & { courseId: string }
>({
query: (data) => ({
url: '/lesson',
@@ -97,10 +97,10 @@ export const api = createApi({
lessonById: builder.query<BaseResponse<Lesson>, string>({
query: (lessonId: string) => `/lesson/${lessonId}`,
}),
createAccessCode: builder.query<
BaseResponse<AccessCode>,
{ lessonId: string }
BaseResponse<AccessCode>,
{ lessonId: string }
>({
query: ({ lessonId }) => ({
url: '/lesson/access-code',
@@ -109,8 +109,8 @@ export const api = createApi({
}),
}),
getAccess: builder.query<
BaseResponse<{ user: UserData; accessCode: AccessCode }>,
{ accessCode: string }
BaseResponse<{ user: UserData; accessCode: AccessCode }>,
{ accessCode: string }
>({
query: ({ accessCode }) => ({
url: `/lesson/access-code/${accessCode}`,
@@ -126,6 +126,7 @@ export const api = createApi({
query: (courseId) => ({
url: `/course/toggle-exam-with-jury/${courseId}`,
method: 'POST',
body: {},
}),
invalidatesTags: ['Course']
})

View File

@@ -15,6 +15,7 @@ import { useAppSelector } from '../../__data__/store'
import { isTeacher } from '../../utils/user'
import { PopulatedCourse } from '../../__data__/model'
import { api } from '../../__data__/api/api'
import { LinkIcon } from '@chakra-ui/icons'
type CourseDetailsProps = {
populatedCourse: PopulatedCourse;
@@ -28,7 +29,16 @@ export const CourseDetails = ({ populatedCourse }: CourseDetailsProps) => {
return (
<>
<Heading as="h3" mt={4} mb={3} size="lg">
Экзамен:
Экзамен: {exam?.name} {exam && <Tooltip label="Начать экзамен" fontSize="12px" top="16px">
<Button
leftIcon={<LinkIcon />}
as={'a'}
colorScheme="blue"
href={`/exam/${populatedCourse.id}/${exam.id}`}
>
Открыть
</Button>
</Tooltip>}
</Heading>
{!Boolean(exam) && (
<>
@@ -36,7 +46,7 @@ export const CourseDetails = ({ populatedCourse }: CourseDetailsProps) => {
Не задан
</Heading>
<Box mt={10}>
<Tooltip label="Детали" fontSize="12px" top="16px">
<Tooltip label="Создать экзамен с жюри" fontSize="12px" top="16px">
<Button
colorScheme="blue"
mt={["16px", 0]}

View File

@@ -190,7 +190,7 @@ export const CoursesList = () => {
<VStack as="ul" align="stretch">
{data?.body?.map((c) => (
<CourseCard
key={c._id}
key={c.id}
course={c}
/>
))}