web #1

Merged
shafin808s merged 35 commits from web into main 2026-03-11 20:41:06 +00:00
209 changed files with 106105 additions and 2782 deletions
Showing only changes of commit a1295a0eb3 - Show all commits

View File

@ -13,7 +13,7 @@ import type { LessonId } from "./FetchLessonPage";
import type { LessonDetails } from "../types/lesson"; import type { LessonDetails } from "../types/lesson";
interface LessonModalProps { interface LessonModalProps {
lessonId: string | null; selectedLessonData: { id: string | null; name: string | null };
open: boolean; open: boolean;
onOpenChange: (open: boolean) => void; onOpenChange: (open: boolean) => void;
} }
@ -158,8 +158,9 @@ const LoadingSpinner = () => (
); );
export const LessonModal = ({ export const LessonModal = ({
lessonId, selectedLessonData,
open, open,
onOpenChange, onOpenChange,
}: LessonModalProps) => { }: LessonModalProps) => {
const user = useAuthStore((state) => state.user); const user = useAuthStore((state) => state.user);
@ -168,17 +169,21 @@ export const LessonModal = ({
const [lesson, setLesson] = useState<LessonDetails | null>(null); const [lesson, setLesson] = useState<LessonDetails | null>(null);
const [error, setError] = useState(false); const [error, setError] = useState(false);
const fetchingForId = useRef<string | null>(null); const fetchingForId = useRef<string | null>(null);
const lessonId = selectedLessonData.id;
const LocalLessonComponent = const LocalLessonComponent =
lessonId && !isVideoLesson(lessonId) lessonId && !isVideoLesson(lessonId)
? LESSON_COMPONENT_MAP[lessonId as LessonId] ? LESSON_COMPONENT_MAP[lessonId as LessonId]
: null; : null;
const modalTitle = LocalLessonComponent // const modalTitle = LocalLessonComponent
? getLocalLessonTitle(lessonId!) // ? getLocalLessonTitle(lessonId!)
: loading // : loading
? "Loading..." // ? "Loading..."
: (lesson?.title ?? "Lesson"); // : (lesson?.title ?? "Lesson");
const modalTitle =
selectedLessonData.name || selectedLessonData.id || "Lesson";
useEffect(() => { useEffect(() => {
if (!open) { if (!open) {

View File

@ -466,12 +466,15 @@ export const Lessons = () => {
const [activeTab, setActiveTab] = useState<"rw" | "math" | "video">("rw"); const [activeTab, setActiveTab] = useState<"rw" | "math" | "video">("rw");
const [videoSubTab, setVideoSubTab] = useState<VideoSubTab>("rw"); const [videoSubTab, setVideoSubTab] = useState<VideoSubTab>("rw");
const [selectedLessonId, setSelectedLessonId] = useState<string | null>(null); const [selectedLessonData, setSelectedLessonData] = useState<{
id: string | null;
name: string | null;
}>({ id: null, name: null });
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
const [searchQuery, setSearchQuery] = useState(""); const [searchQuery, setSearchQuery] = useState("");
const handleLessonClick = (id: string) => { const handleLessonClick = (id: string, name: string) => {
setSelectedLessonId(id); setSelectedLessonData({ id, name });
setIsModalOpen(true); setIsModalOpen(true);
}; };
@ -565,7 +568,7 @@ export const Lessons = () => {
<div <div
key={lesson.id} key={lesson.id}
className="ls-lesson-row" className="ls-lesson-row"
onClick={() => handleLessonClick(lesson.id)} onClick={() => handleLessonClick(lesson.id, lesson.title)}
> >
<span className="ls-row-num"> <span className="ls-row-num">
{String(li + 1).padStart(2, "0")} {String(li + 1).padStart(2, "0")}
@ -764,10 +767,10 @@ export const Lessons = () => {
<LessonModal <LessonModal
open={isModalOpen} open={isModalOpen}
lessonId={selectedLessonId} selectedLessonData={selectedLessonData}
onOpenChange={(open) => { onOpenChange={(open) => {
setIsModalOpen(open); setIsModalOpen(open);
if (!open) setSelectedLessonId(null); if (!open) setSelectedLessonData({ id: null, name: null });
}} }}
/> />
</div> </div>