Skip to content

Commit dd63e4c

Browse files
authored
Merge pull request #132 from FE9-2/refactor/layout
Refactor : alba/[id] ํด๋” ๋ณ‘ํ•ฉ
2 parents c5e8324 + e7c7255 commit dd63e4c

File tree

19 files changed

+133
-83
lines changed

19 files changed

+133
-83
lines changed

โ€Žsrc/app/(pages)/(albaform)/addform/page.tsxโ€Ž

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
22
import { useEffect, useState } from "react";
3-
import { useParams, useRouter, useSearchParams } from "next/navigation";
3+
import { useRouter, useSearchParams } from "next/navigation";
44
import { FormProvider, useForm } from "react-hook-form";
55
import axios from "axios";
66
import TabMenuDropdown from "@/app/components/button/dropdown/TabMenuDropdown";
@@ -17,13 +17,13 @@ import CustomFormModal from "@/app/components/modal/modals/confirm/CustomFormMod
1717

1818
export default function AddFormPage() {
1919
const router = useRouter();
20-
const formId = useParams().formId;
21-
// ๋ฆฌ์•กํŠธ ํ›…ํผ์—์„œ ๊ด€๋ฆฌํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ง€์ • ๋ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ (์ƒ์œ„ ์ปด๏ฟฝ๏ฟฝ๏ฟฝํŠธ = useForm ์‚ฌ์šฉ)
20+
const [formId, setFormId] = useState<number | undefined>(undefined);
21+
// ๋ฆฌ์•กํŠธ ํ›…ํผ์—์„œ ๊ด€๋ฆฌํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ง€์ • ๋ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ (์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ = useForm ์‚ฌ์šฉ)
2222
const methods = useForm<SubmitFormDataType>({
2323
mode: "onChange",
2424
defaultValues: {
25-
isPublic: false,
26-
hourlyWage: 0,
25+
isPublic: true,
26+
hourlyWage: "10,030",
2727
isNegotiableWorkDays: false,
2828
workDays: [],
2929
workEndTime: "",
@@ -92,7 +92,7 @@ export default function AddFormPage() {
9292
acc[key] = Number(value);
9393
} else if (key === "hourlyWage") {
9494
// ๋ฌธ์ž์—ด์ด๋ฉด ์ฝค๋งˆ ์ œ๊ฑฐ ํ›„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜
95-
acc[key] = typeof value === "string" ? Number(value.replace(/,/g, "")) : Number(value);
95+
acc[key] = typeof value === "string" ? String(Number(value.replace(/,/g, ""))) : String(Number(value));
9696
} else if (key === "imageUrls") {
9797
// ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€ URL ์‚ฌ์šฉ
9898
acc[key] = uploadedUrls;
@@ -102,14 +102,16 @@ export default function AddFormPage() {
102102
return acc;
103103
}, {});
104104

105-
await axios.post("/api/forms", filteredData);
105+
const response = await axios.post("/api/forms", filteredData);
106+
const id = response.data.id;
107+
setFormId(id);
106108
},
107109
onSuccess: () => {
108110
if (typeof window !== "undefined") {
109111
window.localStorage.removeItem("tempAddFormData");
110112
}
111113
toast.success("์•Œ๋ฐ”ํผ์„ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.");
112-
router.push(`/alba/${formId}`);
114+
// if (formId) router.push(`/alba/${formId}`);
113115
},
114116
onError: (error) => {
115117
console.error("์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", error);
@@ -118,6 +120,12 @@ export default function AddFormPage() {
118120
},
119121
});
120122

123+
useEffect(() => {
124+
if (formId) {
125+
router.push(`/alba/${formId}`);
126+
}
127+
}, [formId]);
128+
121129
// tab ์„ ํƒ ์‹œ Url params ์ˆ˜์ • & ํ•˜์œ„ ํผ ๋ฐ์ดํ„ฐ ์ž„์‹œ์ €์žฅ
122130
const searchParams = useSearchParams();
123131
const currentParam = searchParams.get("tab");
@@ -277,7 +285,7 @@ export default function AddFormPage() {
277285
options={[
278286
{
279287
label: "๋ชจ์ง‘ ๋‚ด์šฉ",
280-
isEditing: isEditingRecruitContent || initialLoad || currentParam === "recruit-content",
288+
isEditing: isEditingRecruitContent || currentParam === "recruit-content",
281289
},
282290
{ label: "๋ชจ์ง‘ ์กฐ๊ฑด", isEditing: isEditingRecruitCondition || currentParam === "recruit-condition" },
283291
{ label: "๊ทผ๋ฌด ์กฐ๊ฑด", isEditing: isEditingWorkCondition || currentParam === "work-condition" },

โ€Žsrc/app/(pages)/(albaform)/addform/section/RecruitContentSection.tsxโ€Ž

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export default function RecruitContentSection() {
1818
const {
1919
register,
2020
setValue,
21-
getValues,
2221
formState: { errors },
2322
} = useFormContext();
2423

โ€Žsrc/app/(pages)/(albaform)/addform/section/WorkConditionSection.tsxโ€Ž

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ export default function WorkConditionSection() {
1919
const {
2020
register,
2121
setValue,
22-
getValues,
2322
trigger,
2423
watch,
2524
formState: { errors },
@@ -40,6 +39,7 @@ export default function WorkConditionSection() {
4039

4140
//๊ทผ๋ฌด ์š”์ผ ์ง€์ •
4241
const [selectedWorkDays, setSelectedWorkDays] = useState<string[]>([]);
42+
const negotiable = watch("isNegotiableWorkDays");
4343

4444
const handleClickDay = (e: MouseEvent<HTMLButtonElement>) => {
4545
e.preventDefault();
@@ -54,6 +54,9 @@ export default function WorkConditionSection() {
5454
setValue("workDays", [...selectedWorkDays, day]);
5555
trigger("workDays");
5656
}
57+
if (negotiable) {
58+
setSelectedWorkDays([]);
59+
}
5760
};
5861

5962
// ์ตœ์ €์‹œ๊ธ‰ ์ƒ์ˆ˜ ์ˆ˜์ • (2025๋…„ ๊ธฐ์ค€)
@@ -100,7 +103,7 @@ export default function WorkConditionSection() {
100103
<div className="relative">
101104
<Script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js" strategy="afterInteractive" />
102105

103-
<form className="my-8 flex flex-col gap-4">
106+
<form className="my-8 flex flex-col gap-8">
104107
<Label>๊ทผ๋ฌด ์œ„์น˜</Label>
105108
<div className="relative">
106109
<LocationInput
@@ -151,35 +154,39 @@ export default function WorkConditionSection() {
151154
))}
152155
</div>
153156

157+
{/* ์š”์ผ ํ˜‘์˜ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ทผ๋ฌด์š”์ผ์€ ์„ ํƒํ•˜์ง€ ์•Š์•„๋„ ๋จ */}
154158
<div className="flex flex-col gap-4">
155159
<Label>๊ทผ๋ฌด ์š”์ผ</Label>
156-
<DayPickerList workDays={selectedWorkDays} onClick={handleClickDay} />
160+
<DayPickerList workDays={selectedWorkDays} onClick={handleClickDay} disabled={negotiable} />
157161

158162
<div className="relative flex flex-col pl-[14px]">
159163
<CheckBtn
160164
label="์š”์ผ ํ˜‘์˜ ๊ฐ€๋Šฅ"
161165
checked={watch("isNegotiableWorkDays")}
162166
{...register("isNegotiableWorkDays")}
163167
/>
164-
{selectedWorkDays.length === 0 && <p className={cn(errorTextStyle, "")}>๊ทผ๋ฌด ์š”์ผ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”.</p>}
168+
{selectedWorkDays.length === 0 && !negotiable && (
169+
<p className={cn(errorTextStyle, "")}>๊ทผ๋ฌด ์š”์ผ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”.</p>
170+
)}
165171
</div>
166172
</div>
167-
168-
<Label>์‹œ๊ธ‰</Label>
169-
<BaseInput
170-
{...register("hourlyWage", {
171-
required: "์‹œ๊ธ‰์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.",
172-
min: {
173-
value: MINIMUM_WAGE,
174-
message: `์ตœ์ €์‹œ๊ธ‰(${formatMoney(MINIMUM_WAGE.toString())}์›) ์ด์ƒ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.`,
175-
},
176-
})}
177-
value={displayWage}
178-
onChange={handleWageChange}
179-
variant="white"
180-
afterString="์›"
181-
errormessage={errors.hourlyWage?.message as string}
182-
/>
173+
<div className="flex flex-col gap-4">
174+
<Label>์‹œ๊ธ‰</Label>
175+
<BaseInput
176+
{...register("hourlyWage", {
177+
required: "์‹œ๊ธ‰์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.",
178+
min: {
179+
value: MINIMUM_WAGE,
180+
message: `์ตœ์ €์‹œ๊ธ‰(${formatMoney(MINIMUM_WAGE.toString())}์›) ์ด์ƒ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.`,
181+
},
182+
})}
183+
value={displayWage}
184+
onChange={handleWageChange}
185+
variant="white"
186+
afterString="์›"
187+
errormessage={errors.hourlyWage?.message as string}
188+
/>
189+
</div>
183190

184191
<div className="relative flex flex-col gap-4">
185192
<Label>๊ณต๊ฐœ ์„ค์ •</Label>
File renamed without changes.
File renamed without changes.

src/app/(pages)/alba/components/FormDetail.tsx renamed to src/app/(pages)/(albaform)/alba/[formId]/edit/components/FormDetail.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default function FormDetails({ albaFormDetailData }: FormDetailsProps) {
2424
</div>
2525
<p className="text-3xl font-bold">{albaFormDetailData.title}</p>
2626
<div className="space-y-32">
27-
<div className="text-2xl">{albaFormDetailData.description}</div>
27+
<div className="whitespace-pre-wrap text-2xl">{albaFormDetailData.description}</div>
2828
<p className="text-3xl font-bold">๊ทผ๋ฌด ์ง€์—ญ</p>
2929
</div>
3030
<div className="flex space-x-5 text-2xl">
File renamed without changes.
File renamed without changes.

โ€Žsrc/app/(pages)/(albaform)/alba/[formId]/edit/page.tsxโ€Ž

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import WorkConditionSection from "../../../addform/section/WorkConditionSection"
1616
import { SubmitFormDataType } from "@/types/addform";
1717
import useEditing from "@/hooks/useEditing";
1818
import useFormDetail from "@/hooks/queries/form/detail/useFormDetail";
19+
import formatMoney from "@/utils/formatMoney";
1920

2021
export default function EditFormPage() {
2122
const router = useRouter();
@@ -57,7 +58,7 @@ export default function EditFormPage() {
5758
if (albaFormDetailData) {
5859
reset({
5960
isPublic: albaFormDetailData.isPublic,
60-
hourlyWage: albaFormDetailData.hourlyWage, // ์‰ผํ‘œ ์ถ”๊ฐ€ํ•˜๊ธฐ
61+
hourlyWage: formatMoney(String(albaFormDetailData.hourlyWage)), // ์‰ผํ‘œ ์ถ”๊ฐ€ํ•˜๊ธฐ
6162
isNegotiableWorkDays: albaFormDetailData.isNegotiableWorkDays,
6263
workDays: albaFormDetailData.workDays,
6364
workEndTime: albaFormDetailData.workEndTime,
@@ -146,7 +147,7 @@ export default function EditFormPage() {
146147
acc[key] = Number(value);
147148
} else if (key === "hourlyWage") {
148149
// hourlyWage๋Š” ์‰ผํ‘œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜
149-
if (value.includes(",")) acc[key] = Number(value.replaceAll(/,/g, "")); // ์‰ผํ‘œ ์ œ๊ฑฐ ํ›„ ์ˆซ์žํ˜• ๋ณ€ํ™˜
150+
if (value.includes(",")) acc[key] = String(Number(value.replaceAll(/,/g, ""))); // ์‰ผํ‘œ ์ œ๊ฑฐ ํ›„ ์ˆซ์žํ˜• ๋ณ€ํ™˜
150151
} else {
151152
acc[key as keyof SubmitFormDataType] = value; // ๋‚˜๋จธ์ง€ ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ์ถ”๊ฐ€
152153
}

src/app/(pages)/alba/[formId]/page.tsx renamed to src/app/(pages)/(albaform)/alba/[formId]/page.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
import { useParams } from "next/navigation";
44
import React, { useEffect, useState } from "react";
55
import { useUser } from "@/hooks/queries/user/me/useUser";
6-
import FormHeader from "../components/FormHeader";
7-
import FormDetails from "../components/FormDetail";
8-
import RecruitInformation from "../components/RecruitInfomation";
9-
import ApplicationStatus from "../components/ApplicationStatus";
106
import { useFormDetail } from "@/hooks/queries/form/detail/useFormDetail";
117
import { Map, MapMarker, useKakaoLoader } from "react-kakao-maps-sdk";
128
import Script from "next/script";
9+
import FormHeader from "./edit/components/FormHeader";
10+
import FormDetails from "./edit/components/FormDetail";
11+
import RecruitInformation from "./edit/components/RecruitInfomation";
12+
import ApplicationStatus from "./edit/components/ApplicationStatus";
1313

1414
interface Coords {
1515
lat: number;

0 commit comments

Comments
ย (0)