Skip to content

Commit 5959ae3

Browse files
committed
feat: link answerpage component to campaign info component
1 parent f717603 commit 5959ae3

4 files changed

Lines changed: 31 additions & 6 deletions

File tree

frontend-nextjs/src/app/[lang]/campaign/[orgSlug]/[campaignSlug]/campaign-info.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import { getCampaignBySlugs, getCampaignAttachments, getCampaignRoles } from "@/
66
import { Calendar, ExternalLink, Mail, FileText, Video, Clock, Users, Briefcase, Info, Phone, SquareUserRound } from "lucide-react";
77
import { dateToString } from "@/lib/utils";
88
import { Button } from "@/components/ui/button";
9-
import { notFound } from "next/navigation";
9+
import { notFound, useParams } from "next/navigation";
1010
import Link from "next/link";
1111

12-
export default function CampaignInfo({ orgSlug, campaignSlug, dict }: { orgSlug: string, campaignSlug: string, dict: any }) {
12+
export default function CampaignInfo({ orgSlug, campaignSlug, dict }: { orgSlug: string, campaignSlug: string, dict: any, lang:string }) {
13+
const params = useParams();
14+
const lang = params.lang
1315
const { data: campaignData } = useQuery({
1416
queryKey: [`${orgSlug}-${campaignSlug}-campaign-details`],
1517
queryFn: () => getCampaignBySlugs(orgSlug, campaignSlug)
@@ -19,12 +21,12 @@ export default function CampaignInfo({ orgSlug, campaignSlug, dict }: { orgSlug:
1921

2022
const { data: roleData } = useQuery({
2123
queryKey: [`${campaignData?.id}-campaign-roles`],
22-
queryFn: () => getCampaignRoles(campaignData!.id)
24+
queryFn: () => getCampaignRoles(campaignData!.id.toString())
2325
});
2426

2527
const { data: attachmentsData } = useQuery({
2628
queryKey: [`${campaignData?.id}-campaign-attachments`],
27-
queryFn: () => getCampaignAttachments(campaignData!.id)
29+
queryFn: () => getCampaignAttachments(campaignData!.id.toString())
2830
})
2931

3032
return (
@@ -352,7 +354,7 @@ export default function CampaignInfo({ orgSlug, campaignSlug, dict }: { orgSlug:
352354
</div>
353355

354356
{/* TODO: If user is logged in, check for existing application and change text to "Continue Application" */}
355-
<Link href={`/campaign/${campaignData.id}/apply`}>
357+
<Link href={`/${lang}/campaign/apply/${campaignData.id}`}>
356358
<Button className="w-full cursor-pointer mb-2" size="lg">
357359
{dict.common.apply}
358360
</Button>

frontend-nextjs/src/app/[lang]/campaign/[orgSlug]/[campaignSlug]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default async function CampaignPage({ params }: { params: Promise<{ orgSl
1616

1717
return (
1818
<HydrationBoundary state={dehydrate(queryClient)}>
19-
<CampaignInfo orgSlug={orgSlug} campaignSlug={campaignSlug} dict={dict} />
19+
<CampaignInfo orgSlug={orgSlug} campaignSlug={campaignSlug} dict={dict} lang={lang}/>
2020
</HydrationBoundary>
2121
)
2222

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { redirect } from "next/navigation";
2+
import { createOrGetApplication } from "@/models/application";
3+
4+
async function ApplyPage({ params }: { params: Promise<{ campaignId: string; lang: string }> }) {
5+
const { campaignId, lang } = await params;
6+
7+
let response;
8+
try {
9+
response = await createOrGetApplication(campaignId);
10+
} catch (error) {
11+
console.error("Failed to create/get application:", error);
12+
redirect(`/${lang}/campaign/apply/${campaignId}/finish`);
13+
}
14+
15+
redirect(`/${lang}/campaign/apply/${campaignId}/application/${response.application_id}`);
16+
}
17+
18+
export default ApplyPage;

frontend-nextjs/src/models/application.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ export interface ApplicationAppliedRoleDetails {
1919
role_name: string;
2020
preference: number;
2121
}
22+
export async function createOrGetApplication(campaignId: string): Promise<{ application_id: string }> {
23+
return await apiRequest<{ application_id: string }>(`/api/v1/campaign/${campaignId}/apply`, {
24+
method: "POST",
25+
});
26+
}
2227

2328
export async function getApplication(applicationId: string): Promise<ApplicationDetails> {
2429
return await apiRequest<ApplicationDetails>(`/api/v1/application/${applicationId}`);

0 commit comments

Comments
 (0)