Skip to content

Commit e90e83c

Browse files
committed
feat: fixed completed project status with new conditional variables
1 parent 1652035 commit e90e83c

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

src/contexts/AppContext.tsx

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
1-
import {
2-
type Project,
3-
type IFormatedLessons,
4-
type Fundamental,
5-
} from "@/interfaces";
1+
import { type Project, type Fundamental } from "@/interfaces";
62
import { createContext, useContext } from "react";
73

84
interface IAppContext {
9-
completedQuizzesSlugs: string[];
5+
completedQuizzesIds: string[];
106
projects: Project[];
117
fundamentals: Fundamental[];
128
}
139

1410
export const AppContext = createContext<IAppContext>({
15-
completedQuizzesSlugs: [],
11+
completedQuizzesIds: [],
1612
projects: [],
1713
fundamentals: [],
1814
});

src/contexts/AppContextProvider.tsx

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ interface IProps {
2020
export function AppContextProvider({ children }: IProps) {
2121
const [fundamentals, setFundamentals] = useState<Fundamental[]>([]);
2222
const [projects, setProjects] = useState<Project[]>([]);
23-
const [completedQuizzesSlugs, setCompletedQuizzesSlugs] = useState<string[]>(
24-
[],
25-
);
23+
const [completedQuizzesIds, setCompletedQuizzesIds] = useState<string[]>([]);
2624
const [sessionDataUser, setSessionDataUser] = useState<any>(null);
2725

2826
const { data: sessionData } = useSession();
@@ -51,8 +49,11 @@ export function AppContextProvider({ children }: IProps) {
5149

5250
useEffect(() => {
5351
if (completedQuizzesAllData) {
54-
const slugs = completedQuizzesAllData.map((quiz: any) => quiz.lesson);
55-
if (slugs !== completedQuizzesSlugs) setCompletedQuizzesSlugs(slugs);
52+
const completedIds = completedQuizzesAllData.map(
53+
(quiz: any) => quiz.lesson,
54+
); // DEV_NOTE: the -lesson- field now is the lessonId
55+
if (completedIds !== completedQuizzesIds)
56+
setCompletedQuizzesIds(completedIds);
5657
}
5758
// eslint-disable-next-line react-hooks/exhaustive-deps
5859
}, [completedQuizzesAllData]);
@@ -77,23 +78,34 @@ export function AppContextProvider({ children }: IProps) {
7778
useEffect(() => {
7879
void fetchFromDirs();
7980
}, []);
81+
0;
82+
83+
// - Get All lessons to get the Id's
84+
const { data: allLessonsData } = api.lessons.getAll.useQuery();
8085

8186
useEffect(() => {
82-
if (projects && completedQuizzesSlugs.length !== 0) {
87+
if (allLessonsData && projects && completedQuizzesIds.length !== 0) {
8388
const projectsWithCompleteStatus = projects.map((lesson) => {
84-
const completed = completedQuizzesSlugs.includes(lesson.slug);
89+
const currentLessonId = allLessonsData.find(
90+
(lessonData) =>
91+
lessonData.lessonNumber.toString() === lesson.slug.toString(), // DEV_NOTE: forcing .toString() to avoid type errors
92+
)?.id;
93+
94+
const completed = currentLessonId
95+
? completedQuizzesIds.includes(currentLessonId)
96+
: false; // DEV_NOTE: if the lesson is not found, it is not completed
8597
return { ...lesson, completed };
8698
});
8799

88100
setProjects(projectsWithCompleteStatus);
89101
}
90102
// eslint-disable-next-line react-hooks/exhaustive-deps
91-
}, [completedQuizzesSlugs]);
103+
}, [completedQuizzesIds]);
92104

93105
return (
94106
<AppContext.Provider
95107
value={{
96-
completedQuizzesSlugs,
108+
completedQuizzesIds,
97109
projects,
98110
fundamentals,
99111
}}

0 commit comments

Comments
 (0)