Skip to content

Commit 39d05aa

Browse files
refactor: use updated course and learning materials cards
1 parent 98c3e29 commit 39d05aa

File tree

11 files changed

+83
-165
lines changed

11 files changed

+83
-165
lines changed

src/components/cards/LearningModule.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function LearningModuleCard({ data }: { data: LearningModule }): JSX.Elem
3838
<span className="uppercase font-semibold">{t("communities.card.module")}</span>
3939
</div>
4040
<div className="gap-2 flex items-center">
41-
{challenge.level && <Tag className="uppercase">{level}</Tag>}
41+
{challenge?.level && <Tag className="uppercase">{level}</Tag>}
4242
<DurationBadge value={data.duration} type="bordered" />
4343
</div>
4444
</div>

src/components/cards/challenge/Challenge.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default function ChallengeCard({ data, community, isCourseEnd }: Challeng
3333

3434

3535
return (
36-
<div className="w-full flex flex-col sm:flex-row md:flex-col lg:flex-row border-solid border border-primary bg-secondary rounded-3xl mb-5 group text-secondary">
36+
<div className="w-full flex flex-col sm:flex-row md:flex-col lg:flex-row border-solid border border-primary bg-secondary rounded-3xl group text-secondary">
3737
<div className="border-solid border -m-px border-primary bg-primary rounded-3xl sm:p-8 sm:pb-6 p-6 sm:w-2/3 md:w-auto lg:w-2/3">
3838
<div className="flex flex-col mb-1">
3939
<div className="lg:pr-20">
@@ -49,9 +49,8 @@ export default function ChallengeCard({ data, community, isCourseEnd }: Challeng
4949
</div>
5050
<div className="divide-y-2 divide-gray-200 divide-dotted flex flex-col mt-8">
5151
{learningMaterialsCount && (
52-
<p className="pb-3 md:pb-4 text-sm font-medium text-tertiary">{`${learningMaterialsCount} Learning ${
53-
learningMaterialsCount === 1 ? "material" : "materials"
54-
} included`}</p>
52+
<p className="pb-3 md:pb-4 text-sm font-medium text-tertiary">{`${learningMaterialsCount} Learning ${learningMaterialsCount === 1 ? "material" : "materials"
53+
} included`}</p>
5554
)}
5655
<div className="lg:flex lg:flex-row flex-col justify-between pt-3 md:pt-4 items-center">
5756
<Link href={link}>

src/components/cards/course/CourseMaterial.tsx

Lines changed: 0 additions & 63 deletions
This file was deleted.
Lines changed: 40 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,63 @@
1-
import Reward from "@/components/cards/course/_partials/Reward";
2-
import Avatar from "@/components/ui/Avatar";
31
import ArrowButton from "@/components/ui/button/Arrow";
4-
import { Community } from "@/types/community";
5-
import { Course } from "@/types/course";
6-
import Link from "next/link";
7-
import { ReactElement } from "react";
2+
import { useSelector } from "react-redux";
3+
import { IRootState } from "@/store"; import Link from "next/link";
4+
import Badges from "@/components/badges";
5+
import DurationBadge from "@/components/badges/DurationBadge";
86
import { useTranslation } from "next-i18next";
97

10-
/**
11-
* Course card component props
12-
* @date 3/30/2023 - 1:19:07 PM
13-
*
14-
* @interface CourseCardProps
15-
* @typedef {CourseCardProps}
16-
*/
8+
179

1810
interface CourseCardProps {
19-
course: Course;
20-
community: Community;
11+
title: string;
12+
description: string;
13+
link: string;
14+
level: number;
15+
learningModulesCount: number;
16+
duration: number;
2117
}
2218

2319
/**
24-
* Course card component
25-
* @date 3/30/2023 - 1:18:16 PM
20+
* CourseMaterial component.
2621
*
27-
* @export
28-
* @param {CourseCardProps} {
29-
course,
30-
community,
31-
}
32-
* @returns {ReactElement}
22+
* @param {CourseMaterial} { title, description, link, level, learningModulesCount, duration }.
23+
* @returns {JSX.Element}
3324
*/
34-
35-
export default function CourseCard({ course, community }: CourseCardProps): ReactElement {
25+
export default function CourseCard({ title, description, link, level, learningModulesCount, duration }: CourseCardProps): JSX.Element {
3626
const { t } = useTranslation();
37-
const path = `/communities/${community.slug}/courses/${course.slug}`;
38-
const reward = course?.challenge?.rewards?.find((entity) => entity.type === "SUBMISSION");
27+
const colors = useSelector((state: IRootState) => state.ui.colors);
3928

4029
return (
41-
<div className="flex flex-col sm:flex-row p-6 divide-y sm:divide-y-0 sm:divide-x divide-gray-200 bg-secondary rounded-3xl group text-gray-700 sm:p-7 mb-4 w-full border-solid border border-gray-200">
42-
<div className="flex flex-col sm:pr-20 justify-between w-full sm:w-3/5 lg:w-2/3 pb-6 sm:pb-0">
43-
<div className="flex flex-col">
44-
<div className="text-lg font-medium leading-normal">{t(course.name)}</div>
45-
{course.level && (
46-
<div className="mt-2 text-xxs px-2.5 py-0.5 bg-gray-200 text-gray-500 rounded-3xl max-w-max tracking-wider uppercase font-medium">
47-
{t(`course.challenge.level-${course.level}`)}
48-
</div>
30+
<div className="flex flex-col gap-3 relative p-6 divide-y sm:divide-y-0 sm:divide-x divide-gray-200 rounded-3xl group text-gray-700 sm:p-8 border-solid border border-gray-200">
31+
<div className="flex flex-col w-full">
32+
<div className="flex items-center justify-between mb-6 flex-wrap gap-2">
33+
<div className="flex gap-2 items-center">
34+
<div className="h-5.5 w-5.5 rounded-sm clip-hexagon" style={{ backgroundColor: colors?.primary }} />
35+
<span className="capitalize font-semibold text-[#4B5563] text-sm">COURSE</span>
36+
</div>
37+
<div className="flex items-center gap-2">
38+
<Badges courseLevel={level} className="!mb-0" />
39+
<DurationBadge value={duration} type="bordered" />
40+
</div>
41+
</div>
42+
<div className="flex flex-col gap-6">
43+
<div className="text-lg font-medium leading-normal text-gray-900">{title}</div>
44+
<div className="text-sm font-normal text-gray-700 max-w-xxs">{description}</div>
45+
{learningModulesCount && (
46+
<p className="text-sm pb-6 font-medium text-gray-400 border-b-2 border-gray-200 border-dotted">
47+
{t(learningModulesCount === 1 ? "communities.overview.challenge.course.learningModule" : "communities.overview.challenge.course.learningModules", {
48+
count: learningModulesCount,
49+
})}
50+
</p>
4951
)}
50-
<div className="text-sm mt-3 pb-2 max-w-xxs">{course.description}</div>
5152
</div>
52-
<div className="hidden sm:block">
53-
<Link href={path}>
53+
<div className="bottom-0 mt-6">
54+
<Link href={link}>
5455
<ArrowButton communityStyles={true} variant="outline-primary">
55-
{t("course.challenge.button")}
56+
{t("communities.overview.challenge.learning.start")}
5657
</ArrowButton>
5758
</Link>
5859
</div>
5960
</div>
60-
61-
{reward ? (
62-
<div className="text-base text-left sm:flex flex-start flex flex-col pt-6 sm:pt-0 space-y-4 pb-5 sm:pl-7 sm:pb-10 w-full sm:w-2/5 lg:w-1/3 tracking-wider">
63-
<Reward reward={reward} />
64-
<div className="font-light text-sm max-w-xs pb-2 text-gray-700">
65-
{t(reward.stable ? "course.challenge.reward.stable.description" : "course.challenge.reward.description", {
66-
currency: "$",
67-
amount: reward.amount,
68-
token: reward.token,
69-
})}
70-
</div>
71-
</div>
72-
) : (
73-
<div className="text-base text-left sm:flex flex-start flex flex-col pt-6 sm:pt-0 space-y-4 pb-5 sm:pl-7 sm:pb-10 w-full sm:w-2/5 lg:w-1/3 tracking-wider">
74-
<span className="text-xxs tracking-wider px-1 font-semibold uppercase text-gray-500">{t(`course.challenge.certificate`)}</span>
75-
<Avatar
76-
className="w-15 h-15 p-3 overflow-hidden"
77-
icon={community.icon}
78-
color={community.colors?.cover?.background || community.colors.primary}
79-
size="extra"
80-
shape="rounded-3xl"
81-
user={null}
82-
/>
83-
<div className="font-light text-sm max-w-xs pb-2 text-gray-700">
84-
<p>{t("course.challenge.certificate.description")}</p>
85-
</div>
86-
</div>
87-
)}
88-
89-
<div className="block sm:hidden pt-6">
90-
<Link href={path}>
91-
<ArrowButton communityStyles={true} variant="outline-primary">
92-
{t("course.challenge.button")}
93-
</ArrowButton>
94-
</Link>
95-
</div>
9661
</div>
9762
);
9863
}

src/components/sections/challenges/Learning.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Accordion from "@/components/ui/accordion/Accordion";
22
import Section from "@/components/sections/communities/_partials/Section";
33
import { LearningModuleCard } from "@/components/cards/LearningModule";
4-
import CourseMaterial from "@/components/cards/course/CourseMaterial";
4+
import CourseCard from "@/components/cards/course";
55
import { Course, LearningModule } from "@/types/course";
66
import { Community } from "@/types/community";
77
import { useTranslation } from "next-i18next";
@@ -24,7 +24,7 @@ export default function Learning({ courses, learningModules, community }: { cour
2424
<div className="text-base font-normal text-primary py-6">{t("communities.overview.challenge.learning.title")}</div>
2525
<div className={`grid grid-cols-1 gap-3 mb-3 ${courses?.length > 1 && "md:grid-cols-2"}`}>
2626
{courses?.map((course) => (
27-
<CourseMaterial
27+
<CourseCard
2828
key={`learning-card-data-${course.id}`}
2929
title={course.name}
3030
description={course.description}

src/components/sections/communities/overview/Courses.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,15 @@ export function CoursesOverview(): ReactElement {
3636
return (
3737
<SectionWrapper title={`${t("communities.overview.courses.title")}`} description={`${t("communities.overview.courses.description")}`}>
3838
{courseList?.map((course: Course) => (
39-
<CourseCard key={course.id} course={course} community={community as Community} />
39+
<CourseCard
40+
key={`learning-card-data-${course.id}`}
41+
title={course.name}
42+
description={course.description}
43+
link={`/communities/${community?.slug}/courses/${course.slug}`}
44+
duration={course.duration}
45+
level={course.level}
46+
learningModulesCount={course.learningModules?.length}
47+
/>
4048
))}
4149
</SectionWrapper>
4250
);

src/components/sections/communities/overview/LearningMaterials.tsx

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import CourseCard from "@/components/cards/course"
22
import { useMultiSelector } from "@/hooks/useTypedSelector"
3-
import RelatedLearningCard from "@/components/cards/challenge/_partials/RelatedLearning";
3+
import { LearningModuleCard } from "@/components/cards/LearningModule";
44
import { Course, LearningModule } from "@/types/course";
55
import { Community } from "@/types/community";
66
import Loader from "@/components/ui/Loader";
@@ -26,22 +26,29 @@ export default function LearningMaterialsOverview() {
2626

2727
return (
2828
<>
29-
<div className="md:hidden">
29+
<div className="md:hidden my-8">
3030
<div className="font-medium text-.5xl leading-snug">{t("communities.overview.learning-materials.title")}</div>
31-
<div className="text-sm font-light lg:w-full lg:pr-7 pt-2 mb-6 md:mb-0">{t("communities.overview.learning-materials.description")} </div>
31+
<div className="text-sm font-light lg:w-full lg:pr-7 pt-2">{t("communities.overview.learning-materials.description")} </div>
3232
</div>
33-
<div className="grid gap-6">
33+
<div className="grid gap-3 md:gap-6 mb-3 md:mb-6">
3434
{courses?.map((course) => {
35-
return <CourseCard key={`learning-material-course-${course.id}`} course={course} community={community} />
35+
return <CourseCard
36+
key={`learning-card-data-${course.id}`}
37+
title={course.name}
38+
description={course.description}
39+
link={`/communities/${community.slug}/courses/${course.slug}`}
40+
duration={course.duration}
41+
level={course.level}
42+
learningModulesCount={course.learningModules?.length}
43+
/>
3644
})}
3745
</div>
3846
<div className="grid md:grid-cols-2 gap-3 w-full">
3947
{learningModules?.map((module) => {
40-
return <RelatedLearningCard
41-
key={`learning-material-material-${module.id}`}
42-
title={module.title}
43-
description={module.description}
44-
path={`/communities/${community.slug}`} />
48+
return <LearningModuleCard
49+
key={`related-learning-card-${module.id}`}
50+
data={module}
51+
/>
4552
})}
4653
</div>
4754
</>

src/components/sections/communities/overview/Wrapper.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default function Wrapper({ children, filter }: WrapperProps): JSX.Element
2424
<div className="relative">
2525
<MainHeaderSection />
2626
<Section>
27-
<div className="w-full md:flex gap-36 mx-auto mt-14">
27+
<div className="w-full md:flex gap-36 mx-auto mt-6 md:mt-17">
2828
<div className="hidden md:grid w-4/12">
2929
<CommunitySidebar />
3030
{filter}

src/components/sections/communities/overview/scoreboard/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ export default function ScoreboardOverview(): ReactElement {
2626

2727
return (
2828
<>
29-
<div className="md:hidden">
29+
<div className="md:hidden my-8">
3030
<div className="font-medium text-.5xl leading-snug">{t("communities.overview.scoreboard.title")}</div>
31-
<div className="text-sm font-light lg:w-full lg:pr-7 pt-2 mb-6 md:mb-0">{t("communities.overview.scoreboard.description")} </div>
31+
<div className="text-sm font-light lg:w-full lg:pr-7 pt-2">{t("communities.overview.scoreboard.description")} </div>
3232
</div>
3333
{loading ? (
3434
<div className="h-full w-full grid">

src/pages/communities/[slug]/courses/[course_slug]/learning-modules/[id].tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export default function LearningModulePage(props: LearningModulePageProps): Reac
101101
<LearningModuleSection learningModule={learningModule} />
102102
{isLastLearningModule ? (
103103
course.challenges && (
104-
<div>
104+
<div className="mb-5">
105105
<div className="mt-6 mb-5">
106106
<h2 className="font-medium text-.5xl text-gray-700 pb-3">{t("communities.challenge.title")}</h2>
107107
<p className="text-lg">{t("communities.overview.learning-modules-challenge-introduction")}</p>

0 commit comments

Comments
 (0)