Skip to content

Commit 0e81966

Browse files
committed
fix: goto related course when enroll in an outdated challenge
1 parent 2c22201 commit 0e81966

File tree

3 files changed

+81
-38
lines changed

3 files changed

+81
-38
lines changed

src/app/learn/[type]/ChallengesStatus.js

+28-17
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,39 @@
1616

1717
'use client';
1818

19+
import clsx from 'clsx';
20+
21+
const statusMap = {
22+
0: {
23+
text: 'Closed',
24+
colorClassName: 'text-[#82ADD8]',
25+
borderClassName: 'border-[#82ADD8]',
26+
bgClassName: 'bg-[rgba(130,173,216,0.12)]',
27+
},
28+
1: {
29+
text: 'Soon',
30+
colorClassName: 'text-[#DCB259]',
31+
borderClassName: 'border-[#DCB259]',
32+
bgClassName: 'bg-[rgba(220,178,89,0.12)]',
33+
},
34+
2: {
35+
text: 'Ongoing',
36+
colorClassName: 'text-[#60CA98]',
37+
borderClassName: 'border-[#60CA98]',
38+
bgClassName: 'bg-[rgba(96,202,152,0.12)]',
39+
},
40+
};
41+
1942
export function ChallengesStatus({ data }) {
43+
const status = statusMap[data?.challenges_extra.course_challenges_extra_time_order];
44+
2045
return (
2146
<div className="mr-1">
22-
{data?.challenges_extra.course_challenges_extra_time_order === 2 && (
23-
<span
24-
className="bg-[rgba(96,202,152,0.12)] h-6 flex items-center rounded-[6px] px-2 text-xs border border-[#60CA98] text-[#60CA98]"
25-
>
26-
Ongoing
27-
</span>
28-
)}
29-
{data?.challenges_extra.course_challenges_extra_time_order === 1 && (
30-
<span
31-
className="bg-[rgba(220,178,89,0.12)] h-6 flex items-center rounded-[6px] px-2 text-xs border border-[#DCB259] text-[#DCB259]"
32-
>
33-
Soon
34-
</span>
35-
)}
36-
{data?.challenges_extra.course_challenges_extra_time_order === 0 && (
47+
{status && (
3748
<span
38-
className="bg-[rgba(130,173,216,0.12)] h-6 flex items-center rounded-[6px] px-2 text-xs border border-[#82ADD8] text-[#82ADD8]"
49+
className={clsx(status.bgClassName, 'h-6 flex items-center rounded-[6px] px-2 text-xs border', status.borderClassName, status.colorClassName)}
3950
>
40-
Closed
51+
{status.text}
4152
</span>
4253
)}
4354
</div>

src/app/learn/[type]/[id]/RightCard.js

+27-11
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ const EnrollModal = dynamic(() => import('./EnrollModal'), {
6161
ssr: false,
6262
});
6363

64-
function ButtonGroup({ data, permission, loading, type, apply, enroll, switchLoading, payLoading, isPay, payment }) {
64+
function ButtonGroup({ data, permission, loading, type, apply, enroll, switchLoading, payLoading, isPay, payment, related }) {
6565
const router = useRouter();
6666
const { status } = useSession();
6767

@@ -76,14 +76,28 @@ function ButtonGroup({ data, permission, loading, type, apply, enroll, switchLoa
7676

7777
// console.log(data)
7878

79-
return <div>
80-
{data?.challenges_extra && data?.challenges_extra.course_challenges_extra_time_order === 0 ? (
81-
<div className="pb-6">
82-
<Button disabled fullWidth className={'flex-1'} >
83-
Closed
84-
</Button>
79+
if (data?.challenges_extra && data?.challenges_extra.course_challenges_extra_time_order === 0) {
80+
let buttonText = 'Closed';
81+
let handleClick;
82+
83+
if (related) {
84+
buttonText = 'Enroll in course';
85+
handleClick = () => router.push(`/learn/courses/${related.link}`);
86+
}
87+
88+
return (
89+
<div>
90+
<div className="pb-6">
91+
<Button disabled={!handleClick} fullWidth className="flex-1" onClick={handleClick}>
92+
{buttonText}
93+
</Button>
94+
</div>
8595
</div>
86-
) : (
96+
);
97+
}
98+
99+
return (
100+
<div>
87101
<div className="pb-6 flex gap-2">
88102
{data.base.course_series_quiz_id !== 0 && <Button
89103
onClick={() => window.open(`/quiz/${data.base.course_series_quiz_id}`)}
@@ -173,11 +187,11 @@ function ButtonGroup({ data, permission, loading, type, apply, enroll, switchLoa
173187
</Button>
174188
)}
175189
</div>
176-
)}
177-
</div>;
190+
</div>
191+
);
178192
}
179193

180-
export function LearnRightCard({ data, type, permission }) {
194+
export function LearnRightCard({ data, type, permission, related }) {
181195
// const { data: walletClient } = useWalletClient()
182196
const searchParams = useSearchParams();
183197
const mediaUrl = useMediaUrl();
@@ -372,6 +386,7 @@ export function LearnRightCard({ data, type, permission }) {
372386
payLoading={payLoading}
373387
isPay={isPay}
374388
payment={payment}
389+
related={related}
375390
/>
376391
</div>
377392
)}
@@ -568,6 +583,7 @@ export function LearnRightCard({ data, type, permission }) {
568583
payLoading={payLoading}
569584
isPay={isPay}
570585
payment={payment}
586+
related={related}
571587
/>
572588

573589
<hr className="border-gray-400" />

src/app/learn/[type]/[id]/page.js

+26-10
Original file line numberDiff line numberDiff line change
@@ -48,44 +48,60 @@ export async function generateMetadata({ params }) {
4848
},
4949
};
5050
}
51+
5152
export default async function LearnDetailsPage({ params, searchParams }) {
53+
const learnType = params.type;
54+
const learnId = params.id;
55+
5256
let datas;
53-
if (params.type === 'career_path') {
57+
58+
if (learnType === 'career_path') {
5459
datas = await Promise.all([
55-
get(`ts/v1/learn/general/course/grow_path/${params.id}`, {isServer: true}),
56-
get(`ts/v1/learn/general/course/grow_path/${params.id}/permission`, {isServer: true}),
60+
get(`ts/v1/learn/general/course/grow_path/${learnId}`, {isServer: true}),
61+
get(`ts/v1/learn/general/course/grow_path/${learnId}/permission`, {isServer: true}),
5762
]);
5863
} else {
5964
datas = await Promise.all([
60-
get(`v1/learn/course/${params.type === 'courses' ? 'opencourse' : 'challenges'}/${params.id}`, {isServer: true}),
61-
get(`ts/v1/learn/general/course/series/${params.id}/permission`, {isServer: true}),
65+
get(`v1/learn/course/${learnType === 'courses' ? 'opencourse' : 'challenges'}/${learnId}`, {isServer: true}),
66+
get(`ts/v1/learn/general/course/series/${learnId}/permission`, {isServer: true}),
6267
]);
6368
}
69+
6470
const [{ data }, { data: permission }] = [...datas];
6571

66-
return params.type !== 'career_path' ? (
72+
let related = null;
73+
74+
if (learnType === 'challenges' && data?.challenges_extra?.course_challenges_extra_time_order === 0) {
75+
const res = await get(`ts/v1/learn/general/course/challenges/${learnId}/link`, { isServer: true });
76+
77+
if (res.data.link.toString() !== learnId) {
78+
related = res.data;
79+
}
80+
}
81+
82+
return learnType !== 'career_path' ? (
6783
<>
6884
<PreviewAlert searchParams={searchParams} />
6985
<div className="mx-auto px-6 lg:flex max-w-[1400px] justify-center">
7086
<div className="flex flex-1 border-gray-400 pt-6 lg:border-r lg:pr-14">
7187
<div className="w-full">
7288
<div className="flex justify-between">
7389
<Back params={params} />
74-
<Share img={data?.base?.course_series_img} title={data?.base?.course_series_title} type={params.type} id={params.id} excerpt={data?.base?.course_series_summary}/>
90+
<Share img={data?.base?.course_series_img} title={data?.base?.course_series_title} type={learnType} id={learnId} excerpt={data?.base?.course_series_summary}/>
7591
</div>
7692
<Title data={data} />
77-
{params.type === 'challenges' && <ChallengesTags data={data} />}
93+
{learnType === 'challenges' && <ChallengesTags data={data} />}
7894
{data?.base?.course_series_summary && <Summary data={data} />}
7995
{data && <Author data={data} />}
8096
{data && <Tabs data={data} />}
8197
{data && <LearnInfo data={data} />}
82-
{data && data?.courses?.length > 0 && <Chapters type={params.type} data={data} id={data?.base?.course_series_id} />}
98+
{data && data?.courses?.length > 0 && <Chapters type={learnType} data={data} id={data?.base?.course_series_id} />}
8399
<div className="h-6" />
84100
{data && data?.speaker?.length > 0 && <Speaker data={data?.speaker} />}
85101
<div className="h-[72px]" />
86102
</div>
87103
</div>
88-
<LearnRightCard data={data} type={params.type} permission={permission} />
104+
<LearnRightCard data={data} type={learnType} permission={permission} related={related} />
89105
</div>
90106
</>
91107
) : <GrowPath params={params} data={data} permission={permission} />;

0 commit comments

Comments
 (0)