diff --git a/package-lock.json b/package-lock.json index a9c4068a..c61ceff2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2347,6 +2347,126 @@ "glob": "10.3.10" } }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.18.tgz", + "integrity": "sha512-tOBlDHCjGdyLf0ube/rDUs6VtwNOajaWV+5FV/ajPgrvHeisllEdymY/oDgv2cx561+gJksfMUtqf8crug7sbA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.18.tgz", + "integrity": "sha512-uJCEjutt5VeJ30jjrHV1VIHCsbMYnEqytQgvREx+DjURd/fmKy15NaVK4aR/u98S1LGTnjq35lRTnRyygglxoA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.18.tgz", + "integrity": "sha512-IL6rU8vnBB+BAm6YSWZewc+qvdL1EaA+VhLQ6tlUc0xp+kkdxQrVqAnh8Zek1ccKHlTDFRyAft0e60gteYmQ4A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.18.tgz", + "integrity": "sha512-RCaENbIZqKKqTlL8KNd+AZV/yAdCsovblOpYFp0OJ7ZxgLNbV5w23CUU1G5On+0fgafrsGcW+GdMKdFjaRwyYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.18.tgz", + "integrity": "sha512-3kmv8DlyhPRCEBM1Vavn8NjyXtMeQ49ID0Olr/Sut7pgzaQTo4h01S7Z8YNE0VtbowyuAL26ibcz0ka6xCTH5g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.18.tgz", + "integrity": "sha512-mliTfa8seVSpTbVEcKEXGjC18+TDII8ykW4a36au97spm9XMPqQTpdGPNBJ9RySSFw9/hLuaCMByluQIAnkzlw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.18.tgz", + "integrity": "sha512-J5g0UFPbAjKYmqS3Cy7l2fetFmWMY9Oao32eUsBPYohts26BdrMUyfCJnZFQkX9npYaHNDOWqZ6uV9hSDPw9NA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.18.tgz", + "integrity": "sha512-Ynxuk4ZgIpdcN7d16ivJdjsDG1+3hTvK24Pp8DiDmIa2+A4CfhJSEHHVndCHok6rnLUzAZD+/UOKESQgTsAZGg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-win32-x64-msvc": { "version": "14.2.18", "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.18.tgz", diff --git a/public/assets/images/crew-sample/crew-sample-2.jpg b/public/assets/images/crew-sample/crew-sample-2.jpg index 10e7fbb0..368e20d1 100644 Binary files a/public/assets/images/crew-sample/crew-sample-2.jpg and b/public/assets/images/crew-sample/crew-sample-2.jpg differ diff --git a/public/assets/images/crew-sample/index.tsx b/public/assets/images/crew-sample/index.tsx index 9e530eed..c8cbe811 100644 --- a/public/assets/images/crew-sample/index.tsx +++ b/public/assets/images/crew-sample/index.tsx @@ -5,7 +5,7 @@ import ImgCrewSample03 from './crew-sample-3.jpg'; const ImgCrewSamples = [ImgCrewSample01, ImgCrewSample02, ImgCrewSample03]; const ImgCrewSampleUrls = [ 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/0e05d971-15a8-4a32-bf03-80d12cae392e', - 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/eb35c35d-829a-402b-8019-29e42f91589f', + 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/817dac5a-f5e7-43c4-b32e-50d1ad2983aa', 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/471b3b3b-b23c-48e8-8e6b-9a7ec31e1917', ]; diff --git a/public/assets/images/gathering-sample/gathering-sample-1.jpg b/public/assets/images/gathering-sample/gathering-sample-1.jpg index e31570d0..30c640c1 100644 Binary files a/public/assets/images/gathering-sample/gathering-sample-1.jpg and b/public/assets/images/gathering-sample/gathering-sample-1.jpg differ diff --git a/public/assets/images/gathering-sample/gathering-sample-2.jpg b/public/assets/images/gathering-sample/gathering-sample-2.jpg index ea07eeb8..12d523f4 100644 Binary files a/public/assets/images/gathering-sample/gathering-sample-2.jpg and b/public/assets/images/gathering-sample/gathering-sample-2.jpg differ diff --git a/public/assets/images/gathering-sample/gathering-sample-3.jpg b/public/assets/images/gathering-sample/gathering-sample-3.jpg index dead8ceb..5c9cf75e 100644 Binary files a/public/assets/images/gathering-sample/gathering-sample-3.jpg and b/public/assets/images/gathering-sample/gathering-sample-3.jpg differ diff --git a/public/assets/images/gathering-sample/index.tsx b/public/assets/images/gathering-sample/index.tsx index 116d1637..44f19070 100644 --- a/public/assets/images/gathering-sample/index.tsx +++ b/public/assets/images/gathering-sample/index.tsx @@ -4,9 +4,9 @@ import ImgGatheringSample03 from './gathering-sample-3.jpg'; const ImgGatheringSamples = [ImgGatheringSample01, ImgGatheringSample02, ImgGatheringSample03]; const ImgGatheringSampleUrls = [ - 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/1ff61110-e238-4fd6-8736-e6f03483f4df', - 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/85ad6a48-a1cb-4c8f-b713-94b9e18b023a', - 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/60bc093c-cb3a-4628-93b9-fbf19e47a1ac', + 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/e276276c-c79e-4654-a2b2-279bccb7ca05', + 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/69d4f72f-8bad-4e9e-894c-9e8c9b57db2d', + 'https://crewcrew.s3.ap-northeast-2.amazonaws.com/crew/d3c507f4-0391-4acb-8bc3-ae5379bdb058', ]; export default ImgGatheringSampleUrls; diff --git a/public/assets/images/og.png b/public/assets/images/og.png new file mode 100644 index 00000000..2af069ed Binary files /dev/null and b/public/assets/images/og.png differ diff --git a/src/_apis/image/get-image-url.ts b/src/_apis/image/get-image-url.ts index 253c7e56..64220cb4 100644 --- a/src/_apis/image/get-image-url.ts +++ b/src/_apis/image/get-image-url.ts @@ -1,6 +1,4 @@ import { fetchApi } from '@/src/utils/api'; -import validateFile from '@/src/utils/validate-file'; -import Toast from '@/src/components/common/toast'; import { GetImageUrlResponseTypes } from '@/src/types/create-crew'; export async function getImageUrl( @@ -10,9 +8,6 @@ export async function getImageUrl( const formData = new FormData(); if (file instanceof File) { try { - if (!validateFile(file)) { - throw new Error('Invalid file'); - } formData.append('file', file); const response: { data: GetImageUrlResponseTypes } = await fetchApi( @@ -28,7 +23,6 @@ export async function getImageUrl( return response.data; } catch (error) { - // eslint-disable-next-line no-console throw error; } } diff --git a/src/_queries/crew/crew-detail-queries.ts b/src/_queries/crew/crew-detail-queries.ts index f357186a..314da2ad 100644 --- a/src/_queries/crew/crew-detail-queries.ts +++ b/src/_queries/crew/crew-detail-queries.ts @@ -24,6 +24,8 @@ export function useCreateCrewQuery() { } queryClient.invalidateQueries({ queryKey: ['crewLists', 'crewDetail'] }); toast.success('크루가 생성되었습니다.'); + localStorage.removeItem('createCrew'); + router.push(`/crew/detail/${data.crewId}`); }, onError: (error) => { diff --git a/src/app/(crew)/crew/create/_components/create-crew-form/index.tsx b/src/app/(crew)/crew/create/_components/create-crew-form/index.tsx index 2fb2daf0..23e969fb 100644 --- a/src/app/(crew)/crew/create/_components/create-crew-form/index.tsx +++ b/src/app/(crew)/crew/create/_components/create-crew-form/index.tsx @@ -1,8 +1,9 @@ 'use client'; -import { useEffect, useState } from 'react'; +import { FormEvent, useEffect, useState } from 'react'; import { Controller, useForm, useWatch } from 'react-hook-form'; import useFormPersist from 'react-hook-form-persist'; +import { toast } from 'react-toastify'; import { useRouter } from 'next/navigation'; import { NumberInput } from '@mantine/core'; import { getImageUrl } from '@/src/_apis/image/get-image-url'; @@ -39,13 +40,14 @@ export default function CreateCrewForm({ trigger, clearErrors, watch, + setError, formState: { errors, isValid, isSubmitting, isSubmitSuccessful }, } = useForm({ defaultValues: data, mode: 'onBlur', }); - useFormPersist(type === 'create' ? 'createCrew' : 'editCrew', { + useFormPersist(type === 'create' ? 'createCrew' : '', { watch, setValue, storage: typeof window !== 'undefined' ? window.localStorage : undefined, @@ -88,9 +90,30 @@ export default function CreateCrewForm({ file: File | string | null, onChange: (value: string | File) => void, ) => { - if (file instanceof File) { - const imgResponse = await getImageUrl(file, 'CREW'); - onChange(imgResponse?.imageUrl || ''); + try { + // 파일 등록 처리 + if (file instanceof File) { + const imgResponse = await getImageUrl(file, 'CREW'); + if (imgResponse?.imageUrl) { + clearErrors('imageUrl'); // 에러 초기화 + onChange(imgResponse.imageUrl); // 이미지 URL 설정 + } else { + throw new Error('이미지 업로드 중 문제가 발생했습니다.'); + } + } + } catch (error) { + // API 에러 처리 + setError('imageUrl', { type: 'server', message: errors.imageUrl?.message }); + setValue('imageUrl', ''); + } + }; + + const handleSendForm = (e: FormEvent) => { + e.preventDefault(); + if (type === 'create') { + handleSubmit(onSubmit)(); + } else { + handleSubmit(onEdit)(); } }; @@ -112,7 +135,7 @@ export default function CreateCrewForm({ }, [mainCategory, mainLocation, isSubmitSuccessful]); return ( -
+
@@ -154,7 +177,7 @@ export default function CreateCrewForm({