Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions src/constants/request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,12 @@ export const URLs = {
patch: '/quizzes/:id',
delete: '/quizzes/:id'
},
finishedQuizzes: {
add: '/finished-quizzes',
patch: '/finished-quizzes/:id',
get: '/finished-quizzes',
getById: '/finished-quizzes/:id',
getByQuizId: '/finished-quizzes/:cooperationId/:quizId'
attempts: {
add: '/quizzes/attempts',
patch: '/quizzes/attempts/:id',
get: '/quizzes/attempts',
getById: '/quizzes/attempts/:id',
getByQuizId: '/quizzes/attempts/:cooperationId/:quizId'
},
attachments: {
post: '/attachments'
Expand Down
4 changes: 2 additions & 2 deletions src/containers/quiz/quiz-header/QuizHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Box from '@mui/material/Box'

import {
ActiveQuizInfo,
FinishedQuizInfo,
AttemptInfo,
TutorQuizInfo
} from '~/containers/quiz/quiz-info/QuizInfo'
import TitleWithDescription from '~/components/title-with-description/TitleWithDescription'
Expand Down Expand Up @@ -51,7 +51,7 @@ const QuizHeader: React.FC<QuizHeaderProps> = ({

if (type === 'finished') {
return (
<FinishedQuizInfo
<AttemptInfo
createdAt={createdAt}
points={points}
totalPoints={totalPoints}
Expand Down
6 changes: 3 additions & 3 deletions src/containers/quiz/quiz-info/QuizInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,14 @@ const ActiveQuizInfo: React.FC<ActiveQuizInfoProps> = ({
)
}

type FinishedQuizInfoProps = {
type AttemptInfoProps = {
points: number
totalPoints: number
createdAt: string
updatedAt: string
}

const FinishedQuizInfo: React.FC<FinishedQuizInfoProps> = ({
const AttemptInfo: React.FC<AttemptInfoProps> = ({
points,
totalPoints,
createdAt,
Expand Down Expand Up @@ -254,4 +254,4 @@ const StartViewQuizInfo: React.FC<StartViewQuizInfoProps> = ({
)
}

export { ActiveQuizInfo, FinishedQuizInfo, TutorQuizInfo, StartViewQuizInfo }
export { ActiveQuizInfo, AttemptInfo, TutorQuizInfo, StartViewQuizInfo }
16 changes: 8 additions & 8 deletions src/pages/quiz-attempts/QuizAttempts.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,13 @@ const QuizAttemptsPage: React.FC = () => {

const isTimeLimitNeeded = (timeLimit as string) != 'No limit'

const getFinishedQuizzes = useCallback(() => {
return ResourceService.getFinishedQuizzesByQuizId(cooperationId, quizId)
const getAttempts = useCallback(() => {
return ResourceService.getAttemptByQuizId(cooperationId, quizId)
}, [cooperationId, quizId])

const { data: finishedQuizzes = [] } = useQuery({
queryKey: ['finished-quizzes', cooperationId, quizId],
queryFn: getFinishedQuizzes,
const { data: attempts = [] } = useQuery({
queryKey: ['attempts', cooperationId, quizId],
queryFn: getAttempts,
options: {
staleTime: ONE_HOUR
}
Expand Down Expand Up @@ -88,8 +88,8 @@ const QuizAttemptsPage: React.FC = () => {
}

const attemptsList =
finishedQuizzes.length !== 0 ? (
finishedQuizzes.map((item) => {
attempts.length !== 0 ? (
attempts.map((item) => {
return (
<Box key={item._id} sx={styles.attemptWrapper}>
<QuizInfoSection
Expand Down Expand Up @@ -126,7 +126,7 @@ const QuizAttemptsPage: React.FC = () => {
onStart={isTimeLimitNeeded ? openModal : handleStart}
questionsAmount={items.length}
timeLimit={timeLimit}
usedAttempts={finishedQuizzes.length}
usedAttempts={attempts.length}
/>
<Divider sx={styles.divider} />
{attemptsList}
Expand Down
4 changes: 2 additions & 2 deletions src/pages/quiz-review/QuizReview.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { useParams } from 'react-router-dom'
import PageWrapper from '~/components/page-wrapper/PageWrapper'
import { styles } from '~/pages/quiz-review/QuizReview.styles'
import { FinishedQuiz } from '~/pages/quiz/QuizVariants'
import { Attempt } from '~/pages/quiz/QuizVariants'

const QuizReview: React.FC = () => {
const { attemptId = '' } = useParams()

return (
<PageWrapper sx={styles.quizzesWrapper}>
<FinishedQuiz finishedQuizId={attemptId} />
<Attempt attemptId={attemptId} />
</PageWrapper>
)
}
Expand Down
76 changes: 38 additions & 38 deletions src/pages/quiz/QuizVariants.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const ActiveQuiz: React.FC = () => {
const { t } = useTranslation()

const [isOpen, setIsOpen] = useState(false)
const [finishedQuizId, setFinishedQuizId] = useState('')
const [attemptId, setAttemptId] = useState('')

const { handleInputChange, handleNonInputValueChange, data } = useForm<
Record<string, string | string[]>
Expand Down Expand Up @@ -97,8 +97,8 @@ const ActiveQuiz: React.FC = () => {
})
}, [data, items])

const addFinishedQuiz = useCallback(() => {
return ResourceService.addFinishedQuiz({
const addAttempt = useCallback(() => {
return ResourceService.addAttempt({
cooperation: cooperationId,
quiz: quizId,
grade,
Expand All @@ -108,14 +108,14 @@ const ActiveQuiz: React.FC = () => {

const { handleErrorAlert, handleAlert } = useSnackbarAlert()

const { mutateAsync: createFinishedQuiz } = useMutation({
mutationFn: addFinishedQuiz,
queryKey: ['finished-quizzes'],
const { mutateAsync: createAttempt } = useMutation({
mutationFn: addAttempt,
queryKey: ['attempts'],
onError: handleErrorAlert
})

const editFinishedQuiz = useCallback(() => {
return ResourceService.editFinishedQuiz(finishedQuizId, {
const editAttempt = useCallback(() => {
return ResourceService.editAttempt(attemptId, {
grade,
results: items.map(({ text, answers, _id }) => {
return {
Expand All @@ -130,11 +130,11 @@ const ActiveQuiz: React.FC = () => {
}
})
})
}, [data, finishedQuizId, grade, items])
}, [data, attemptId, grade, items])

const { mutate: updateFinishedQuiz } = useMutation({
mutationFn: editFinishedQuiz,
queryKey: ['finished-quizzes'],
const { mutate: updateAttempt } = useMutation({
mutationFn: editAttempt,
queryKey: ['attempts'],
onError: handleErrorAlert
})

Expand All @@ -146,7 +146,7 @@ const ActiveQuiz: React.FC = () => {
handleInputChange={handleInputChange}
handleNonInputValueChange={handleNonInputChange}
isEditable
onNextButtonClick={updateFinishedQuiz}
onNextButtonClick={updateAttempt}
questions={items}
sx={styles.selectableQuestionQuizWrapper}
/>
Expand All @@ -165,7 +165,7 @@ const ActiveQuiz: React.FC = () => {
}, [])

const handleFinish = useCallback(() => {
updateFinishedQuiz()
updateAttempt()
setIsOpen(false)

handleAlert({
Expand All @@ -177,7 +177,7 @@ const ActiveQuiz: React.FC = () => {
navigate(
getFullUrl({
pathname: authRoutes.cooperationQuizReview.route,
parameters: { id: cooperationId, quizId, attemptId: finishedQuizId }
parameters: { id: cooperationId, quizId, attemptId: attemptId }
})
)
} else {
Expand All @@ -187,22 +187,22 @@ const ActiveQuiz: React.FC = () => {
scoredResponses,
cooperationId,
quizId,
finishedQuizId,
attemptId,
handleAlert,
navigate,
updateFinishedQuiz
updateAttempt
])

const questionsAnswered = Object.keys(data).length

useEffect(() => {
const postFinishedQuiz = async () => {
const finishedQuiz = await createFinishedQuiz()
setFinishedQuizId(finishedQuiz?._id)
const postAttempt = async () => {
const attempt = await createAttempt()
setAttemptId(attempt?._id)
}

void postFinishedQuiz()
}, [createFinishedQuiz])
void postAttempt()
}, [createAttempt])

if (isLoading || !quiz) {
return <Loader pageLoad />
Expand Down Expand Up @@ -241,16 +241,16 @@ const ActiveQuiz: React.FC = () => {
)
}

type FinishedQuizProps = {
finishedQuizId: string
type AttemptProps = {
attemptId: string
}

const FinishedQuiz: React.FC<FinishedQuizProps> = ({ finishedQuizId }) => {
const Attempt: React.FC<AttemptProps> = ({ attemptId }) => {
const { quizId = '' } = useParams()

const getFinishedQuiz = useCallback(() => {
return ResourceService.getFinishedQuiz(finishedQuizId)
}, [finishedQuizId])
const getAttempt = useCallback(() => {
return ResourceService.getAttempt(attemptId)
}, [attemptId])

const { handleInputChange, handleNonInputValueChange } = useForm<
Record<string, string | string[]>
Expand All @@ -262,9 +262,9 @@ const FinishedQuiz: React.FC<FinishedQuizProps> = ({ finishedQuizId }) => {
handleNonInputValueChange(key, value)
}

const { data: finishedQuiz, isLoading: isFinishedQuizLoading } = useQuery({
queryKey: ['finished-quizzes', finishedQuizId],
queryFn: getFinishedQuiz
const { data: attempt, isLoading: isAttemptLoading } = useQuery({
queryKey: ['attempts', attemptId],
queryFn: getAttempt
})

const { quiz, isLoading: isQuizLoading } = useQuizQuery(quizId)
Expand All @@ -280,7 +280,7 @@ const FinishedQuiz: React.FC<FinishedQuizProps> = ({ finishedQuizId }) => {

const mappedResults = useMemo(() => {
const result: Record<string, string | string[]> = {}
finishedQuiz?.results?.forEach(({ question, answers }) => {
attempt?.results?.forEach(({ question, answers }) => {
const quizQuestion = quiz?.items.find((item) => item.text === question)
const quizQuestionId = quizQuestion?._id

Expand All @@ -294,7 +294,7 @@ const FinishedQuiz: React.FC<FinishedQuizProps> = ({ finishedQuizId }) => {
})

return result
}, [finishedQuiz?.results, quiz?.items])
}, [attempt?.results, quiz?.items])

const questionsBlock = isStepper ? (
<SelectableQuestionQuizView
Expand All @@ -319,21 +319,21 @@ const FinishedQuiz: React.FC<FinishedQuizProps> = ({ finishedQuizId }) => {
/>
)

if (isFinishedQuizLoading || !finishedQuiz || isQuizLoading) {
if (isAttemptLoading || !attempt || isQuizLoading) {
return <Loader pageLoad />
}

return (
<PageWrapper sx={styles.quizzesWrapper}>
<Box component={ComponentEnum.Form} sx={styles.quizzesWrapper}>
<QuizHeader
createdAt={finishedQuiz.createdAt}
createdAt={attempt.createdAt}
description={description}
points={items.length}
title={title}
totalPoints={finishedQuiz.results?.length}
totalPoints={attempt.results?.length}
type='finished'
updatedAt={finishedQuiz.updatedAt}
updatedAt={attempt.updatedAt}
/>
<Divider sx={styles.divider} />
{questionsBlock}
Expand Down Expand Up @@ -405,4 +405,4 @@ const TutorQuiz: React.FC = () => {
)
}

export { ActiveQuiz, FinishedQuiz, TutorQuiz }
export { ActiveQuiz, Attempt, TutorQuiz }
26 changes: 13 additions & 13 deletions src/services/resource-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ import {
CreateCategoriesParams,
UpdateQuestionParams,
CreateQuizParams,
type CreateFinishedQuizParams,
type UpdateFinishedQuizParams,
type CreateAttemptParams,
type UpdateAttemptParams,
Quiz,
UpdateQuizParams,
ApiMethodEnum,
GetQuestion,
type FinishedQuiz,
type Attempt,
type FinishedAttempts
} from '~/types'
import { createUrlPath } from '~/utils/helper-functions'
Expand Down Expand Up @@ -132,37 +132,37 @@ export const ResourceService = {
})
})
},
addFinishedQuiz: async (data: CreateFinishedQuizParams) => {
return baseService.request<FinishedQuiz>({
addAttempt: async (data: CreateAttemptParams) => {
return baseService.request<Attempt>({
method: 'POST',
url: URLs.finishedQuizzes.add,
url: URLs.attempts.add,
data
})
},
editFinishedQuiz: (id: string, data: UpdateFinishedQuizParams) => {
editAttempt: (id: string, data: UpdateAttemptParams) => {
return baseService.request<void>({
method: 'PATCH',
url: getFullUrl({
pathname: URLs.finishedQuizzes.patch,
pathname: URLs.attempts.patch,
parameters: { id }
}),
data
})
},
getFinishedQuiz: async (id: string) => {
return baseService.request<FinishedQuiz>({
getAttempt: async (id: string) => {
return baseService.request<Attempt>({
method: 'GET',
url: getFullUrl({
pathname: URLs.finishedQuizzes.getById,
pathname: URLs.attempts.getById,
parameters: { id }
})
})
},
getFinishedQuizzesByQuizId: (cooperationId: string, quizId: string) => {
getAttemptByQuizId: (cooperationId: string, quizId: string) => {
return baseService.request<FinishedAttempts>({
method: 'GET',
url: getFullUrl({
pathname: URLs.finishedQuizzes.getByQuizId,
pathname: URLs.attempts.getByQuizId,
parameters: { cooperationId, quizId }
})
})
Expand Down
1 change: 1 addition & 0 deletions src/types/attempt/attempt.index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './types/attempt.types'
Loading