@@ -57,7 +57,7 @@ export const LessonSidebar = ({ course, courseId }: LessonSidebarProps) => {
courseLessonCount={course.courseChapterCount ?? 0}
/>
-
+
Table of content:
{
{course?.chapters?.map(({ id, title, lessons, chapterProgress }) => {
return (
-
+ div>div>svg]:rotate-180 [&[data-state=open]>div>div>svg]:duration-200 [&[data-state=open]>div>div>svg]:ease-out data-[state=closed]:border-t-transparent data-[state=closed]:border-x-transparent data-[state=closed]:rounded-none data-[state=open]:rounded-t-lg",
+ {
+ "data-[state=closed]:border-b-0":
+ last(course?.chapters)?.id === id || activeChapter !== id,
+ },
+ )}
+ >
{
{title}
-
+
{lessons?.map(({ id, title, status, type }) => {
return (
{" "}
@@ -100,6 +114,7 @@ export const LessonSidebar = ({ course, courseId }: LessonSidebarProps) => {
{startCase(type)}
diff --git a/apps/web/app/modules/Courses/Lesson/Quiz.tsx b/apps/web/app/modules/Courses/Lesson/Quiz.tsx
index ee60ae150..5341bfc47 100644
--- a/apps/web/app/modules/Courses/Lesson/Quiz.tsx
+++ b/apps/web/app/modules/Courses/Lesson/Quiz.tsx
@@ -1,4 +1,4 @@
-import { useNavigate, useParams } from "@remix-run/react";
+import { useParams } from "@remix-run/react";
import { FormProvider, useForm } from "react-hook-form";
import { useSubmitQuiz } from "~/api/mutations";
@@ -12,6 +12,7 @@ import type { TQuestionsForm } from "~/modules/Courses/Lesson/types";
type QuizProps = {
lesson: GetLessonByIdResponse["data"];
+ handleNext: () => void;
};
function transformData(input: TQuestionsForm) {
@@ -178,9 +179,8 @@ function transformData(input: TQuestionsForm) {
return result;
}
-export const Quiz = ({ lesson }: QuizProps) => {
- const { lessonId = "", courseId = "" } = useParams();
- const navigate = useNavigate();
+export const Quiz = ({ lesson, handleNext }: QuizProps) => {
+ const { lessonId = "" } = useParams();
const questions = lesson.quizDetails?.questions;
@@ -190,9 +190,7 @@ export const Quiz = ({ lesson }: QuizProps) => {
});
const submitQuiz = useSubmitQuiz({
- handleOnSuccess: () => {
- navigate(`/course/${courseId}/lesson/${lesson.nextLessonId}`);
- },
+ handleOnSuccess: handleNext,
});
if (!questions?.length) return null;
diff --git a/apps/web/app/modules/Global/Providers.tsx b/apps/web/app/modules/Global/Providers.tsx
index 586f24996..472bf11a4 100644
--- a/apps/web/app/modules/Global/Providers.tsx
+++ b/apps/web/app/modules/Global/Providers.tsx
@@ -1,12 +1,42 @@
import { QueryClientProvider } from "@tanstack/react-query";
+import { lazy, Suspense, useEffect, useState } from "react";
+import { createPortal } from "react-dom";
import { queryClient } from "../../api/queryClient";
import { ThemeProvider } from "../Theme/ThemeProvider";
+const ReactQueryDevtools = lazy(() =>
+ import("@tanstack/react-query-devtools").then(({ ReactQueryDevtools }) => ({
+ default: ReactQueryDevtools,
+ })),
+);
+
export function Providers({ children }: { children: React.ReactNode }) {
+ const [mounted, setMounted] = useState(false);
+
+ /*
+ * awful hack but this is the only way (I found) to make react-query devtools work in our remix
+ */
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
return (
- {children}
+
+ {children}
+
+ {mounted && process.env.NODE_ENV === "development" && (
+ <>
+ {createPortal(
+
+
+ ,
+ document.body,
+ )}
+ >
+ )}
+
);
}
diff --git a/apps/web/package.json b/apps/web/package.json
index 89dde5663..86e966138 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -50,7 +50,7 @@
"@stripe/react-stripe-js": "2.8.0",
"@stripe/stripe-js": "4.6.0",
"@tanstack/react-query": "5.40.1",
- "@tanstack/react-query-devtools": "5",
+ "@tanstack/react-query-devtools": "5.40.1",
"@tanstack/react-table": "8.20.1",
"@tiptap/extension-color": "2.10.3",
"@tiptap/extension-document": "2.10.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e90f564aa..08e075190 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -402,8 +402,8 @@ importers:
specifier: 5.40.1
version: 5.40.1(react@18.3.1)
'@tanstack/react-query-devtools':
- specifier: '5'
- version: 5.61.5(@tanstack/react-query@5.40.1(react@18.3.1))(react@18.3.1)
+ specifier: 5.40.1
+ version: 5.40.1(@tanstack/react-query@5.40.1(react@18.3.1))(react@18.3.1)
'@tanstack/react-table':
specifier: 8.20.1
version: 8.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -4298,13 +4298,13 @@ packages:
'@tanstack/query-core@5.40.0':
resolution: {integrity: sha512-eD8K8jsOIq0Z5u/QbvOmfvKKE/XC39jA7yv4hgpl/1SRiU+J8QCIwgM/mEHuunQsL87dcvnHqSVLmf9pD4CiaA==}
- '@tanstack/query-devtools@5.61.4':
- resolution: {integrity: sha512-21Tw+u8E3IJJj4A/Bct4H0uBaDTEu7zBrR79FeSyY+mS2gx5/m316oDtJiKkILc819VSTYt+sFzODoJNcpPqZQ==}
+ '@tanstack/query-devtools@5.37.1':
+ resolution: {integrity: sha512-XcG4IIHIv0YQKrexTqo2zogQWR1Sz672tX2KsfE9kzB+9zhx44vRKH5si4WDILE1PIWQpStFs/NnrDQrBAUQpg==}
- '@tanstack/react-query-devtools@5.61.5':
- resolution: {integrity: sha512-P2DwlKyoGar6FX2XL324gM7AX8fuXm6DecLvfUoGpWbxtbuAtfzglRiCDLKkc5tJ7pekuaZsFFas/cyfTymoCQ==}
+ '@tanstack/react-query-devtools@5.40.1':
+ resolution: {integrity: sha512-/AN2UsbuL+28/KSlBkVHq/4chHTEp4l2UWTKWixXbn4pprLQrZGmQTAKN4tYxZDuNwNZY5+Zp67pDfXj+F/UBA==}
peerDependencies:
- '@tanstack/react-query': ^5.61.5
+ '@tanstack/react-query': ^5.40.1
react: ^18 || ^19
'@tanstack/react-query@5.40.1':
@@ -15930,11 +15930,11 @@ snapshots:
'@tanstack/query-core@5.40.0': {}
- '@tanstack/query-devtools@5.61.4': {}
+ '@tanstack/query-devtools@5.37.1': {}
- '@tanstack/react-query-devtools@5.61.5(@tanstack/react-query@5.40.1(react@18.3.1))(react@18.3.1)':
+ '@tanstack/react-query-devtools@5.40.1(@tanstack/react-query@5.40.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@tanstack/query-devtools': 5.61.4
+ '@tanstack/query-devtools': 5.37.1
'@tanstack/react-query': 5.40.1(react@18.3.1)
react: 18.3.1