From 83617a8277fdb19e230c66fa686ac6b25728d343 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Sun, 5 Jan 2025 15:09:55 +0900 Subject: [PATCH 01/34] =?UTF-8?q?refactor:=20=EB=AC=B4=ED=95=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A1=A4=20ref=20=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace/[workspaceId]/workspaceConfirmation/page.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx index cab5f6a..7ec6bd6 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx @@ -19,7 +19,6 @@ export default function Page() { const [ref, inView] = useInView({ threshold: 0.1, - delay: 500, }); const scrollBottomRef = useRef(null); From d42860f4b50a23e9a839ca6756e929a555d4ebdf Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Sun, 5 Jan 2025 15:41:31 +0900 Subject: [PATCH 02/34] =?UTF-8?q?refactor:=20=EC=9D=B4=EC=9D=98=EC=8B=A0?= =?UTF-8?q?=EC=B2=AD=EB=AA=A9=EB=A1=9D=20=EC=95=84=EC=9D=B4=EC=BD=98?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=ED=88=AC=ED=91=9C=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EC=9D=80=20=EC=9D=B8=EC=A6=9D=20=EA=B0=AF=EC=88=98=20?= =?UTF-8?q?=EB=B3=B4=EC=97=AC=EC=A3=BC=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/ObjectionBell.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ObjectionBell.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ObjectionBell.tsx index 2547584..b7afdc3 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ObjectionBell.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ObjectionBell.tsx @@ -15,9 +15,11 @@ export default function ObjectionBell({ workspaceId, workoutConfirmationVoteInCompletionCount, }: IObjectionProps) { - const voteInCompeletionCount = workoutConfirmationVoteInCompletionCount?.some( - (count) => count > 0 - ); + const voteInCompeletionCount = + workoutConfirmationVoteInCompletionCount?.reduce((acc, cur) => { + return acc + cur; + }, 0); + return ( {voteInCompeletionCount ? (
- +
+ {voteInCompeletionCount} +
objectionBellFilled Date: Mon, 6 Jan 2025 22:02:31 +0900 Subject: [PATCH 03/34] =?UTF-8?q?feat:=20=ED=9E=88=EC=8A=A4=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=ED=8E=98=EC=9D=B4=EC=A7=80=201=EB=93=B1=EC=9D=BC?= =?UTF-8?q?=20=EA=B2=BD=EC=9A=B0=20=EC=95=84=EC=9D=B4=EC=BD=98=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace/workspaceHistory/onePrize.svg | 21 +++++++++++++++++++ .../_components/WorkspaceScoreBoard.tsx | 14 ++++++------- 2 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 public/svgs/workspace/workspaceHistory/onePrize.svg diff --git a/public/svgs/workspace/workspaceHistory/onePrize.svg b/public/svgs/workspace/workspaceHistory/onePrize.svg new file mode 100644 index 0000000..cc536e2 --- /dev/null +++ b/public/svgs/workspace/workspaceHistory/onePrize.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceHistory/_components/WorkspaceScoreBoard.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceHistory/_components/WorkspaceScoreBoard.tsx index ba34cb5..32f2670 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceHistory/_components/WorkspaceScoreBoard.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceHistory/_components/WorkspaceScoreBoard.tsx @@ -1,6 +1,7 @@ import Image from 'next/image'; import verticalLine from '@/../public/svgs/workspace/verticalLine.svg'; +import onePrize from '@/../public/svgs/workspace/workspaceHistory/onePrize.svg'; import type { TScoreData } from '@/types/workspaceHistory'; import type { TWorkspaceHistory } from '@/types/workSpace'; @@ -11,7 +12,6 @@ interface WorkspaceScoreBoardProps { function WorkspaceScoreBoard({ workspaceHistoryDatas, }: WorkspaceScoreBoardProps) { - console.log(workspaceHistoryDatas); const scoreDatas = [ { id: 1, @@ -24,6 +24,7 @@ function WorkspaceScoreBoard({ value: workspaceHistoryDatas?.totalWorkoutCount + '회', }, ]; + return (
@@ -52,15 +53,14 @@ function WorkspaceScoreBoard({ })}
{workspaceHistoryDatas?.gabScoreFromFirst === 0 ? ( -
- 1등 +
+ onePrize
) : ( -
+
1등과의 격차 - - {' '} - {workspaceHistoryDatas?.gabScoreFromFirst}점{' '} + + {workspaceHistoryDatas?.gabScoreFromFirst}점
)} From a2623c3c9e62595169e5b45841187f738876fb52 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 6 Jan 2025 22:45:35 +0900 Subject: [PATCH 04/34] =?UTF-8?q?feat:=20=EC=9D=B4=EC=9D=98=EC=8B=A0?= =?UTF-8?q?=EC=B2=AD=20=EC=95=8C=EB=A6=BC=20=EB=AA=A9=EB=A1=9D=20'?= =?UTF-8?q?=EC=99=84=EB=A3=8C=EB=90=A8'=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspaceConfirmationObjectionList/page.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx index 3e19918..b73112c 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx @@ -13,7 +13,7 @@ import WorkoutConfirmationObjectionList from './_components/WorkoutConfirmationO export default function Page() { const workspaceId = useWorkoutIdFromParams(); const [statusButton, setStatusButton] = useState('open'); - const [ref, inView] = useInView({ threshold: 0, delay: 0 }); + const [ref, inView] = useInView(); const workoutConfirmationObjectionList = useInfiniteQuerys({ queryKey: ['workoutConfirmations', workspaceId, statusButton], @@ -40,6 +40,11 @@ export default function Page() { onClick={() => setStatusButton('incompletion')} isClick={statusButton === 'incompletion'} /> + {/* setStatusButton('incompletion')} + isClick={statusButton === 'incompletion'} + /> */}
Date: Mon, 6 Jan 2025 22:57:51 +0900 Subject: [PATCH 05/34] =?UTF-8?q?style:=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=EA=B0=80=20=EC=97=86=EC=9D=84=20=EB=95=8C=20UI=20=EB=86=92?= =?UTF-8?q?=EC=9D=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace/[workspaceId]/workspaceConfirmation/page.tsx | 2 +- .../workspace/[workspaceId]/workspaceHistory/page.tsx | 4 +++- src/app/(afterLogin)/workspace/_components/NoDataUI.tsx | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx index 7ec6bd6..8bf3051 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx @@ -62,7 +62,7 @@ export default function Page() {
{workoutConfirmationPages?.length === 0 ? ( -
+
) : ( diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceHistory/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceHistory/page.tsx index 195529c..27fc135 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceHistory/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceHistory/page.tsx @@ -71,7 +71,9 @@ function Page() { {'<개인별 운동 히스토리 목록>'} {workspaceHistoryDatas?.data.workoutHistories.length === 0 ? ( - +
+ +
) : (
{workspaceHistoryDatas?.data.workoutHistories.map( diff --git a/src/app/(afterLogin)/workspace/_components/NoDataUI.tsx b/src/app/(afterLogin)/workspace/_components/NoDataUI.tsx index 71b795b..f1a35eb 100644 --- a/src/app/(afterLogin)/workspace/_components/NoDataUI.tsx +++ b/src/app/(afterLogin)/workspace/_components/NoDataUI.tsx @@ -8,7 +8,7 @@ interface INoDataUI { export default function NoDataUI({ content }: INoDataUI) { return ( -
+
noGroup {content}
From 35337cec8071be6ec0af05813775855acf96f70b Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Tue, 7 Jan 2025 20:36:51 +0900 Subject: [PATCH 06/34] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20svg=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/svgs/blackX.svg | 3 --- public/svgs/completeImage.svg | 9 --------- public/svgs/x.svg | 3 --- 3 files changed, 15 deletions(-) delete mode 100644 public/svgs/blackX.svg delete mode 100644 public/svgs/completeImage.svg delete mode 100644 public/svgs/x.svg diff --git a/public/svgs/blackX.svg b/public/svgs/blackX.svg deleted file mode 100644 index bfaa8e0..0000000 --- a/public/svgs/blackX.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/svgs/completeImage.svg b/public/svgs/completeImage.svg deleted file mode 100644 index cb8ae30..0000000 --- a/public/svgs/completeImage.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/public/svgs/x.svg b/public/svgs/x.svg deleted file mode 100644 index 22b4501..0000000 --- a/public/svgs/x.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - From 194329a35c0cbd0d1c29e7860d5986f27a7f9f02 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Tue, 7 Jan 2025 20:50:02 +0900 Subject: [PATCH 07/34] =?UTF-8?q?feat:=20=ED=9E=88=EC=8A=A4=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EB=8F=99=20?= =?UTF-8?q?=EC=8B=9C=20=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EC=83=81=EB=8B=A8?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B3=A0=EC=A0=95=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(afterLogin)/workspace/[workspaceId]/page.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx index 951aee6..46d754c 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx @@ -29,6 +29,7 @@ import Link from 'next/link'; import WorkspaceTitle from '@/app/(afterLogin)/workspace/[workspaceId]/_components/WorkspaceTitle'; import WorkspaceGimmi from '@/app/(afterLogin)/workspace/[workspaceId]/_components/WorkspaceGimmi'; import { IWorker } from '@/types/workSpace'; +import ScrollTop from './workspaceConfirmation/_components/ScrollTop'; type THistoryType = { workspaceId: number; @@ -116,6 +117,7 @@ export default function Page() { return (
+ From fa6bc80e961dcd51a296071ce69a51d90ff7847c Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Tue, 7 Jan 2025 23:44:47 +0900 Subject: [PATCH 08/34] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=81=AC=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=8A=A4=ED=83=80=EC=9D=BC?= =?UTF-8?q?=EB=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/completeTask.png | Bin 0 -> 15535 bytes .../workspace-complete/[workspaceId]/page.tsx | 149 +++++++++--------- 2 files changed, 77 insertions(+), 72 deletions(-) create mode 100644 public/images/completeTask.png diff --git a/public/images/completeTask.png b/public/images/completeTask.png new file mode 100644 index 0000000000000000000000000000000000000000..e648170cac301d5f8df3d51a2bf88c771474e942 GIT binary patch literal 15535 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 j{Ex-`NJB@Z

4^#c&F;A7m=Q#=-vw%24WY literal 0 HcmV?d00001 diff --git a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx index 53ae3dc..4347752 100644 --- a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx @@ -1,89 +1,94 @@ 'use client'; import Image from 'next/image'; -import completeImage from '@/../public/svgs/completeImage.svg'; -import x from '@/../public/svgs/x.svg'; -import blackX from '@/../public/svgs/blackX.svg'; import { useQuery } from '@tanstack/react-query'; -import { useParams, useRouter } from 'next/navigation'; +import { useRouter } from 'next/navigation'; + +import backArrow from '@/../public/svgs/backArrow.svg'; +import onePrize from '@/../public/svgs/workspace/workspaceHistory/onePrize.svg'; +import completeTask from '@/../public/images/completeTask.png'; import { completeWorkspace } from '@/api/workspace'; -import { useState } from 'react'; -import ConfettiButton3 from '../_components/ConfettiButton'; +import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParams'; export default function Page() { const router = useRouter(); - const [open, setOpen] = useState(false); - const { workspaceId } = useParams(); - const { data } = useQuery({ - queryKey: ['complete', workspaceId], - queryFn: () => completeWorkspace(Number(workspaceId)), - }); - - const handleOpen = () => { - setOpen((v) => !v); - }; + const workspaceId = useWorkoutIdFromParams(); + // const { data: completeWorkspaceInfo } = useQuery({ + // queryKey: ['complete', workspaceId], + // queryFn: () => completeWorkspace(workspaceId), + // }); return ( -

-
router.back()}> - {open ? ( - black-x - ) : ( - x - )} -
-
-

워크스페이스 목표를

-

모두 달성했어요!

-
당첨된 테스크를 확인 후 팀원들과
-
함께 테스크를 수행해보세요
+
+
router.back()}> + backArrow
-
-
- {open ? ( -
- {data?.data.pickedTask.task} -
- ) : ( - complete-card - )} +
+
+ 워크스페이스 목표를 + 모두 달성했어요!
- - 카드를 눌러 테스크를 확인하세요 - -
-
- 미당첨된 테스크 -
- {data?.data.tasks.map((item: any) => { - return ( -
- {item.task} -
- ); - })} +
+
+ 그룹 테스크 + + 맛있는 밥 사주기 + +
+
+ completeTask +
+
+
+
+
+ + 최종순위를 확인 후 + + 테스크를 수행해보세요! +
+
+
+
+ onePrize +
+ + 1등 닉네임 + + + 총 1등 점수 + +
+
+
+
1
+
+
+
+
+ + 4등 닉네임 + + 4등 점수 +
+
+
4
+
+
+
+
+ 팀별 순위 +
+
2
+
+ 팀원 닉네임 + 팀별 점수 +
+
+
+
- {open && }
); } From 2abe6469df31e365c8926eb369d5726d751cd05a Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Tue, 7 Jan 2025 23:45:01 +0900 Subject: [PATCH 09/34] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=81=AC=20api?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/workspace.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/api/workspace.ts b/src/api/workspace.ts index ae493ce..0942030 100644 --- a/src/api/workspace.ts +++ b/src/api/workspace.ts @@ -52,7 +52,7 @@ const allWorkspaces = async ({ type, keyword = '', page = 0 }: SearchProps) => { type = ''; } const res = await customAxios.get( - `/workspaces?status=${type}&keyword=${keyword}&page=${page}`, + `/workspaces?status=${type}&keyword=${keyword}&page=${page}` ); return res; @@ -66,7 +66,7 @@ const createWorkspace = async (data: any) => { const matchPassword = async ({ workspaceId, password }: PasswordCheck) => { const res = await customAxios.post( `/workspaces/${workspaceId}/match-password`, - { password }, + { password } ); return res; @@ -80,7 +80,7 @@ const joinWorkspace = async ({ const formData = { password, task }; const res = await customAxios.post( `/workspaces/${workspaceId}/join`, - formData, + formData ); return res; }; @@ -115,7 +115,7 @@ const missionsWorkspace = async (workspaceId: number) => { const missionsRecord = async ({ workspaceId, userId }: MissionRecord) => { const res = await customAxios.get( - `/workspaces/${workspaceId}/workings/${userId}`, + `/workspaces/${workspaceId}/workings/${userId}` ); return res; }; @@ -133,7 +133,7 @@ const userMissions = async (workspaceId: number) => { }; const completeWorkspace = async (workspaceId: number) => { - const res = await customAxios.get(`/workspaces/${workspaceId}/tasks`); + const res = await customAxios.get(`/workspaces/${workspaceId}/result`); return res; }; @@ -148,7 +148,7 @@ const workspaceHistorys = async ({ userId, }: TWorkspaceHistory) => { const res = customAxios.get( - `/workspaces/${workspaceId}/workout-context/${userId}`, + `/workspaces/${workspaceId}/workout-context/${userId}` ); return res; }; @@ -160,7 +160,7 @@ const historyDetails = async ({ workoutHistoryId, }: THistoryDetail) => { const res = customAxios.get( - `/workspaces/${workspaceId}/workout-histories/${userId}/${workoutHistoryId}`, + `/workspaces/${workspaceId}/workout-histories/${userId}/${workoutHistoryId}` ); return res; }; From 931f13e1388688c2989fe65baf44e795e86f05cd Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 9 Jan 2025 15:36:53 +0900 Subject: [PATCH 10/34] =?UTF-8?q?refactor:=20=EC=9D=B8=EC=A6=9D=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=B5=9C=EC=A0=81=ED=99=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/ConfirmationCompoConfirm.tsx | 15 ++++++++++----- .../_components/ConfirmationProfileImg.tsx | 10 +++++++--- .../_components/ConfimationDetailImage.tsx | 9 +++++++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ConfirmationCompoConfirm.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ConfirmationCompoConfirm.tsx index 9b0aa09..2e325ad 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ConfirmationCompoConfirm.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ConfirmationCompoConfirm.tsx @@ -2,6 +2,7 @@ import Link from 'next/link'; import Image from 'next/image'; import { IWorkoutConfirmationPageProps } from '@/types/workoutConfirmation'; +import { s3ImageLoader } from '@/utils/image'; interface IConfirmationCompoConfirmProps { workoutConfirmationPage: IWorkoutConfirmationPageProps; @@ -30,19 +31,23 @@ export default function ConfirmationCompoConfirm({
운동인증을 올렸어요!
-
+
workoutConfirmationImageUrl src} - loading='lazy' - sizes='105px' fill + loader={() => + s3ImageLoader( + workoutConfirmationPage.workoutConfirmationImageUrl + ) + } + sizes='105px' className='object-cover' + quality={75} />
...
diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ConfirmationProfileImg.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ConfirmationProfileImg.tsx index b23631c..bdb7fd8 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ConfirmationProfileImg.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/_components/ConfirmationProfileImg.tsx @@ -17,16 +17,20 @@ export default function ConfirmationProfileImg({ profileIcon ) : ( profileIcon imageLoader(profileImageUrlParams)} - width={30} - height={30} + width={40} + height={40} className='w-10 h-10 rounded-full' + placeholder='blur' + blurDataURL='image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==' /> )}
diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmaionDetail/_components/ConfimationDetailImage.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmaionDetail/_components/ConfimationDetailImage.tsx index ba781e0..f32ef74 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmaionDetail/_components/ConfimationDetailImage.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmaionDetail/_components/ConfimationDetailImage.tsx @@ -2,6 +2,7 @@ import Image from 'next/image'; import confirmDetailNoImage from '@/../public/svgs/workspace/workspaceConfirmaion/confirmDetailNoImage.svg'; import { IWorkspaceConfirmationDetailProps } from '@/types/workoutConfirmation'; +import { s3ImageLoader } from '@/utils/image'; interface IConfirmationDetailImage { workspaceConfirmationDetail: IWorkspaceConfirmationDetailProps | undefined; @@ -18,10 +19,14 @@ export default function ConfirmationDetailImage({ Image src} - loading='lazy' + loader={() => + s3ImageLoader( + workspaceConfirmationDetail?.workoutConfirmationImageUrl + ) + } sizes='360px' fill + quality={75} /> )}
From 3591bbff5ac8d30019f8429f388069d958fe90ac Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 9 Jan 2025 15:54:34 +0900 Subject: [PATCH 11/34] =?UTF-8?q?feat:=20Sharp=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EB=AA=A8=EB=93=88=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next.config.mjs | 9 + package-lock.json | 465 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 3 files changed, 472 insertions(+), 3 deletions(-) diff --git a/next.config.mjs b/next.config.mjs index 90fd4ff..f99f493 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -11,6 +11,15 @@ const nextConfig = { // api: { // bodyParser: false, // }, + images: { + formats: ['image/avif', 'image/webp'], + remotePatterns: [ + { + protocol: 'https', + hostname: '**', + }, + ], + }, async rewrites() { return [ { diff --git a/package-lock.json b/package-lock.json index 9e04442..7efd2ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "react-dom": "^18", "react-hook-form": "^7.51.4", "react-intersection-observer": "^9.10.3", + "sharp": "^0.33.5", "swiper": "^11.1.3", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", @@ -2156,6 +2157,16 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -2929,6 +2940,367 @@ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -6277,6 +6649,19 @@ "node": ">=6" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -6293,6 +6678,16 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -6513,6 +6908,15 @@ "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", @@ -8169,6 +8573,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", @@ -10345,9 +10755,10 @@ } }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10393,6 +10804,45 @@ "node": ">= 0.4" } }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10440,6 +10890,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", diff --git a/package.json b/package.json index 5422bad..c5b163c 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "react-dom": "^18", "react-hook-form": "^7.51.4", "react-intersection-observer": "^9.10.3", + "sharp": "^0.33.5", "swiper": "^11.1.3", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", From e92d8be921f09c55eecb5352730bb852e258ce4f Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 9 Jan 2025 17:47:42 +0900 Subject: [PATCH 12/34] =?UTF-8?q?feat:=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=EC=9B=8C=EC=BB=A4=20=EC=BA=90=EC=8B=B1=20=EC=A0=84=EB=9E=B5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next.config.mjs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/next.config.mjs b/next.config.mjs index f99f493..37e910d 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -2,9 +2,23 @@ import withPWAInit from '@ducanh2912/next-pwa'; const withPWA = withPWAInit({ - workboxOptions: {}, dest: 'public', - disable: process.env.NEXT_PUBLIC_MODE === 'development', + workboxOptions: { + runtimeCaching: [ + { + urlPattern: + /^https:\/\/gymmi\.s3\.ap-northeast-2\.amazonaws\.com\/.*\.(png|jpg|jpeg|svg|gif|webp|avif)(\?.*)?$/, + handler: 'CacheFirst', + options: { + cacheName: 'image-cache', + expiration: { + maxEntries: 50, // 최대 50개 이미지 캐시 + maxAgeSeconds: 30 * 24 * 60 * 60, // 30일 + }, + }, + }, + ], + }, }); const nextConfig = { From 8ad942461514d4ecaeb8bad2f1feafdac0628ba1 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 9 Jan 2025 23:14:09 +0900 Subject: [PATCH 13/34] =?UTF-8?q?refactor:=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EC=BA=90=EC=8B=B1=20=EC=98=B5=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next.config.mjs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/next.config.mjs b/next.config.mjs index 37e910d..c1608b0 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -3,6 +3,7 @@ import withPWAInit from '@ducanh2912/next-pwa'; const withPWA = withPWAInit({ dest: 'public', + skipWaiting: true, workboxOptions: { runtimeCaching: [ { @@ -12,12 +13,19 @@ const withPWA = withPWAInit({ options: { cacheName: 'image-cache', expiration: { - maxEntries: 50, // 최대 50개 이미지 캐시 + maxEntries: 50, maxAgeSeconds: 30 * 24 * 60 * 60, // 30일 }, + cacheableResponse: { + statuses: [0, 200], // 성공적인 응답만 캐시 + }, + matchOptions: { + ignoreSearch: true, // URL 파라미터 무시 + }, }, }, ], + cleanupOutdatedCaches: true, // 오래된 캐시 자동 정리 }, }); From 384f8c41fac52d5e5731c4a178a643e2a6d7b5a5 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Fri, 10 Jan 2025 13:58:52 +0900 Subject: [PATCH 14/34] =?UTF-8?q?feat:=20msw=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 445 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 2 files changed, 442 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7efd2ce..2ee3215 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,6 +47,7 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.3", + "msw": "^2.7.0", "postcss": "^8", "tailwindcss": "^3.4.1", "typescript": "^5", @@ -1778,6 +1779,37 @@ "node": ">=6.9.0" } }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cookie": "^0.7.2" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dev": true, + "license": "ISC", + "dependencies": { + "statuses": "^2.0.1" + } + }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, "node_modules/@ducanh2912/next-pwa": { "version": "10.2.7", "resolved": "https://registry.npmjs.org/@ducanh2912/next-pwa/-/next-pwa-10.2.7.tgz", @@ -3301,6 +3333,104 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@inquirer/confirm": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.1.tgz", + "integrity": "sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.2", + "@inquirer/type": "^3.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.2.tgz", + "integrity": "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.9", + "@inquirer/type": "^3.0.2", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@inquirer/core/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.9.tgz", + "integrity": "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.2.tgz", + "integrity": "sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -3404,6 +3534,24 @@ "url": "https://opencollective.com/js-sdsl" } }, + "node_modules/@mswjs/interceptors": { + "version": "0.37.5", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.5.tgz", + "integrity": "sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@next/env": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", @@ -3585,6 +3733,31 @@ "node": ">= 8" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "dev": true, + "license": "MIT" + }, "node_modules/@opentelemetry/api": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", @@ -5431,6 +5604,13 @@ "@types/node": "*" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/eslint": { "version": "8.56.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", @@ -5599,11 +5779,18 @@ "@types/send": "*" } }, + "node_modules/@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "optional": true + "devOptional": true }, "node_modules/@types/trusted-types": { "version": "2.0.7", @@ -5959,6 +6146,35 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6589,6 +6805,16 @@ "node": ">=6" } }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -6725,6 +6951,16 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/core-js-compat": { "version": "3.37.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", @@ -8328,6 +8564,16 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/graphql": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz", + "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/gtoken": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", @@ -8415,6 +8661,13 @@ "node": ">= 0.4" } }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/html-entities": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", @@ -8777,6 +9030,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -9553,6 +9813,74 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/msw": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.0.tgz", + "integrity": "sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.1", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.37.0", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.26.1", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.32.0.tgz", + "integrity": "sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -9884,6 +10212,13 @@ "node": ">= 0.8.0" } }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "dev": true, + "license": "MIT" + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -9971,6 +10306,13 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -9981,9 +10323,10 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -10232,6 +10575,19 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -10240,6 +10596,13 @@ "node": ">=6" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10557,6 +10920,13 @@ "node": ">=0.10.0" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -10949,6 +11319,16 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/stream-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", @@ -10972,6 +11352,13 @@ "node": ">=10.0.0" } }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true, + "license": "MIT" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -11542,6 +11929,32 @@ "node": ">=8.0" } }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -11823,6 +12236,17 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/use-callback-ref": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", @@ -12316,6 +12740,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zustand": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz", diff --git a/package.json b/package.json index c5b163c..6902308 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.3", + "msw": "^2.7.0", "postcss": "^8", "tailwindcss": "^3.4.1", "typescript": "^5", From 12b38ae8fbd6834d94d6f0372cb48fe1eca94a68 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 13 Jan 2025 14:03:23 +0900 Subject: [PATCH 15/34] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=81=AC=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=8A=A4=ED=83=80=EC=9D=BC?= =?UTF-8?q?=EB=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/completeTask.png | Bin 15535 -> 22374 bytes .../workspace/workspaceHistory/lastPrize.svg | 7 +++ .../workspace-complete/[workspaceId]/page.tsx | 40 +++++++++++------- 3 files changed, 32 insertions(+), 15 deletions(-) create mode 100644 public/svgs/workspace/workspaceHistory/lastPrize.svg diff --git a/public/images/completeTask.png b/public/images/completeTask.png index e648170cac301d5f8df3d51a2bf88c771474e942..b92ba426bcc25d9a12552e4c07b22fa60bbfedad 100644 GIT binary patch literal 22374 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 j{Ex-`NJB@Z

4^#c&F;A7m=Q#=-vw%24WY diff --git a/public/svgs/workspace/workspaceHistory/lastPrize.svg b/public/svgs/workspace/workspaceHistory/lastPrize.svg new file mode 100644 index 0000000..99965b4 --- /dev/null +++ b/public/svgs/workspace/workspaceHistory/lastPrize.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx index 4347752..cf57f4c 100644 --- a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx @@ -6,6 +6,7 @@ import { useRouter } from 'next/navigation'; import backArrow from '@/../public/svgs/backArrow.svg'; import onePrize from '@/../public/svgs/workspace/workspaceHistory/onePrize.svg'; +import lastPrize from '@/../public/svgs/workspace/workspaceHistory/lastPrize.svg'; import completeTask from '@/../public/images/completeTask.png'; import { completeWorkspace } from '@/api/workspace'; import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParams'; @@ -19,7 +20,7 @@ export default function Page() { // }); return ( -

+
router.back()}> backArrow
@@ -28,10 +29,10 @@ export default function Page() { 워크스페이스 목표를 모두 달성했어요!
-
+
그룹 테스크 - + 맛있는 밥 사주기
@@ -39,11 +40,11 @@ export default function Page() { completeTask
-
+
- 최종순위를 확인 후 + 최종순위를 확인 후 테스크를 수행해보세요!
@@ -60,25 +61,34 @@ export default function Page() {
-
-
1
+
+
1
-
- - 4등 닉네임 - - 4등 점수 +
+ lastPrize +
+ + 꼴등 닉네임 + + + 꼴등 점수 + +
-
-
4
+
+
4
팀별 순위 -
+
2
팀원 닉네임 From 08859cb36c3102a9838077461acb17f010f9f51c Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 13 Jan 2025 15:01:59 +0900 Subject: [PATCH 16/34] =?UTF-8?q?feat:=20=EB=AA=A9=EC=97=85=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=EB=A1=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/svgs/workspace/taskRank.svg | 4 + .../workspace-complete/[workspaceId]/page.tsx | 135 ++++++++++++------ 2 files changed, 96 insertions(+), 43 deletions(-) create mode 100644 public/svgs/workspace/taskRank.svg diff --git a/public/svgs/workspace/taskRank.svg b/public/svgs/workspace/taskRank.svg new file mode 100644 index 0000000..01d0494 --- /dev/null +++ b/public/svgs/workspace/taskRank.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx index cf57f4c..20a3924 100644 --- a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx @@ -1,15 +1,53 @@ 'use client'; import Image from 'next/image'; -import { useQuery } from '@tanstack/react-query'; +// import { useQuery } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; import backArrow from '@/../public/svgs/backArrow.svg'; import onePrize from '@/../public/svgs/workspace/workspaceHistory/onePrize.svg'; import lastPrize from '@/../public/svgs/workspace/workspaceHistory/lastPrize.svg'; +import taskRank from '@/../public/svgs/workspace/taskRank.svg'; import completeTask from '@/../public/images/completeTask.png'; -import { completeWorkspace } from '@/api/workspace'; +// import { completeWorkspace } from '@/api/workspace'; import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParams'; +import OneLastRank from '../_components/OneLastRank'; + +const mockData = { + task: '맛있는 밥 사주기', + workers: [ + { + name: '팀원1', + rank: 1, + contributeScore: 600, + }, + { + name: '팀원2', + rank: 2, + contributeScore: 500, + }, + { + name: '팀원3', + rank: 3, + contributeScore: 300, + }, + { + name: '팀원4', + rank: 4, + contributeScore: 200, + }, + { + name: '팀원5', + rank: 5, + contributeScore: 100, + }, + { + name: '팀원6', + rank: 6, + contributeScore: 50, + }, + ], +}; export default function Page() { const router = useRouter(); @@ -20,7 +58,7 @@ export default function Page() { // }); return ( -
+
router.back()}> backArrow
@@ -30,11 +68,13 @@ export default function Page() { 모두 달성했어요!
-
- 그룹 테스크 - - 맛있는 밥 사주기 - +
+ 그룹 테스크 +
+ + {mockData.task} + +
completeTask @@ -42,7 +82,7 @@ export default function Page() {
-
+
최종순위를 확인 후 @@ -50,51 +90,60 @@ export default function Page() {
-
- onePrize -
- - 1등 닉네임 - - - 총 1등 점수 - -
-
+
-
1
+
+ {' '} + {mockData.workers[0].rank}{' '} +
-
- lastPrize -
- - 꼴등 닉네임 - - - 꼴등 점수 - -
-
+
-
4
+
+ {' '} + {mockData.workers[mockData.workers.length - 1].rank}{' '} +
팀별 순위 -
-
2
-
- 팀원 닉네임 - 팀별 점수 + {mockData.workers.map((worker) => ( +
+
+ taskRank + + {worker.rank} + +
+
+ + {' '} + {worker.name}{' '} + + + {' '} + {worker.contributeScore} P{' '} + +
-
+ ))}
From 6a6eb168b5e5cb7034440a13e20a2410b449b854 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 13 Jan 2025 15:02:31 +0900 Subject: [PATCH 17/34] =?UTF-8?q?refactor:=20=ED=85=8C=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=20=EC=9D=BC=EB=93=B1,=20=EA=BC=B4=EB=93=B1=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/OneLastRank.tsx | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/app/(afterLogin)/workspace-complete/_components/OneLastRank.tsx diff --git a/src/app/(afterLogin)/workspace-complete/_components/OneLastRank.tsx b/src/app/(afterLogin)/workspace-complete/_components/OneLastRank.tsx new file mode 100644 index 0000000..36add57 --- /dev/null +++ b/src/app/(afterLogin)/workspace-complete/_components/OneLastRank.tsx @@ -0,0 +1,25 @@ +import Image from 'next/image'; + +interface OneLastRankProps { + rankPrize: any; + rankName: string; + rankContributeScore: number; +} + +export default function OneLastRank({ + rankPrize, + rankName, + rankContributeScore, +}: OneLastRankProps) { + return ( +
+ RankPrize +
+ {rankName} + + 총 {rankContributeScore}점 + +
+
+ ); +} From 1c33a4da9112475fd7e38378e535d717b0104371 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 13 Jan 2025 15:14:15 +0900 Subject: [PATCH 18/34] =?UTF-8?q?refactor:=201=EB=93=B1,=20=EA=BC=B4?= =?UTF-8?q?=EB=93=B1=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace-complete/[workspaceId]/page.tsx | 45 +++++++------------ .../_components/OneLastRank.tsx | 33 +++++++++----- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx index 20a3924..7ba39e5 100644 --- a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx @@ -89,35 +89,22 @@ export default function Page() { 테스크를 수행해보세요!
-
- -
-
- {' '} - {mockData.workers[0].rank}{' '} -
-
-
-
- -
-
- {' '} - {mockData.workers[mockData.workers.length - 1].rank}{' '} -
-
-
+ +
팀별 순위 diff --git a/src/app/(afterLogin)/workspace-complete/_components/OneLastRank.tsx b/src/app/(afterLogin)/workspace-complete/_components/OneLastRank.tsx index 36add57..ca76aaa 100644 --- a/src/app/(afterLogin)/workspace-complete/_components/OneLastRank.tsx +++ b/src/app/(afterLogin)/workspace-complete/_components/OneLastRank.tsx @@ -2,23 +2,34 @@ import Image from 'next/image'; interface OneLastRankProps { rankPrize: any; - rankName: string; - rankContributeScore: number; + name: string; + contributeScore: number; + rank: number; + height: string; } export default function OneLastRank({ rankPrize, - rankName, - rankContributeScore, + name, + contributeScore, + rank, + height, }: OneLastRankProps) { return ( -
- RankPrize -
- {rankName} - - 총 {rankContributeScore}점 - +
+
+ RankPrize +
+ {name} + + 총 {contributeScore}점 + +
+
+
+
{rank}
); From 5de957ba7553a8a529ae06d703f8b5cc60372e3a Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 13 Jan 2025 15:25:58 +0900 Subject: [PATCH 19/34] =?UTF-8?q?refactor:=20=ED=85=8C=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=20=ED=8C=80=EC=9B=90=20=EC=88=9C=EC=9C=84=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace-complete/[workspaceId]/page.tsx | 26 +------------ .../_components/TaskRankMenbers.tsx | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 24 deletions(-) create mode 100644 src/app/(afterLogin)/workspace-complete/_components/TaskRankMenbers.tsx diff --git a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx index 7ba39e5..deca560 100644 --- a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx @@ -7,11 +7,11 @@ import { useRouter } from 'next/navigation'; import backArrow from '@/../public/svgs/backArrow.svg'; import onePrize from '@/../public/svgs/workspace/workspaceHistory/onePrize.svg'; import lastPrize from '@/../public/svgs/workspace/workspaceHistory/lastPrize.svg'; -import taskRank from '@/../public/svgs/workspace/taskRank.svg'; import completeTask from '@/../public/images/completeTask.png'; // import { completeWorkspace } from '@/api/workspace'; import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParams'; import OneLastRank from '../_components/OneLastRank'; +import TaskRankMenber from '../_components/TaskRankMenbers'; const mockData = { task: '맛있는 밥 사주기', @@ -108,29 +108,7 @@ export default function Page() {
팀별 순위 - {mockData.workers.map((worker) => ( -
-
- taskRank - - {worker.rank} - -
-
- - {' '} - {worker.name}{' '} - - - {' '} - {worker.contributeScore} P{' '} - -
-
- ))} +
diff --git a/src/app/(afterLogin)/workspace-complete/_components/TaskRankMenbers.tsx b/src/app/(afterLogin)/workspace-complete/_components/TaskRankMenbers.tsx new file mode 100644 index 0000000..9a7f690 --- /dev/null +++ b/src/app/(afterLogin)/workspace-complete/_components/TaskRankMenbers.tsx @@ -0,0 +1,39 @@ +import Image from 'next/image'; + +import taskRank from '@/../public/svgs/workspace/taskRank.svg'; + +interface workerProps { + name: string; + rank: number; + contributeScore: number; +} + +interface TaskRankMenbersProps { + workers: workerProps[]; +} + +export default function TaskRankMenbers({ workers }: TaskRankMenbersProps) { + return ( +
+ {workers.map((worker) => ( +
+
+ taskRank + + {worker.rank} + +
+
+ {worker.name} + + {worker.contributeScore} P + +
+
+ ))} +
+ ); +} From ef190e6d39f14eb5aca39d9ca19ee1a8f7925eb9 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 13 Jan 2025 15:29:30 +0900 Subject: [PATCH 20/34] =?UTF-8?q?refactor:=20=ED=85=8C=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=20=EB=82=B4=EC=9A=A9=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace-complete/[workspaceId]/page.tsx | 17 +++----------- .../_components/TaskContent.tsx | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 src/app/(afterLogin)/workspace-complete/_components/TaskContent.tsx diff --git a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx index deca560..9151fc2 100644 --- a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx @@ -7,11 +7,11 @@ import { useRouter } from 'next/navigation'; import backArrow from '@/../public/svgs/backArrow.svg'; import onePrize from '@/../public/svgs/workspace/workspaceHistory/onePrize.svg'; import lastPrize from '@/../public/svgs/workspace/workspaceHistory/lastPrize.svg'; -import completeTask from '@/../public/images/completeTask.png'; // import { completeWorkspace } from '@/api/workspace'; import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParams'; import OneLastRank from '../_components/OneLastRank'; import TaskRankMenber from '../_components/TaskRankMenbers'; +import TaskContent from '../_components/TaskContent'; const mockData = { task: '맛있는 밥 사주기', @@ -67,19 +67,8 @@ export default function Page() { 워크스페이스 목표를 모두 달성했어요!
-
-
- 그룹 테스크 -
- - {mockData.task} - -
-
-
- completeTask -
-
+ +
diff --git a/src/app/(afterLogin)/workspace-complete/_components/TaskContent.tsx b/src/app/(afterLogin)/workspace-complete/_components/TaskContent.tsx new file mode 100644 index 0000000..293cbcf --- /dev/null +++ b/src/app/(afterLogin)/workspace-complete/_components/TaskContent.tsx @@ -0,0 +1,23 @@ +import Image from 'next/image'; + +import completeTask from '@/../public/images/completeTask.png'; + +interface TaskContentProps { + task: string; +} + +export default function TaskContent({ task }: TaskContentProps) { + return ( +
+
+ 그룹 테스크 +
+ {task} +
+
+
+ completeTask +
+
+ ); +} From e5e51f0cb399da583daef05c25930394b0bad8bd Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 13 Jan 2025 15:37:27 +0900 Subject: [PATCH 21/34] =?UTF-8?q?refactor:=20=EB=AA=A9=EC=97=85=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EC=97=90=EC=84=9C=20=EC=8B=A4?= =?UTF-8?q?=EC=A0=9C=20=EB=B0=B1=EC=97=94=EB=93=9C=20=ED=86=B5=EC=8B=A0=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace-complete/[workspaceId]/page.tsx | 60 ++++--------------- 1 file changed, 12 insertions(+), 48 deletions(-) diff --git a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx index 9151fc2..5746083 100644 --- a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx @@ -13,42 +13,6 @@ import OneLastRank from '../_components/OneLastRank'; import TaskRankMenber from '../_components/TaskRankMenbers'; import TaskContent from '../_components/TaskContent'; -const mockData = { - task: '맛있는 밥 사주기', - workers: [ - { - name: '팀원1', - rank: 1, - contributeScore: 600, - }, - { - name: '팀원2', - rank: 2, - contributeScore: 500, - }, - { - name: '팀원3', - rank: 3, - contributeScore: 300, - }, - { - name: '팀원4', - rank: 4, - contributeScore: 200, - }, - { - name: '팀원5', - rank: 5, - contributeScore: 100, - }, - { - name: '팀원6', - rank: 6, - contributeScore: 50, - }, - ], -}; - export default function Page() { const router = useRouter(); const workspaceId = useWorkoutIdFromParams(); @@ -67,7 +31,7 @@ export default function Page() { 워크스페이스 목표를 모두 달성했어요!
- + {/* */}
@@ -78,26 +42,26 @@ export default function Page() { 테스크를 수행해보세요!
- - */} + {/* + /> */}
팀별 순위 - + {/* */}
From 5c4b91ade16ca66fcd3a65af4901bc1f3ca49027 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Mon, 13 Jan 2025 16:21:54 +0900 Subject: [PATCH 22/34] =?UTF-8?q?feat:=20=ED=88=AC=ED=91=9C=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EC=A7=80=EB=82=9C=20=EC=83=81=EC=84=B8=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=20=ED=88=AC=ED=91=9C=20=EC=83=81=ED=83=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=B1=EC=97=94=EB=93=9C=20=ED=86=B5=EC=8B=A0=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/workspaceConfirmaion.ts | 12 ++++++++ .../workspaceConfirmation/page.tsx | 28 +++++++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/api/workspaceConfirmaion.ts b/src/api/workspaceConfirmaion.ts index eb1bc40..089b805 100644 --- a/src/api/workspaceConfirmaion.ts +++ b/src/api/workspaceConfirmaion.ts @@ -1,5 +1,9 @@ import customAxios from '@/utils/cutstomAxios'; +interface IconfirmationDetailVoteMutationProps { + workspaceId: number; +} + interface IworkoutConfirmationsProps { workspaceId: number; page: number; @@ -38,6 +42,13 @@ const workoutConfirmations = async ({ return res; }; +const confirmationDetailVoteMutationFn = async ({ + workspaceId, +}: IconfirmationDetailVoteMutationProps) => { + const res = customAxios.post(`/workspaces/${workspaceId}/objections`); + return res; +}; + const workoutConfirmaionsDetail = async ({ workspaceId, workoutConfirmationId, @@ -95,6 +106,7 @@ const workoutConfirmationObjectionLists = async ({ export { workoutConfirmations, + confirmationDetailVoteMutationFn, workoutConfirmaionsDetail, workoutObjectionReason, workoutObjections, diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx index 8bf3051..5dfc5b2 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx @@ -2,7 +2,10 @@ import { useInView } from 'react-intersection-observer'; -import { workoutConfirmations } from '@/api/workspaceConfirmaion'; +import { + confirmationDetailVoteMutationFn, + workoutConfirmations, +} from '@/api/workspaceConfirmaion'; import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParams'; import { IWorkoutConfirmationPageProps } from '@/types/workoutConfirmation'; @@ -12,6 +15,7 @@ import ConfirmationCompo from './_components/ConfirmationCompo'; import useInfiniteQuerys from '@/hooks/workoutConfirmation/ useInfiniteQuerys'; import { useEffect, useRef, useState } from 'react'; import NoDataUI from '../../_components/NoDataUI'; +import { useMutation } from '@tanstack/react-query'; export default function Page() { const workspaceId = useWorkoutIdFromParams(); @@ -31,6 +35,16 @@ export default function Page() { inView: inView && initialObserve, }); + const confirmationDetailVoteMutation = useMutation({ + mutationFn: () => confirmationDetailVoteMutationFn({ workspaceId }), + onSuccess: () => { + console.log('상세 인증 투표 상태 요청 성공'); + }, + onError: () => { + console.error('상세 인증 투표 상태 에러 발생'); + }, + }); + const workoutConfirmationPages = workoutConfirmation?.pages .slice() .reverse() @@ -84,10 +98,14 @@ export default function Page() { workoutConfirmationPage={workoutConfirmationPage} index={index} /> - +
confirmationDetailVoteMutation.mutate()} + > + +
); } From 11a44ce4bf84ba957846c4a4346bbb99cad80026 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 13:01:21 +0900 Subject: [PATCH 23/34] =?UTF-8?q?refactor:=20=EC=9B=8C=ED=81=AC=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=84=A4=EC=A0=95=20=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=B9=B8=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/WorkspaceSettingTextArea.tsx | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/app/(afterLogin)/workspaceDetail/[workspaceId]/_components/WorkspaceSettingTextArea.tsx diff --git a/src/app/(afterLogin)/workspaceDetail/[workspaceId]/_components/WorkspaceSettingTextArea.tsx b/src/app/(afterLogin)/workspaceDetail/[workspaceId]/_components/WorkspaceSettingTextArea.tsx new file mode 100644 index 0000000..d08ac6c --- /dev/null +++ b/src/app/(afterLogin)/workspaceDetail/[workspaceId]/_components/WorkspaceSettingTextArea.tsx @@ -0,0 +1,48 @@ +import Image from 'next/image'; +import { Dispatch, SetStateAction } from 'react'; + +import editPencil from '@/../public/svgs/workspace/editPencil.svg'; + +interface WorkspaceSettingTextAreaProps { + textAreaName: string; + id: string; + placeholder: string; + value: string; + isCreator: boolean; + isPreparing: boolean; + textAreaOnChange: Dispatch> | any; +} + +export default function WorkspaceSettingTextArea({ + textAreaName, + id, + placeholder, + value, + isCreator, + isPreparing, + textAreaOnChange, +}: WorkspaceSettingTextAreaProps) { + const taskArea = id === 'task' && !isPreparing; + + return ( +
+ + - {isCreator && ( -
setUpdate((v) => !v)} - > - edit -
- )} -
-
- - - {isCreator && ( -
setUpdate((v) => !v)} - > - edit -
- )} -
+ + +
- {error !== '' ? ( - {error} - ) : null} - {isCreator && update && ( -
-
From 4ace709a2bcdc15e9e3f883ed3c0a4946f29449d Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 14:53:30 +0900 Subject: [PATCH 25/34] =?UTF-8?q?refactor:=20=EC=9B=8C=ED=81=AC=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=99=84=EB=A3=8C=EC=8B=9C=20?= =?UTF-8?q?=EB=9C=A8=EB=8A=94=20=EB=AA=A8=EB=8B=AC=EC=B0=BD=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/WorkspaceCompleteModal.tsx | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/app/(afterLogin)/workspace/[workspaceId]/_components/WorkspaceCompleteModal.tsx diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/_components/WorkspaceCompleteModal.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/_components/WorkspaceCompleteModal.tsx new file mode 100644 index 0000000..946856f --- /dev/null +++ b/src/app/(afterLogin)/workspace/[workspaceId]/_components/WorkspaceCompleteModal.tsx @@ -0,0 +1,83 @@ +import Link from 'next/link'; +import { useEffect, useState } from 'react'; + +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogTitle, +} from '@/components/ui/dialog'; + +interface IWorkspaceCompleteModalProps { + workspaceId: number; + status: string; + isObjectionInProgress: boolean; +} + +export default function WorkspaceCompleteModal({ + workspaceId, + status, + isObjectionInProgress, +}: IWorkspaceCompleteModalProps) { + const [isOpen, setIsOpen] = useState(false); + + useEffect(() => { + if (status === 'COMPLETED') { + setIsOpen(true); + } + }, [status]); + + const handleModalChange = (open: boolean) => { + setIsOpen(open); + }; + + return ( + + + + +
+ {isObjectionInProgress ? ( + + 테스크를 보기 위해서는 +
+ 이의신청을 모두 완료해야해요! +
+ ) : ( + + 워크스페이스 목표를 모두 달성했어요! +
+ 테스크를 확인하러갈까요? +
+ )} +
+
+
+ +
+ {!isObjectionInProgress && ( + + + + )} + + + +
+
+
+
+ ); +} From 2f7deea2af824721d73efb0d1d714ed5e1018c4d Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 14:54:05 +0900 Subject: [PATCH 26/34] =?UTF-8?q?feat:=20=EC=9B=8C=ED=81=AC=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=A2=85=EB=A3=8C=ED=9B=84=20?= =?UTF-8?q?=EC=95=84=EC=A7=81=20=EC=9D=B4=EC=9D=98=EC=8B=A0=EC=B2=AD?= =?UTF-8?q?=EC=9D=B4=20=EB=82=A8=EC=95=84=EC=9E=88=EC=9D=84=20=EB=95=8C=20?= =?UTF-8?q?=EB=AA=A8=EB=8B=AC=EC=B0=BD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace/[workspaceId]/page.tsx | 51 ++++--------------- 1 file changed, 10 insertions(+), 41 deletions(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx index 46d754c..2154607 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx @@ -21,15 +21,16 @@ import { workspace } from '@/constants/queryKey'; import { imageLoader } from '@/utils/image'; import { useQuery } from '@tanstack/react-query'; -import { useParams, useRouter } from 'next/navigation'; -import { useEffect, useState } from 'react'; +import { useRouter } from 'next/navigation'; +import { useState } from 'react'; import Image from 'next/image'; -import Link from 'next/link'; import WorkspaceTitle from '@/app/(afterLogin)/workspace/[workspaceId]/_components/WorkspaceTitle'; import WorkspaceGimmi from '@/app/(afterLogin)/workspace/[workspaceId]/_components/WorkspaceGimmi'; import { IWorker } from '@/types/workSpace'; import ScrollTop from './workspaceConfirmation/_components/ScrollTop'; +import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParams'; +import WorkspaceCompleteModal from './_components/WorkspaceCompleteModal'; type THistoryType = { workspaceId: number; @@ -40,8 +41,7 @@ type THistoryType = { }; export default function Page() { - const { workspaceId } = useParams(); - const workspaceIdNumber = Number(workspaceId); + const workspaceIdNumber = useWorkoutIdFromParams(); const router = useRouter(); @@ -52,8 +52,6 @@ export default function Page() { queryFn: () => infoWorkspace(workspaceIdNumber), }); - const [isOpen, setIsOpen] = useState(false); - let achievementScore = (infoWork?.data.achievementScore / infoWork?.data.goalScore) * 100; @@ -61,16 +59,6 @@ export default function Page() { achievementScore = 100; } - useEffect(() => { - if (infoWork?.data.status === 'COMPLETED') { - setIsOpen(true); - } - }, [infoWork]); - - const handleModalChange = (open: any) => { - setIsOpen(open); - }; - const handleUserId = (user: { userId: number; isMyself: boolean }) => { clickPageMove({ workspaceId: workspaceIdNumber, @@ -118,30 +106,11 @@ export default function Page() { return (
- - - -
- 워크스페이스 목표를 모두 달성했어요!
테스크를 확인하러 - 갈까요? -
-
- -
- -
- cancel -
-
- -
- yes -
- -
-
-
-
+
From 0235556f08b4a5d9bf6a0faad1660b866a801b7d Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 15:10:25 +0900 Subject: [PATCH 27/34] =?UTF-8?q?style:=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=97=86=EC=9D=84=20=EB=95=8C=20=EB=B3=B4=EC=97=AC=EC=A7=80?= =?UTF-8?q?=EB=8A=94=20UI=20=EB=86=92=EC=9D=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(afterLogin)/workspace/_components/NoDataUI.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/(afterLogin)/workspace/_components/NoDataUI.tsx b/src/app/(afterLogin)/workspace/_components/NoDataUI.tsx index f1a35eb..b0bf1ef 100644 --- a/src/app/(afterLogin)/workspace/_components/NoDataUI.tsx +++ b/src/app/(afterLogin)/workspace/_components/NoDataUI.tsx @@ -8,7 +8,7 @@ interface INoDataUI { export default function NoDataUI({ content }: INoDataUI) { return ( -
+
noGroup {content}
From 0e14b6ce627e216110ecb8cc19a4b5cb45ba2100 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 15:11:14 +0900 Subject: [PATCH 28/34] =?UTF-8?q?feat:=20=EC=9D=B4=EC=9D=98=EC=8B=A0?= =?UTF-8?q?=EC=B2=AD=20=EC=95=8C=EB=A6=BC=20=EB=AA=A9=EB=A1=9D=20'?= =?UTF-8?q?=EC=99=84=EB=A3=8C=EB=90=A8'=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../page.tsx | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx index b73112c..810c2f1 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx @@ -9,10 +9,11 @@ import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParam import useInfiniteQuerys from '@/hooks/workoutConfirmation/ useInfiniteQuerys'; import { workoutConfirmationObjectionLists } from '@/api/workspaceConfirmaion'; import WorkoutConfirmationObjectionList from './_components/WorkoutConfirmationObjectionList'; +import NoDataUI from '../../../_components/NoDataUI'; export default function Page() { const workspaceId = useWorkoutIdFromParams(); - const [statusButton, setStatusButton] = useState('open'); + const [statusButton, setStatusButton] = useState('inProgress'); const [ref, inView] = useInView(); const workoutConfirmationObjectionList = useInfiniteQuerys({ @@ -32,26 +33,30 @@ export default function Page() {
setStatusButton('open')} - isClick={statusButton === 'open'} + onClick={() => setStatusButton('inProgress')} + isClick={statusButton === 'inProgress'} /> setStatusButton('incompletion')} isClick={statusButton === 'incompletion'} /> - {/* setStatusButton('incompletion')} - isClick={statusButton === 'incompletion'} - /> */} + onClick={() => setStatusButton('closed')} + isClick={statusButton === 'closed'} + />
- + {workoutConfirmationObjectionListPages?.length === 0 ? ( + + ) : ( + + )}
); From 16dafb444967d8c97fc30a92a587bd2b233e575e Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 15:27:33 +0900 Subject: [PATCH 29/34] =?UTF-8?q?refactor:=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EC=97=86=EC=9D=84=20=EB=95=8C=20=EB=B3=B4=EC=97=AC=EC=A7=80?= =?UTF-8?q?=EB=8A=94=20UI=20=EB=86=92=EC=9D=B4=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace/[workspaceId]/workspaceConfirmation/page.tsx | 2 +- .../workspaceConfirmationObjectionList/page.tsx | 4 +++- src/app/(afterLogin)/workspace/_components/NoDataUI.tsx | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx index 5dfc5b2..247123a 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/page.tsx @@ -73,7 +73,7 @@ export default function Page() { }, [workoutConfirmationPages]); return ( -
+
{workoutConfirmationPages?.length === 0 ? (
diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx index 810c2f1..db6f5ec 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/workspaceConfirmation/workspaceConfirmationObjectionList/page.tsx @@ -48,7 +48,9 @@ export default function Page() { />
{workoutConfirmationObjectionListPages?.length === 0 ? ( - +
+ +
) : ( +
noGroup {content}
From f78a5ffd350b4128c41affd7e87c728bac7e49c5 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 15:42:01 +0900 Subject: [PATCH 30/34] =?UTF-8?q?style:=20=EC=9B=8C=ED=81=AC=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=99=84=EB=A3=8C=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=A3=BC=EC=84=9D=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace-complete/[workspaceId]/page.tsx | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx index 5746083..23ac812 100644 --- a/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace-complete/[workspaceId]/page.tsx @@ -1,13 +1,13 @@ 'use client'; import Image from 'next/image'; -// import { useQuery } from '@tanstack/react-query'; +import { useQuery } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; import backArrow from '@/../public/svgs/backArrow.svg'; import onePrize from '@/../public/svgs/workspace/workspaceHistory/onePrize.svg'; import lastPrize from '@/../public/svgs/workspace/workspaceHistory/lastPrize.svg'; -// import { completeWorkspace } from '@/api/workspace'; +import { completeWorkspace } from '@/api/workspace'; import useWorkoutIdFromParams from '@/hooks/workoutHistory/useWorkoutIdFromParams'; import OneLastRank from '../_components/OneLastRank'; import TaskRankMenber from '../_components/TaskRankMenbers'; @@ -16,10 +16,10 @@ import TaskContent from '../_components/TaskContent'; export default function Page() { const router = useRouter(); const workspaceId = useWorkoutIdFromParams(); - // const { data: completeWorkspaceInfo } = useQuery({ - // queryKey: ['complete', workspaceId], - // queryFn: () => completeWorkspace(workspaceId), - // }); + const { data: completeWorkspaceInfo } = useQuery({ + queryKey: ['complete', workspaceId], + queryFn: () => completeWorkspace(workspaceId), + }); return (
@@ -31,7 +31,7 @@ export default function Page() { 워크스페이스 목표를 모두 달성했어요!
- {/* */} +
@@ -42,26 +42,38 @@ export default function Page() { 테스크를 수행해보세요!
- {/* */} - {/* + */} + />
팀별 순위 - {/* */} +
From 4f4716348c26c443451a29380c08403f0fc19496 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 16:15:20 +0900 Subject: [PATCH 31/34] =?UTF-8?q?refactor:=20=EC=9B=8C=ED=81=AC=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=A7=8C=EB=93=A4=20=EB=95=8C=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=81=AC=20=EC=9E=85=EB=A0=A5=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../create-workspace/third/page.tsx | 79 ++++++++++--------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/src/app/(afterLogin)/create-workspace/third/page.tsx b/src/app/(afterLogin)/create-workspace/third/page.tsx index b7f57ae..2cd869c 100644 --- a/src/app/(afterLogin)/create-workspace/third/page.tsx +++ b/src/app/(afterLogin)/create-workspace/third/page.tsx @@ -35,8 +35,6 @@ export default function Page() { task: submitData.task, }; - console.log(data); - const handleFormChange = (e: React.ChangeEvent) => { const id = e.target.id; if (id === 'task') { @@ -52,9 +50,7 @@ export default function Page() { }; const handleSubmit = async () => { - console.log(data); if (task.length < 1) { - setError('테스크를 1자 이상 작성해주세요.'); return; } try { @@ -79,77 +75,82 @@ export default function Page() { return ( <> - -
+ +
-
+
+ {task.length < 1 && ( + + 테스크를 1자 이상 작성해주세요. + + )}
-
+
-
+
-
- {`${tag.length}/10`} +
+ {`${tag.length}/10`}
-
+
-
+
-
- {error !== '' ? ( - {error} - ) : null} -
-
From 4b56f720a73969cd2666b47fb477eb9b36dc6ded Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 17:12:10 +0900 Subject: [PATCH 32/34] =?UTF-8?q?refactor:=20=EC=9B=8C=ED=81=AC=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=9E=85=EC=9E=A5=EC=8B=9C=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=81=AC=20=EC=9E=85=EB=A0=A5=20=EB=AA=A8?= =?UTF-8?q?=EB=8B=AC=EC=B0=BD=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/workspace.ts | 9 +- .../_components/AllGroupTabs.tsx | 151 +++--------------- 2 files changed, 26 insertions(+), 134 deletions(-) diff --git a/src/api/workspace.ts b/src/api/workspace.ts index 0942030..b256aa1 100644 --- a/src/api/workspace.ts +++ b/src/api/workspace.ts @@ -10,7 +10,6 @@ type SearchProps = { type JoinWorkspace = { password: string; - task: string; workspaceId: number; }; @@ -72,12 +71,8 @@ const matchPassword = async ({ workspaceId, password }: PasswordCheck) => { return res; }; -const joinWorkspace = async ({ - password, - task, - workspaceId, -}: JoinWorkspace) => { - const formData = { password, task }; +const joinWorkspace = async ({ password, workspaceId }: JoinWorkspace) => { + const formData = { password }; const res = await customAxios.post( `/workspaces/${workspaceId}/join`, formData diff --git a/src/app/(afterLogin)/workspace-list/_components/AllGroupTabs.tsx b/src/app/(afterLogin)/workspace-list/_components/AllGroupTabs.tsx index 6fdeada..62742b4 100644 --- a/src/app/(afterLogin)/workspace-list/_components/AllGroupTabs.tsx +++ b/src/app/(afterLogin)/workspace-list/_components/AllGroupTabs.tsx @@ -34,14 +34,12 @@ export default function AllGroupTabs() { const [search, setSearch] = useState(''); const [tabValue, setTabValue] = useState(workspaceList.complete); const [password, setPassword] = useState(''); - const [task, setTask] = useState(''); const [error, setError] = useState(''); const router = useRouter(); const [isFirstDialogOpen, setIsFirstDialogOpen] = useState(false); - const [isSecondDialogOpen, setIsSecondDialogOpen] = useState(false); const [currentWorkspaceId, setCurrentWorkspaceId] = useState(0); @@ -60,30 +58,28 @@ export default function AllGroupTabs() { }, initialPageParam: 0, getNextPageParam: (lastPage, allPages) => { - // console.log('lastPage:', lastPage); return lastPage?.nextPage || undefined; }, }); - const nextDialog = async (e: any) => { - e.preventDefault(); - try { - const res = await matchPassword({ - workspaceId: currentWorkspaceId, - password, - }); - console.log(res); + // const nextDialog = async (e: any) => { + // e.preventDefault(); + // try { + // const res = await matchPassword({ + // workspaceId: currentWorkspaceId, + // password, + // }); + // console.log(res); - if (res?.data.sameness === true) { - setIsFirstDialogOpen(false); - setIsSecondDialogOpen(true); - } else { - setError('잘못된 비밀번호입니다.'); - } - } catch (error) { - console.error(error); - } - }; + // if (res?.data.sameness === true) { + // setIsFirstDialogOpen(false); + // } else { + // setError('잘못된 비밀번호입니다.'); + // } + // } catch (error) { + // console.error(error); + // } + // }; const onSubmit = async (e: any) => { e.preventDefault(); @@ -91,12 +87,12 @@ export default function AllGroupTabs() { //워크스페이스 아이디 받아서 전해주기 const res = await joinWorkspace({ password, - task, workspaceId: currentWorkspaceId, }); - console.log(res); if (res.status === 200) { router.push(`/workspace/${currentWorkspaceId}`); + } else { + setError('잘못된 비밀번호입니다.'); } } catch (error) { if (error instanceof AxiosError) { @@ -116,7 +112,6 @@ export default function AllGroupTabs() { const handleAlreadyIn = async (workspaceId: number) => { const res = await alreadyIn(workspaceId); - console.log(res); if (res.data.isWorker === true) { setIsFirstDialogOpen(false); @@ -130,21 +125,16 @@ export default function AllGroupTabs() { }; const { ref, inView } = useInView({ - //아래 ref div가 보이고 나서 몇픽셀정도가 호출될건가? -> 보이자마자 호출하기에 0으로 설정 threshold: 0, - //아래 ref div가 보이고 나서 몇초후에 이벤트 발생할지 delay: 0, }); useEffect(() => { - //처음엔 false 화면에 안보이면 false임, 보이면 true로 변함 if (inView) { - //데이터 가져오고 있는데 또 가져오지 않기 위해 isFetching까지 !isFetching && hasNextPage && fetchNextPage(); } }, [inView, hasNextPage, fetchNextPage, isFetching]); - //전체적으로 client component 더 분리해보기 (일단 로직 작성 하고 나서 ) return ( <>
@@ -212,7 +202,7 @@ export default function AllGroupTabs() {
-
+ - next + join
- { - setError(''); - setIsSecondDialogOpen(open); - }} - > - - - 테스크를 입력해주세요 - - -
-
- setTask(e.target.value)} - /> -
-
- {error !== '' ? ( - - {error} - - ) : null} -
- -
- - - cancel - - - - -
-
-
-
))}
@@ -361,9 +304,9 @@ export default function AllGroupTabs() { 비밀번호를 입력해주세요 - +
-
+ - next + join
- { - setError(''); - setIsSecondDialogOpen(open); - }} - > - - - 테스크를 입력해주세요 - - -
-
- setTask(e.target.value)} - /> -
-
- {error !== '' ? ( - - {error} - - ) : null} -
- -
- - - cancel - - - - join - -
-
-
-
)}
From 4028d3fd741d7a825ab54cf762a91e80565c9ad9 Mon Sep 17 00:00:00 2001 From: seunghyeon77 Date: Thu, 16 Jan 2025 17:13:09 +0900 Subject: [PATCH 33/34] =?UTF-8?q?refactor:=20=EC=9B=8C=ED=81=AC=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=A7=8C=EB=93=A4=20=EB=95=8C=20?= =?UTF-8?q?=EC=B0=B8=EC=97=AC=20=EC=9D=B8=EC=9B=90=EC=9D=B4=201=EB=AA=85?= =?UTF-8?q?=EC=9D=B4=EB=A9=B4=20=EA=B2=BD=EA=B3=A0=EC=B0=BD=20=EB=9C=A8?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(afterLogin)/workspace/[workspaceId]/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx b/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx index 2154607..0fd3aa4 100644 --- a/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx +++ b/src/app/(afterLogin)/workspace/[workspaceId]/page.tsx @@ -198,7 +198,7 @@ export default function Page() {