From c642615d361794215c5a8505b053904aa07aba97 Mon Sep 17 00:00:00 2001 From: cccwon2 Date: Thu, 12 Dec 2024 13:25:06 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20SelectProgressModal=20=EB=AA=A8?= =?UTF-8?q?=EB=8B=AC=20=EB=B2=84=ED=8A=BC=20css=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/modal/modals/confirm/SelectProgressModal.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/components/modal/modals/confirm/SelectProgressModal.tsx b/src/app/components/modal/modals/confirm/SelectProgressModal.tsx index e60b208a..1cd71c05 100644 --- a/src/app/components/modal/modals/confirm/SelectProgressModal.tsx +++ b/src/app/components/modal/modals/confirm/SelectProgressModal.tsx @@ -86,14 +86,16 @@ const SelectProgressModal = ({ id, isOpen, onClose, className }: ConfirmFormModa onClick={handleCancel} color="gray" disabled={isSubmitting} - className="h-[58px] w-full text-sm font-medium hover:bg-grayscale-200 md:h-[72px] md:text-base" + width="sm" + className="h-[48px] text-base font-medium md:h-[62px] md:text-lg" > 취소 From e1ce8cf11f81529ec00f0432efc38a0ddcb664f3 Mon Sep 17 00:00:00 2001 From: cccwon2 Date: Thu, 12 Dec 2024 14:07:00 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EC=95=8C=EB=B0=94=ED=8F=BC=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20kakao=20map?= =?UTF-8?q?=20=EC=A7=80=EB=8F=84=20=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(pages)/alba/[formId]/page.tsx | 56 +++++++++-- .../modals/confirm/SelectProgressModal.tsx | 93 ++++++++++--------- 2 files changed, 97 insertions(+), 52 deletions(-) diff --git a/src/app/(pages)/alba/[formId]/page.tsx b/src/app/(pages)/alba/[formId]/page.tsx index d1d8a2fb..057a316d 100644 --- a/src/app/(pages)/alba/[formId]/page.tsx +++ b/src/app/(pages)/alba/[formId]/page.tsx @@ -8,27 +8,52 @@ import FormDetails from "../components/FormDetail"; import RecruitInformation from "../components/RecruitInfomation"; import ApplicationStatus from "../components/ApplicationStatus"; import { useFormDetail } from "@/hooks/queries/form/detail/useFormDetail"; +import { Map, MapMarker, useKakaoLoader } from "react-kakao-maps-sdk"; +import Script from "next/script"; + +interface Coords { + lat: number; + lng: number; +} export default function AlbaFormDetailPage() { - const { formId } = useParams(); // useParams로 formId 추출 + const { formId } = useParams(); const [formIdState, setFormIdState] = useState(0); const { user } = useUser(); const isOwner = user?.role === "OWNER"; + // 카카오맵 관련 상태 + const [coords, setCoords] = useState({ lat: 37.5665, lng: 126.978 }); + const [loading, error] = useKakaoLoader({ + appkey: process.env.NEXT_PUBLIC_KAKAO_APP_KEY as string, + libraries: ["services"], + }); + useEffect(() => { - // formId가 문자열로 전달되므로 숫자로 변환하여 상태에 저장 if (formId) { - setFormIdState(Number(formId)); // formId를 숫자로 변환하여 상태에 저장 + setFormIdState(Number(formId)); } }, [formId]); - // formId가 설정되면 useFormDetail 호출 - const { albaFormDetailData, isLoading, error } = useFormDetail({ formId: formIdState }); + const { albaFormDetailData, isLoading, error: formError } = useFormDetail({ formId: formIdState }); - if (isLoading) return
Loading...
; + // 주소로 좌표 검색 + useEffect(() => { + if (!albaFormDetailData?.location) return; - if (error) return
Error: 데이터를 불러오는데 문제가 발생했습니다.
; + if (typeof window === "undefined" || !window.kakao?.maps?.services) return; + const geocoder = new window.kakao.maps.services.Geocoder(); + geocoder.addressSearch(albaFormDetailData.location, (result: any[], status: string) => { + if (status === window.kakao.maps.services.Status.OK && result.length > 0) { + const { x, y } = result[0]; + setCoords({ lat: parseFloat(y), lng: parseFloat(x) }); + } + }); + }, [albaFormDetailData?.location]); + + if (isLoading) return
Loading...
; + if (formError) return
Error: 데이터를 불러오는데 문제가 발생했습니다.
; if (!albaFormDetailData) return
데이터가 없습니다.
; return ( @@ -40,9 +65,24 @@ export default function AlbaFormDetailPage() {
+ + {/* 카카오맵 스크립트 */} +