Skip to content

Commit

Permalink
Merge pull request #34 from Team-return/develop
Browse files Browse the repository at this point in the history
develop -> main
  • Loading branch information
jikwan0327 authored Dec 6, 2023
2 parents 4f50479 + 3ead16f commit e96151c
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 13 deletions.
68 changes: 65 additions & 3 deletions src/apis/applications/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@ import { useToastStore } from "@team-return/design-system";
import { AxiosError } from "axios";
import { useRouter } from "next/navigation";
import { instance } from "../axios";
import { ApplicationsResponseType, ApplyRequestItmeType } from "./type";
import {
ApplicationsResponseType,
ApplyRequestItmeType,
RejectionResponseType,
} from "./type";

const router = "/applications";

export default function useApplyToCompany(recruitmentId: string) {
export function useApplyToCompany(recruitmentId: string) {
const navigator = useRouter();
const { append } = useToastStore();
return useMutation(
Expand Down Expand Up @@ -52,7 +56,6 @@ export default function useApplyToCompany(recruitmentId: string) {
);
}


export function useGetApplications() {
return useQuery(["GetApplications"], async () => {
const { data } = await instance.get<ApplicationsResponseType>(
Expand All @@ -61,3 +64,62 @@ export function useGetApplications() {
return data;
});
}

export function useReapply(applicationId: string | null) {
const navigator = useRouter();
const { append } = useToastStore();
return useMutation(
async (body: ApplyRequestItmeType[]) =>
await instance.put(`${router}/${applicationId}`, {
attachments: body,
}),
{
onSuccess: () => {
navigator.push("/mypage");
},
onError: (error: AxiosError) => {
switch (error.response?.status) {
case 400:
append({
title: "",
message: "승인요청 또는 반려상태가 아닙니다.",
type: "RED",
});
case 401:
append({
title: "",
message: "3학년이 아닌 학생은 지원할 수 없습니다.",
type: "RED",
});
break;
case 404:
append({
title: "",
message: "모집의뢰서가 존재하지 않습니다.",
type: "RED",
});
break;
case 409:
append({
title: "",
message:
"이미 해당 모집의뢰에 지원했거나 승인된 지원요청이 존재합니다.",
type: "RED",
});

default:
break;
}
},
}
);
}

export function useGetRejectionReason(applicationid: string) {
return useQuery(["GetRejectionReason"], async () => {
const { data } = await instance.get<RejectionResponseType>(
`${router}/rejection/${applicationid}`
);
return data;
});
}
9 changes: 7 additions & 2 deletions src/apis/applications/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export type ApplicationsStatusType =
| "REJECTED";

export interface ApplicationItemType {
recruitment_id: number;
application_id: number;
company: string;
attachments: ApplyRequestItmeType[];
Expand All @@ -21,9 +22,13 @@ export interface ApplicationItemType {

export interface ApplicationsResponseType {
applications: ApplicationItemType[];
count: number
count: number;
}

export interface ApplyRequestBody {
attachments: ApplyRequestItmeType[];
}
}

export interface RejectionResponseType {
rejection_reason: string;
}
1 change: 1 addition & 0 deletions src/apis/recruitments/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export interface RecruitmentsListType {
train_pay: number;
military_support: boolean;
hiring_jobs: number;
job_code_list: string;
bookmarked: boolean;
}

Expand Down
19 changes: 12 additions & 7 deletions src/app/recruitments/apply/page.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import useApplyToCompany from "@/apis/applications";
import { useApplyToCompany, useReapply } from "@/apis/applications";
import {
ApplyRequestItmeType,
AttachmentsType,
Expand All @@ -13,20 +13,23 @@ import Logo from "@/components/common/Logo";
import FilePreview from "@/components/recruitments/apply/FilePreview";
import FileUploader from "@/components/recruitments/apply/FileUploader";
import Header_Contents from "@/components/recruitments/apply/Header_Contents";
import UrlListComponent from "@/components/recruitments/apply/UrlListComponent";
import ShadowBox from "@/components/recruitments/apply/ShadowBox";
import TitleBox from "@/components/recruitments/apply/TitleBox";
import URLItem from "@/components/recruitments/apply/URLItem";
import UrlListComponent from "@/components/recruitments/apply/UrlListComponent";
import useMoadl from "@/hook/useModal";
import { Icon, useToastStore } from "@team-return/design-system";
import { useSearchParams } from "next/navigation";
import { useEffect, useState } from "react";
import URLItem from "@/components/recruitments/apply/URLItem";

export default function Apply() {
const param = useSearchParams();
const applicationId = param.get("application");
const { Modal, openModal, closeModal } = useMoadl();
const { mutate: onApplyToCompany, isLoading: applyIsLoading } =
useApplyToCompany(param.get("id")!);
const { mutate: onReapply, isLoading: reapplyIsLoading } =
useReapply(applicationId);
const {
mutate: onUploadFile,
data: fileResponse,
Expand Down Expand Up @@ -88,19 +91,21 @@ export default function Apply() {

useEffect(() => {
if (isApply) {
onApplyToCompany(applyRequest);
//openModal();
if (!applicationId) onApplyToCompany(applyRequest);
else onReapply(applyRequest);
}
}, [applyRequest]);

//==============================
// 모집의뢰서

const { data: recruitmentsDetial } = useGetRecruitmentsDetail(param.get("id")!);
const { data: recruitmentsDetial } = useGetRecruitmentsDetail(
param.get("id")!
);

return (
<>
{(isLoading || applyIsLoading) && (
{(isLoading || applyIsLoading || reapplyIsLoading) && (
<div
className="fixed top-0 left-0 w-screen h-screen z-10 bg-[rgba(0,0,0,0.2)]"
onClick={(e) => {
Expand Down
41 changes: 40 additions & 1 deletion src/components/mypage/AppliedICompanyItem.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { useGetRejectionReason } from "@/apis/applications";
import { ApplicationItemType } from "@/apis/applications/type";
import { Icon } from "@team-return/design-system";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { useCallback, useRef, useState } from "react";
import FileDownload from "../common/Button/FIleDownload";
import ApplicationStatus from "./ApplicationStatus";
Expand All @@ -9,7 +11,10 @@ export default function APpliedCompanyItem({
company,
application_status,
attachments,
recruitment_id,
application_id,
}: ApplicationItemType) {
const navigator = useRouter();
const parentRef = useRef<HTMLDivElement>(null);
const childRef = useRef<HTMLDivElement>(null);
const [isCollapse, setIsCollapse] = useState(false);
Expand All @@ -32,6 +37,13 @@ export default function APpliedCompanyItem({

const parentRefHeight = parentRef.current?.style.height ?? "0px";

const rejectReason = () => {
if (application_status === "REJECTED") {
const { data } = useGetRejectionReason(application_id.toString());
return data?.rejection_reason;
}
};

return (
<div
className="w-full border border-[#e5e5e5] rounded-[8px] p-4 relative"
Expand All @@ -53,13 +65,40 @@ export default function APpliedCompanyItem({
direction={parentRefHeight === "0px" ? "bottom" : "top"}
/>
</div>
<ApplicationStatus status={application_status} />
<div className="flex flex-row items-center gap-4">
{(application_status === "REQUESTED" ||
application_status === "REJECTED") && (
<p
onClick={(event) => {
event.stopPropagation();
navigator.push(
`/recruitments/apply/?id=${recruitment_id}&application=${application_id}`
);
}}
className="underline text-caption leading-caption font-r text-[#7f7f7f] cursor-pointer"
>
재지원하기
</p>
)}

<ApplicationStatus status={application_status} />
</div>
</div>
<div
ref={parentRef}
className="w-full h-0 px-2 overflow-hidden transition-[height_0.35s_ease]"
>
<div ref={childRef}>
{application_status === "REJECTED" && (
<div className="mb-6 ml-2">
<p className="text-b3 leading-b3 font-m text-[#E74C3C]">
반려사유
</p>
<p className="text-caption leading-caption font-r text-[#E74C3C]">
{rejectReason()}
</p>
</div>
)}
<div className="flex flex-wrap gap-2">
{attachments.map((item, idx) => (
<>
Expand Down
6 changes: 6 additions & 0 deletions src/util/object/enum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,21 @@ export const departmentEnum = {
export const applicationEnum = {
REQUESTED: "승인요청",
APPROVED: "승인됨",
SEND: "전송",
FAILED: "불합격",
PASS: "합격",
REJECTED: "반려",
FIELD_TRAIN: "현장실습",
ACCEPTANCE: "근로계약",
};

export const applicationStatusStyle = {
REQUESTED: { color: "#7F7F7F", backgroundColor: "#F7F7F7" },
APPROVED: { color: "#2ECC71", backgroundColor: "#E6F8EE" },
SEND: { color: "#873CE7", backgroundColor: "#F0E7FC" },
FAILED: { color: "#E74C3C", backgroundColor: "#FCE9E7" },
PASS: { color: "#237BC9", backgroundColor: "#E4EFF8" },
REJECTED: { color: "#F1C40F", backgroundColor: "#FDF8E2" },
FIELD_TRAIN: { color: "#237BC9", backgroundColor: "#E4EFF8" },
ACCEPTANCE: { color: "#237BC9", backgroundColor: "#E4EFF8" },
};

0 comments on commit e96151c

Please sign in to comment.