From 11da411af209e3901d9b66221453487fb72eaa39 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 16:29:12 +0900 Subject: [PATCH 01/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=ED=9B=84=20=EC=97=90=EB=9F=AC=20=EB=B0=9C=EC=83=9D=20=EC=8B=9C?= =?UTF-8?q?=20=EC=97=90=EB=9F=AC=20=EB=B0=9C=EC=83=9D=EC=9D=84=20=EC=95=8C?= =?UTF-8?q?=EB=A0=A4=EC=A3=BC=EB=8A=94=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/entities/home/WorkspaceLoadError.tsx | 8 ++++++++ apps/client/src/entities/index.ts | 1 + 2 files changed, 9 insertions(+) create mode 100644 apps/client/src/entities/home/WorkspaceLoadError.tsx diff --git a/apps/client/src/entities/home/WorkspaceLoadError.tsx b/apps/client/src/entities/home/WorkspaceLoadError.tsx new file mode 100644 index 00000000..35d17a41 --- /dev/null +++ b/apps/client/src/entities/home/WorkspaceLoadError.tsx @@ -0,0 +1,8 @@ +export const WorkspaceLoadError = () => { + return ( +
+ +

워크스페이스를 불러오지 못했습니다.

+
+ ); +}; diff --git a/apps/client/src/entities/index.ts b/apps/client/src/entities/index.ts index bf97d1a0..66b47919 100644 --- a/apps/client/src/entities/index.ts +++ b/apps/client/src/entities/index.ts @@ -1,6 +1,7 @@ export { GuideVideo } from './home/GuideVideo'; export { WorkspaceItem } from './home/WorkspaceItem'; export { WorkspaceAddBtn } from './home/WorkspaceAddBtn'; +export { WorkspaceLoadError } from './home/WorkspaceLoadError'; export { RedoButton } from './workspace/RedoButton'; export { UndoButton } from './workspace/UndoButton'; From e3f8d9e3ee3e7540b0b2b397e39183f043b0e79c Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 16:30:15 +0900 Subject: [PATCH 02/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=B6=88=EB=9F=AC?= =?UTF-8?q?=EC=98=A4=EA=B8=B0=20=EC=8B=9C=20=EC=97=90=EB=9F=AC=EA=B0=80=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=ED=95=9C=20=EA=B2=BD=EC=9A=B0=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EB=A0=8C=EB=8D=94=EB=A7=81=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20api=20=ED=98=B8=EC=B6=9C=20?= =?UTF-8?q?=EC=98=81=EC=97=AD=20=EB=A0=8C=EB=8D=94=EB=A7=81=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=B6=94=EA=B0=80=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/widgets/home/WorkspaceContainer.tsx | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/apps/client/src/widgets/home/WorkspaceContainer.tsx b/apps/client/src/widgets/home/WorkspaceContainer.tsx index da914087..b85213be 100644 --- a/apps/client/src/widgets/home/WorkspaceContainer.tsx +++ b/apps/client/src/widgets/home/WorkspaceContainer.tsx @@ -1,14 +1,12 @@ +import { EmptyWorkspace, WorkspaceGrid, WorkspaceHeader, WorkspaceList } from '@/widgets'; import { useEffect, useRef } from 'react'; -import { EmptyWorkspace } from './EmptyWorkspace'; import { SkeletonWorkspaceList } from '@/shared/ui'; -import { WorkspaceGrid } from '@/widgets'; -import { WorkspaceHeader } from './WorkspaceHeader'; -import { WorkspaceList } from './WorkspaceList'; +import { WorkspaceLoadError } from '@/entities'; import { useGetWorkspaceList } from '@/shared/hooks'; export const WorkspaceContainer = () => { - const { hasNextPage, fetchNextPage, isPending, isFetchingNextPage, workspaceList } = + const { hasNextPage, fetchNextPage, isPending, isFetchingNextPage, isError, workspaceList } = useGetWorkspaceList(); const nextFetchTargetRef = useRef(null); @@ -45,16 +43,22 @@ export const WorkspaceContainer = () => { return (
- - {workspaceList && - (workspaceList.length === 0 ? ( - - ) : ( - - ))} - {(isPending || isFetchingNextPage) && } - -
+ {isError ? ( + + ) : ( + + {workspaceList && + (workspaceList.length === 0 ? ( + + ) : ( + + ))} + {(isPending || isFetchingNextPage) && } + + )} + {!isPending && !isFetchingNextPage && hasNextPage && ( +
+ )}
); }; From 98eba36fb7bb91d701c1bf97833e703192ed2df0 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 16:30:48 +0900 Subject: [PATCH 03/42] =?UTF-8?q?=F0=9F=94=A8=20refactor:=20=ED=8E=B8?= =?UTF-8?q?=EC=A7=91=20=EC=8B=9C=EA=B0=84=20format=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20shared/utils=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/utils/dateFormat.ts | 19 +++++++++++++++++++ apps/client/src/shared/utils/index.ts | 1 + 2 files changed, 20 insertions(+) create mode 100644 apps/client/src/shared/utils/dateFormat.ts diff --git a/apps/client/src/shared/utils/dateFormat.ts b/apps/client/src/shared/utils/dateFormat.ts new file mode 100644 index 00000000..d9adcebb --- /dev/null +++ b/apps/client/src/shared/utils/dateFormat.ts @@ -0,0 +1,19 @@ +export const formatRelativeOrAbsoluteDate = (dateString: string) => { + const date = new Date(dateString); + const now = new Date(); + const rtf = new Intl.RelativeTimeFormat('ko', { numeric: 'auto' }); + const diffMinutes = Math.floor((date.getTime() - now.getTime()) / (1000 * 60)); + const diffHours = Math.floor(diffMinutes / 60); + if (diffMinutes > -60) { + return rtf.format(diffMinutes, 'minute'); + } + + if (diffHours > -24) { + return rtf.format(diffHours, 'hour'); + } + return new Intl.DateTimeFormat('ko', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + }).format(date); +}; diff --git a/apps/client/src/shared/utils/index.ts b/apps/client/src/shared/utils/index.ts index d120ff31..838455c2 100644 --- a/apps/client/src/shared/utils/index.ts +++ b/apps/client/src/shared/utils/index.ts @@ -1 +1,2 @@ export { getUserId } from './userId'; +export { formatRelativeOrAbsoluteDate } from './dateFormat'; From 6243f1eb61d66bff088b3bb7a3fb845cac31fa01 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 16:31:19 +0900 Subject: [PATCH 04/42] =?UTF-8?q?=E2=9C=A8=20feat:=20WorkspaceItem?= =?UTF-8?q?=EC=97=90=20onClick=EC=9D=B4=EB=9D=BC=EB=8A=94=20props=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=B9=B4=EB=93=9C=20div=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 --- .../src/entities/home/WorkspaceItem.tsx | 45 ++++++------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/apps/client/src/entities/home/WorkspaceItem.tsx b/apps/client/src/entities/home/WorkspaceItem.tsx index 3a9c5e8c..33b9122d 100644 --- a/apps/client/src/entities/home/WorkspaceItem.tsx +++ b/apps/client/src/entities/home/WorkspaceItem.tsx @@ -1,50 +1,33 @@ import TrashSVG from '@/shared/assets/trash.svg?react'; +import { formatRelativeOrAbsoluteDate } from '@/shared/utils'; import { useModalStore } from '@/shared/store'; type WorkspaceItemProps = { title: string; thumbnail: string; lastEdited: string; + onClick: () => void; }; -const formatDate = (dateString: string) => { - const date = new Date(dateString); - const now = new Date(); - const rtf = new Intl.RelativeTimeFormat('ko', { numeric: 'auto' }); - const diffMinutes = Math.floor((date.getTime() - now.getTime()) / (1000 * 60)); - const diffHours = Math.floor(diffMinutes / 60); - if (diffMinutes > -60) { - return rtf.format(diffMinutes, 'minute'); - } - - if (diffHours > -24) { - return rtf.format(diffHours, 'hour'); - } - return new Intl.DateTimeFormat('ko', { - year: 'numeric', - month: '2-digit', - day: '2-digit', - }).format(date); -}; - -export const WorkspaceItem = ({ title, thumbnail, lastEdited }: WorkspaceItemProps) => { +export const WorkspaceItem = ({ title, thumbnail, lastEdited, onClick }: WorkspaceItemProps) => { const { openModal: onOpen } = useModalStore(); return (
  • -
    - {/* TODO: 썸네일 형태에 따라 이미지 태그 OR 백그라운드로 지정 */} - {thumbnail && ( - workspace thumbnail - )} +
    +
    + {/* TODO: 썸네일 형태에 따라 이미지 태그 OR 백그라운드로 지정 */} + {thumbnail && ( + workspace thumbnail + )} +
    +
    - -
  • ); }; From 13187eee591515fbeb5f6b748e028885a63cd824 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 16:31:55 +0900 Subject: [PATCH 05/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20item=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=8B=9C=20workspace=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=A1=9C=20navigate=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/src/widgets/home/WorkspaceList.tsx | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/apps/client/src/widgets/home/WorkspaceList.tsx b/apps/client/src/widgets/home/WorkspaceList.tsx index 7033874f..0967f00d 100644 --- a/apps/client/src/widgets/home/WorkspaceList.tsx +++ b/apps/client/src/widgets/home/WorkspaceList.tsx @@ -1,23 +1,26 @@ -import { WorkspaceItem } from '@/entities'; import { TworkspaceDto } from '@/shared/types'; +import { WorkspaceItem } from '@/entities'; +import { useNavigate } from 'react-router-dom'; type workspaceListProps = { workspaceList: Array; }; export const WorkspaceList = ({ workspaceList }: workspaceListProps) => { + const navigate = useNavigate(); return (
      - {workspaceList.map((workspace) => { - return ( - - ); - })} + {workspaceList.map((workspace) => ( + { + navigate(`/workspace/${workspace.workspace_id}`); + }} + /> + ))}
    ); }; From de6006bd8e791e1e0f1fa16d2cc172dddac55c03 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 16:32:28 +0900 Subject: [PATCH 06/42] =?UTF-8?q?=E2=9C=A8=20feat:=20useGetWorkspaceList?= =?UTF-8?q?=20=EB=B0=98=ED=99=98=EA=B0=92=EC=9C=BC=EB=A1=9C=20isError?= =?UTF-8?q?=EB=A5=BC=20=EB=A6=AC=ED=84=B4=ED=95=98=EB=8F=84=EB=A1=9D=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 --- apps/client/src/shared/hooks/queries/useGetWorkspaceList.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/client/src/shared/hooks/queries/useGetWorkspaceList.ts b/apps/client/src/shared/hooks/queries/useGetWorkspaceList.ts index 4aa50809..a96ed523 100644 --- a/apps/client/src/shared/hooks/queries/useGetWorkspaceList.ts +++ b/apps/client/src/shared/hooks/queries/useGetWorkspaceList.ts @@ -10,6 +10,7 @@ export const useGetWorkspaceList = () => { fetchNextPage, isPending, isFetchingNextPage, + isError, data: workspaceList, } = useInfiniteQuery({ queryKey: ['getWorkspaceList'], @@ -25,5 +26,5 @@ export const useGetWorkspaceList = () => { select: (data) => (data.pages ?? []).flatMap((page) => page.pagedWorkspaceListResult.workspaceList), }); - return { hasNextPage, fetchNextPage, isFetchingNextPage, isPending, workspaceList }; + return { hasNextPage, fetchNextPage, isFetchingNextPage, isPending, isError, workspaceList }; }; From e95306956d692f0e276456c389222825096d2162 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 16:38:22 +0900 Subject: [PATCH 07/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20api=20=EC=97=94=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=20/workspace=20->=20/workspace/list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/api/workspaceApi.ts | 5 +++-- apps/server/src/routes/v1/workspaceRoute.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/client/src/shared/api/workspaceApi.ts b/apps/client/src/shared/api/workspaceApi.ts index a40f9468..c4870d39 100644 --- a/apps/client/src/shared/api/workspaceApi.ts +++ b/apps/client/src/shared/api/workspaceApi.ts @@ -1,6 +1,7 @@ -import { Instance } from './axiosInstance'; import { TcreatedWorkspaceDto, TpagedWorkspaceListResultDto } from '@/shared/types'; +import { Instance } from '@/shared/api'; + export const WorkspaceApi = () => { const createWorkspace = async (userId: string) => { const response = await Instance.post( @@ -20,7 +21,7 @@ export const WorkspaceApi = () => { const getWorkspaceList = async (userId: string, cursor: string) => { const response = await Instance.get( - `/workspace${cursor !== 'null' ? `?cursor=${encodeURIComponent(cursor)}` : ''}`, + `/workspace/list${cursor !== 'null' ? `?cursor=${encodeURIComponent(cursor)}` : ''}`, { headers: { 'user-id': userId }, } diff --git a/apps/server/src/routes/v1/workspaceRoute.ts b/apps/server/src/routes/v1/workspaceRoute.ts index f1ba4b02..2988db7a 100644 --- a/apps/server/src/routes/v1/workspaceRoute.ts +++ b/apps/server/src/routes/v1/workspaceRoute.ts @@ -5,7 +5,7 @@ export const workspaceRouter = express.Router(); const workspaceController = WorkspaceController(); -workspaceRouter.get('/', workspaceController.getWorkspaceListByPage); +workspaceRouter.get('/list', workspaceController.getWorkspaceListByPage); workspaceRouter.post( '/', workspaceController.createNewWorkspace From 0568f4680f08c2f6534a98ce78c08d8c11f76e8e Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:04:54 +0900 Subject: [PATCH 08/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20swagger=20?= =?UTF-8?q?=EC=8A=A4=ED=82=A4=EB=A7=88=20=EC=B6=94=EA=B0=80=20WorkspaceIdR?= =?UTF-8?q?esposne,=20WorkspaceListDto,=20NextCursor=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/docs/swagger.ts | 45 ++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/apps/server/src/docs/swagger.ts b/apps/server/src/docs/swagger.ts index f0a5d719..762302b3 100644 --- a/apps/server/src/docs/swagger.ts +++ b/apps/server/src/docs/swagger.ts @@ -1,5 +1,5 @@ -import swaggerUi from 'swagger-ui-express'; import swaggerJsdoc from 'swagger-jsdoc'; +import swaggerUi from 'swagger-ui-express'; const options = { swaggerDefinition: { @@ -50,6 +50,49 @@ const options = { }, required: ['workspace_id', 'name', 'updated_at'], }, + WorkspaceIdResponse: { + type: 'object', + properties: { + workspace_id: { + type: 'string', + example: 'b15eac31-3942-4192-9cbd-2e2cdd48da0a', + }, + }, + required: ['workspace_id'], + }, + WorkspaceListDto: { + type: 'object', + properties: { + pagedWorkspaceListResult: { + type: 'object', + properties: { + workspaceList: { + type: 'array', + items: { + $ref: '#/components/schemas/Workspace', + }, + }, + nextCursor: { + $ref: '#/components/schemas/NextCursor', + }, + }, + }, + }, + }, + NextCursor: { + type: 'object', + properties: { + updated_at: { + type: 'string', + example: '2024-11-07T00:00:00.000Z', + }, + workspace_id: { + type: 'string', + example: 'b15eac31-3942-4192-9cbd-2e2cdd48da0a', + }, + }, + required: ['updated_at', 'workspace_id'], + }, }, }, }, From a7e8eb7be5b8f6548eb7993da190f05fb00094b9 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:05:34 +0900 Subject: [PATCH 09/42] =?UTF-8?q?=F0=9F=92=AC=20comment:=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20api=20swagger=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/routes/v1/workspaceRoute.ts | 49 ++++++++++++++++++--- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/apps/server/src/routes/v1/workspaceRoute.ts b/apps/server/src/routes/v1/workspaceRoute.ts index 2988db7a..649a3c74 100644 --- a/apps/server/src/routes/v1/workspaceRoute.ts +++ b/apps/server/src/routes/v1/workspaceRoute.ts @@ -5,20 +5,58 @@ export const workspaceRouter = express.Router(); const workspaceController = WorkspaceController(); -workspaceRouter.get('/list', workspaceController.getWorkspaceListByPage); +workspaceRouter.get( + '/list', + /* + #swagger.summary = '워크스페이스 목록 조회' + #swagger.description = '워크스페이스 목록을 조회합니다. 커서기반 페이지네이션으로 동작합니다.' + #swagger.tags = ['Workspace'] + #swagger.parameters['user-id'] = { + in: 'header', + description: '유저 아이디 (UUID 형식)', + type: 'string', + required: true, + } + #swagger.parameters['cursor'] = { + in: 'query', + description: '커서 정보입니다. ex: {updatedAt: 2024-11-07T00:00:00.000Z, workspaceId: workspace-id}', + required: false, + type: 'string', + } + #swagger.responses[200] = { + description: 'success', + content : { + "application/json" : { + schema: { + $ref: '#/components/schemas/WorkspaceListDto' + } + } + } + } + #swagger.responses[500] = { + description: 'internal server error' + } + */ + workspaceController.getWorkspaceListByPage +); workspaceRouter.post( '/', - workspaceController.createNewWorkspace /* #swagger.summary = '새로운 워크스페이스 생성' #swagger.description = '새로운 워크스페이스를 생성합니다.' #swagger.tags = ['Workspace'] + #swagger.parameters['user-id'] = { + in: 'header', + description: '유저 아이디 (UUID 형식)', + type: 'string', + required: true, + } #swagger.responses[201] = { description: 'success', - content: { - "application/json": { + content : { + "application/json" : { schema: { - $ref: "#/components/schemas/Workspace" + $ref: '#/components/schemas/WorkspaceIdResponse' } } } @@ -27,4 +65,5 @@ workspaceRouter.post( description: 'internal server error' } */ + workspaceController.createNewWorkspace ); From 09a34757a62fd4a8fe6dd1bce1314ef7a4d5cd0f Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:10:17 +0900 Subject: [PATCH 10/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20swagger-output.js?= =?UTF-8?q?on=20gitignore=EC=97=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index fcbb9263..7049ab44 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,5 @@ yarn-error.log* Thumbs.db *storybook.log + +swagger-output.json \ No newline at end of file From df03708198fec332d29a8fa49fbcd39c21ab1ef2 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:35:15 +0900 Subject: [PATCH 11/42] Remove swagger-output.json from tracking --- apps/server/src/docs/swagger-output.json | 230 ----------------------- 1 file changed, 230 deletions(-) delete mode 100644 apps/server/src/docs/swagger-output.json diff --git a/apps/server/src/docs/swagger-output.json b/apps/server/src/docs/swagger-output.json deleted file mode 100644 index 21521f62..00000000 --- a/apps/server/src/docs/swagger-output.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "info": { - "version": "1.0.0", - "title": "REST API", - "description": "" - }, - "paths": { - "/welcome": { - "get": { - "description": "", - "responses": { - "200": { - "description": "OK" - } - } - } - }, - "/test": { - "get": { - "description": "", - "responses": { - "200": { - "description": "OK" - } - } - } - }, - "/todos": { - "post": { - "tags": [ - "Todos" - ], - "summary": "새로운 Todo 생성", - "description": "새로운 todo 항목을 생성합니다.", - "responses": { - "201": { - "description": "Todo 생성 성공", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Todo" - } - } - } - }, - "500": { - "description": "서버 에러" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Todo" - } - } - } - } - }, - "get": { - "description": "", - "responses": { - "200": { - "description": "OK" - }, - "500": { - "description": "Internal Server Error" - } - } - } - }, - "/todos/{todoid}": { - "get": { - "description": "", - "parameters": [ - { - "name": "todoid", - "in": "path", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "404": { - "description": "Not Found" - }, - "500": { - "description": "Internal Server Error" - } - } - }, - "put": { - "description": "", - "parameters": [ - { - "name": "todoid", - "in": "path", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "404": { - "description": "Not Found" - }, - "500": { - "description": "Internal Server Error" - } - } - }, - "delete": { - "description": "", - "parameters": [ - { - "name": "todoid", - "in": "path", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "404": { - "description": "Not Found" - }, - "500": { - "description": "Internal Server Error" - } - } - } - }, - "/workspace/": { - "post": { - "tags": [ - "Workspace" - ], - "summary": "새로운 워크스페이스 생성", - "description": "새로운 워크스페이스를 생성합니다.", - "responses": { - "201": { - "description": "success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Workspace" - } - } - } - }, - "500": { - "description": "internal server error" - } - } - } - } - }, - "openapi": "3.0.0", - "servers": [ - { - "url": "http://localhost:3000/" - } - ], - "components": { - "schemas": { - "Todo": { - "type": "object", - "properties": { - "todoid": { - "type": "integer", - "example": 1 - }, - "content": { - "type": "string", - "example": "Sample todo content" - }, - "completed": { - "type": "string", - "example": "false" - }, - "created": { - "type": "string", - "format": "date-time", - "example": "2024-11-07T00:00:00.000Z" - } - }, - "required": [ - "todoid", - "content" - ] - }, - "Workspace": { - "type": "object", - "properties": { - "workspace_id": { - "type": "string", - "example": "b15eac31-3942-4192-9cbd-2e2cdd48da0a" - }, - "name": { - "type": "string", - "example": "워크스페이스 이름", - "default": "워크스페이스 이름" - }, - "thumbnail": { - "type": "string", - "example": "https://example.com/thumbnail.png" - }, - "updated_at": { - "type": "string", - "format": "date-time", - "example": "2024-11-07T00:00:00.000Z" - } - }, - "required": [ - "workspace_id", - "name", - "updated_at" - ] - } - } - } -} \ No newline at end of file From bd503ff7039a43ac472c96207ad7acded32c2516 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:36:10 +0900 Subject: [PATCH 12/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20=ED=95=98=EB=82=98?= =?UTF-8?q?=EB=A7=8C=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20findWorkspac?= =?UTF-8?q?eByWorkspaceId=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/services/workspaceService.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/server/src/services/workspaceService.ts b/apps/server/src/services/workspaceService.ts index a2d1bcf6..cdeadee9 100644 --- a/apps/server/src/services/workspaceService.ts +++ b/apps/server/src/services/workspaceService.ts @@ -59,8 +59,24 @@ export const WorkspaceService = () => { } }; + const findWorkspaceByWorkspaceId = async (userId: string, workspaceId: string) => { + try { + const workspace = await Workspace.find({ + user_id: userId, + workspace_id: workspaceId, + }); + return workspace; + } catch (error) { + if (error instanceof Error) { + throw new Error(`Failed to get workspace : ${error.message}`); + } + throw new Error(`Unknown Error ocurred while getting workspace`); + } + }; + return { createWorkspace, findWorkspaceListByPage, + findWorkspaceByWorkspaceId, }; }; From 90405fe182e0f77b79f0ddb896962f8ef9ea2397 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:37:17 +0900 Subject: [PATCH 13/42] =?UTF-8?q?=E2=9C=A8=20feat:=20GET=20/workspace=3Fwo?= =?UTF-8?q?rkspace=3D=EC=9B=8C=ED=81=AC=EC=8A=A4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4ID=20api=20=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/controllers/workspaceController.ts | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/apps/server/src/controllers/workspaceController.ts b/apps/server/src/controllers/workspaceController.ts index c616977f..aedd0bd5 100644 --- a/apps/server/src/controllers/workspaceController.ts +++ b/apps/server/src/controllers/workspaceController.ts @@ -50,5 +50,25 @@ export const WorkspaceController = () => { } }; - return { createNewWorkspace, getWorkspaceListByPage }; + const getWorkspaceInfo = async (req: Request, res: Response) => { + try { + const userId = req.get('user-id') as string; + const workspaceId = req.query.workspaceId as string; + const workspaceDto = await workspaceService.findWorkspaceByWorkspaceId(userId, workspaceId); + if (workspaceDto.length === 0) { + throw new Error('Workspace not found'); + } + res.status(200).json({ workspaceDto }); + } catch (error) { + console.error(error); + if (error instanceof Error) { + if (error.message === 'Workspace not found') { + return res.status(404).json({ message: ERROR_MESSAGE[404] }); + } + res.status(500).json({ message: ERROR_MESSAGE[500] }); + } + } + }; + + return { createNewWorkspace, getWorkspaceListByPage, getWorkspaceInfo }; }; From 1c836e4fd7426da64a794e7c8426a20e4f788229 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:37:48 +0900 Subject: [PATCH 14/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=ED=8C=85=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20swagger=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/routes/v1/workspaceRoute.ts | 38 +++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/apps/server/src/routes/v1/workspaceRoute.ts b/apps/server/src/routes/v1/workspaceRoute.ts index 649a3c74..6a34b443 100644 --- a/apps/server/src/routes/v1/workspaceRoute.ts +++ b/apps/server/src/routes/v1/workspaceRoute.ts @@ -67,3 +67,41 @@ workspaceRouter.post( */ workspaceController.createNewWorkspace ); + +workspaceRouter.get( + '/', + /* + #swagger.summary = '워크스페이스 조회' + #swagger.description = 'user id 와 workspace id로 워크스페이스를 조회합니다.' + #swagger.tags = ['Workspace'] + #swagger.parameters['user-id'] = { + in: 'header', + description: '유저 아이디 (UUID 형식)', + type: 'string', + required: true, + } + #swagger.parameters['workspaceId'] = { + in: 'query', + description: '워크스페이스 아이디 (UUID 형식)', + type: 'string', + required: true, + } + #swagger.responses[200] = { + description: 'success', + content : { + "application/json" : { + schema: { + $ref: '#/components/schemas/Workspace' + } + } + } + } + #swagger.responses[404] = { + description: 'Not Found' + } + #swagger.responses[500] = { + description: 'internal server error' + } + */ + workspaceController.getWorkspaceInfo +); From 4be588769357c80bbdda53912abdace2ad03f576 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:37:57 +0900 Subject: [PATCH 15/42] =?UTF-8?q?=E2=9C=A8=20feat:=20404=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/utils/error_message.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/server/src/utils/error_message.ts b/apps/server/src/utils/error_message.ts index bfdeada2..dc0408be 100644 --- a/apps/server/src/utils/error_message.ts +++ b/apps/server/src/utils/error_message.ts @@ -1,3 +1,4 @@ export const ERROR_MESSAGE = { 500: 'internal server error', + 404: 'Not Found', }; From dc9c8e261fd002132969185753089123ae511d77 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:46:06 +0900 Subject: [PATCH 16/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=EB=AA=85=20=EB=B3=80=EA=B2=BD=20TworkspaceDto=20=3D>?= =?UTF-8?q?=20Tworkspace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/types/index.ts | 2 +- apps/client/src/shared/types/workspaceType.ts | 4 ++-- apps/client/src/widgets/home/WorkspaceList.tsx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/client/src/shared/types/index.ts b/apps/client/src/shared/types/index.ts index 65244deb..ba5aadba 100644 --- a/apps/client/src/shared/types/index.ts +++ b/apps/client/src/shared/types/index.ts @@ -1,6 +1,6 @@ export type { TcreatedWorkspaceDto, - TworkspaceDto, + Tworkspace, TpagedWorkspaceListResultDto, TpagedWorkspaceListResult, Tcursor, diff --git a/apps/client/src/shared/types/workspaceType.ts b/apps/client/src/shared/types/workspaceType.ts index 1055a70b..faaa294a 100644 --- a/apps/client/src/shared/types/workspaceType.ts +++ b/apps/client/src/shared/types/workspaceType.ts @@ -7,11 +7,11 @@ export type TpagedWorkspaceListResultDto = { }; export type TpagedWorkspaceListResult = { - workspaceList: Array; + workspaceList: Array; nextCursor: Tcursor | null; }; -export type TworkspaceDto = { +export type Tworkspace = { name: string; updated_at: string; user_id: string; diff --git a/apps/client/src/widgets/home/WorkspaceList.tsx b/apps/client/src/widgets/home/WorkspaceList.tsx index 0967f00d..94ab30ca 100644 --- a/apps/client/src/widgets/home/WorkspaceList.tsx +++ b/apps/client/src/widgets/home/WorkspaceList.tsx @@ -1,9 +1,9 @@ -import { TworkspaceDto } from '@/shared/types'; +import { Tworkspace } from '@/shared/types'; import { WorkspaceItem } from '@/entities'; import { useNavigate } from 'react-router-dom'; type workspaceListProps = { - workspaceList: Array; + workspaceList: Array; }; export const WorkspaceList = ({ workspaceList }: workspaceListProps) => { From 2dd32baadab7fb6d406063c531babc8d5d5a2281 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:52:05 +0900 Subject: [PATCH 17/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=8A=A4=EC=9B=A8?= =?UTF-8?q?=EA=B1=B0=20WorkspaceDto=20=ED=83=80=EC=9E=85=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/docs/swagger.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps/server/src/docs/swagger.ts b/apps/server/src/docs/swagger.ts index 762302b3..ef4a0890 100644 --- a/apps/server/src/docs/swagger.ts +++ b/apps/server/src/docs/swagger.ts @@ -93,6 +93,19 @@ const options = { }, required: ['updated_at', 'workspace_id'], }, + WorkspaceDto: { + type: 'object', + properties: { + workspace_id: { + type: 'string', + example: 'b15eac31-3942-4192-9cbd-2e2cdd48da0a', + }, + name: { + type: 'string', + example: '워크스페이스 이름', + }, + }, + }, }, }, }, From d89e66199ee29f5cb6b2d1a90b600685a943d7e9 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:52:34 +0900 Subject: [PATCH 18/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20find=20->=20findO?= =?UTF-8?q?ne=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=EB=B0=8F=20workspace=5Fid,=20name=EB=A7=8C=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/services/workspaceService.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/server/src/services/workspaceService.ts b/apps/server/src/services/workspaceService.ts index cdeadee9..8d3d36eb 100644 --- a/apps/server/src/services/workspaceService.ts +++ b/apps/server/src/services/workspaceService.ts @@ -59,12 +59,16 @@ export const WorkspaceService = () => { } }; + // TODO: 워크스페이스 상태도 불러와야 함 const findWorkspaceByWorkspaceId = async (userId: string, workspaceId: string) => { try { - const workspace = await Workspace.find({ - user_id: userId, - workspace_id: workspaceId, - }); + const workspace = await Workspace.findOne( + { + user_id: userId, + workspace_id: workspaceId, + }, + { workspace_id: 1, name: 1, _id: 0, user_id: 0, updated_at: 0 } + ); return workspace; } catch (error) { if (error instanceof Error) { From 0a374a89c2bfc491528761d82c149eda0ac00e10 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:55:02 +0900 Subject: [PATCH 19/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20404=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=A1=B0=EA=B1=B4=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/controllers/workspaceController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/controllers/workspaceController.ts b/apps/server/src/controllers/workspaceController.ts index aedd0bd5..3556e198 100644 --- a/apps/server/src/controllers/workspaceController.ts +++ b/apps/server/src/controllers/workspaceController.ts @@ -55,7 +55,7 @@ export const WorkspaceController = () => { const userId = req.get('user-id') as string; const workspaceId = req.query.workspaceId as string; const workspaceDto = await workspaceService.findWorkspaceByWorkspaceId(userId, workspaceId); - if (workspaceDto.length === 0) { + if (!workspaceDto) { throw new Error('Workspace not found'); } res.status(200).json({ workspaceDto }); From 6537ed81a1cac767d7c2e1985ff1e35dc5a359be Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:55:46 +0900 Subject: [PATCH 20/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20findOne.projectio?= =?UTF-8?q?n=20=EC=98=B5=EC=85=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/services/workspaceService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/services/workspaceService.ts b/apps/server/src/services/workspaceService.ts index 8d3d36eb..a0468245 100644 --- a/apps/server/src/services/workspaceService.ts +++ b/apps/server/src/services/workspaceService.ts @@ -67,7 +67,7 @@ export const WorkspaceService = () => { user_id: userId, workspace_id: workspaceId, }, - { workspace_id: 1, name: 1, _id: 0, user_id: 0, updated_at: 0 } + { workspace_id: 1, name: 1, _id: 0 } ); return workspace; } catch (error) { From 7c81b7baaac9b183e6b37130969dbf350cef2eb8 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 18:56:03 +0900 Subject: [PATCH 21/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20=EC=8A=A4?= =?UTF-8?q?=EC=9B=A8=EA=B1=B0=20=EC=A3=BC=EC=84=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/routes/v1/workspaceRoute.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/routes/v1/workspaceRoute.ts b/apps/server/src/routes/v1/workspaceRoute.ts index 6a34b443..515c4587 100644 --- a/apps/server/src/routes/v1/workspaceRoute.ts +++ b/apps/server/src/routes/v1/workspaceRoute.ts @@ -91,7 +91,7 @@ workspaceRouter.get( content : { "application/json" : { schema: { - $ref: '#/components/schemas/Workspace' + $ref: '#/components/schemas/WorkspaceDto' } } } From 6c5fca736876fe33186ab9dc22c9d9ae4a1098c1 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:43:06 +0900 Subject: [PATCH 22/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20UUID=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/package.json | 1 + pnpm-lock.yaml | 716 ++++++++++++++++++++------------------- 2 files changed, 372 insertions(+), 345 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index acb2ec5a..d3716a1b 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -23,6 +23,7 @@ "react-spinners": "^0.14.1", "react-youtube": "^10.1.0", "storybook": "^8.4.1", + "uuid": "^11.0.3", "zustand": "^5.0.1" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2a64cd95..7c1f78e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,7 +28,7 @@ importers: dependencies: '@tanstack/react-query': specifier: ^5.59.19 - version: 5.59.19(react@18.3.1) + version: 5.59.20(react@18.3.1) axios: specifier: ^1.7.7 version: 1.7.7 @@ -49,7 +49,7 @@ importers: version: 2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-router-dom: specifier: ^6.27.0 - version: 6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-spinners: specifier: ^0.14.1 version: 0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -58,14 +58,17 @@ importers: version: 10.1.0(react@18.3.1) storybook: specifier: ^8.4.1 - version: 8.4.1(prettier@3.3.3) + version: 8.4.2(prettier@3.3.3) + uuid: + specifier: ^11.0.3 + version: 11.0.3 zustand: specifier: ^5.0.1 - version: 5.0.1(@types/react@18.3.12)(react@18.3.1) + version: 5.0.1(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)) devDependencies: '@chromatic-com/storybook': specifier: 3.2.2 - version: 3.2.2(react@18.3.1)(storybook@8.4.1(prettier@3.3.3)) + version: 3.2.2(react@18.3.1)(storybook@8.4.2(prettier@3.3.3)) '@eslint/js': specifier: ^9.13.0 version: 9.14.0 @@ -74,25 +77,25 @@ importers: version: link:../../packages/tsconfig '@storybook/addon-essentials': specifier: 8.4.2 - version: 8.4.2(@types/react@18.3.12)(storybook@8.4.1(prettier@3.3.3)) + version: 8.4.2(@types/react@18.3.12)(storybook@8.4.2(prettier@3.3.3)) '@storybook/addon-interactions': specifier: 8.4.2 - version: 8.4.2(storybook@8.4.1(prettier@3.3.3)) + version: 8.4.2(storybook@8.4.2(prettier@3.3.3)) '@storybook/addon-onboarding': specifier: 8.4.2 - version: 8.4.2(react@18.3.1)(storybook@8.4.1(prettier@3.3.3)) + version: 8.4.2(react@18.3.1)(storybook@8.4.2(prettier@3.3.3)) '@storybook/blocks': specifier: 8.4.2 - version: 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3)) + version: 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3)) '@storybook/react': specifier: 8.4.2 - version: 8.4.2(@storybook/test@8.4.2(storybook@8.4.1(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3))(typescript@5.6.3) + version: 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3))(typescript@5.6.3) '@storybook/react-vite': specifier: 8.4.2 - version: 8.4.2(@storybook/test@8.4.2(storybook@8.4.1(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.4)(storybook@8.4.1(prettier@3.3.3))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7)) + version: 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.26.0)(storybook@8.4.2(prettier@3.3.3))(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)) '@storybook/test': specifier: 8.4.2 - version: 8.4.2(storybook@8.4.1(prettier@3.3.3)) + version: 8.4.2(storybook@8.4.2(prettier@3.3.3)) '@types/react': specifier: ^18.3.12 version: 18.3.12 @@ -104,10 +107,10 @@ importers: version: 5.3.3 '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.3.3(vite@5.4.10(@types/node@22.8.7)) + version: 4.3.3(vite@5.4.11(@types/node@22.9.0)) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.47) + version: 10.4.20(postcss@8.4.49) eslint: specifier: ^9.13.0 version: 9.14.0(jiti@1.21.6) @@ -125,22 +128,22 @@ importers: version: 15.12.0 postcss: specifier: ^8.4.47 - version: 8.4.47 + version: 8.4.49 prop-types: specifier: 15.8.1 version: 15.8.1 tailwindcss: specifier: ^3.4.14 - version: 3.4.14(ts-node@10.9.2(@types/node@22.8.7)(typescript@5.6.3)) + version: 3.4.14(ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3)) typescript-eslint: specifier: ^8.11.0 - version: 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + version: 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) vite: specifier: ^5.4.10 - version: 5.4.10(@types/node@22.8.7) + version: 5.4.11(@types/node@22.9.0) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.24.4)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7)) + version: 4.3.0(rollup@4.26.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)) apps/server: dependencies: @@ -155,7 +158,7 @@ importers: version: 4.21.1 mongoose: specifier: ^8.8.0 - version: 8.8.0 + version: 8.8.1 tunnel-ssh: specifier: ^5.1.2 version: 5.1.2 @@ -175,9 +178,6 @@ importers: '@types/swagger-ui-express': specifier: ^4.1.7 version: 4.1.7 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 nodemon: specifier: ^3.1.7 version: 3.1.7 @@ -192,7 +192,7 @@ importers: version: 5.0.1(express@4.21.1) ts-node: specifier: ^10.0.0 - version: 10.9.2(@types/node@22.8.7)(typescript@5.6.3) + version: 10.9.2(@types/node@22.9.0)(typescript@5.6.3) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -652,8 +652,8 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.0': - resolution: {integrity: sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==} + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} engines: {node: '>=18.18'} '@isaacs/cliui@8.0.2': @@ -718,8 +718,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@remix-run/router@1.20.0': - resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==} + '@remix-run/router@1.21.0': + resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} engines: {node: '>=14.0.0'} '@rollup/pluginutils@5.1.3': @@ -731,96 +731,99 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.24.4': - resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==} + '@rollup/rollup-android-arm-eabi@4.26.0': + resolution: {integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.24.4': - resolution: {integrity: sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==} + '@rollup/rollup-android-arm64@4.26.0': + resolution: {integrity: sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.24.4': - resolution: {integrity: sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==} + '@rollup/rollup-darwin-arm64@4.26.0': + resolution: {integrity: sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.24.4': - resolution: {integrity: sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==} + '@rollup/rollup-darwin-x64@4.26.0': + resolution: {integrity: sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.24.4': - resolution: {integrity: sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==} + '@rollup/rollup-freebsd-arm64@4.26.0': + resolution: {integrity: sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.24.4': - resolution: {integrity: sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==} + '@rollup/rollup-freebsd-x64@4.26.0': + resolution: {integrity: sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.24.4': - resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==} + '@rollup/rollup-linux-arm-gnueabihf@4.26.0': + resolution: {integrity: sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.24.4': - resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==} + '@rollup/rollup-linux-arm-musleabihf@4.26.0': + resolution: {integrity: sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.24.4': - resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==} + '@rollup/rollup-linux-arm64-gnu@4.26.0': + resolution: {integrity: sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.24.4': - resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==} + '@rollup/rollup-linux-arm64-musl@4.26.0': + resolution: {integrity: sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': - resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': + resolution: {integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.24.4': - resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==} + '@rollup/rollup-linux-riscv64-gnu@4.26.0': + resolution: {integrity: sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.24.4': - resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==} + '@rollup/rollup-linux-s390x-gnu@4.26.0': + resolution: {integrity: sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.24.4': - resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==} + '@rollup/rollup-linux-x64-gnu@4.26.0': + resolution: {integrity: sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.24.4': - resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==} + '@rollup/rollup-linux-x64-musl@4.26.0': + resolution: {integrity: sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.24.4': - resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==} + '@rollup/rollup-win32-arm64-msvc@4.26.0': + resolution: {integrity: sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.24.4': - resolution: {integrity: sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==} + '@rollup/rollup-win32-ia32-msvc@4.26.0': + resolution: {integrity: sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.24.4': - resolution: {integrity: sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==} + '@rollup/rollup-win32-x64-msvc@4.26.0': + resolution: {integrity: sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==} cpu: [x64] os: [win32] + '@scarf/scarf@1.4.0': + resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} + '@storybook/addon-actions@8.4.2': resolution: {integrity: sha512-+hA200XN5aeA4T3jq8IifQq6Y+9FyNQ0Q+blM1L0Tl7WLzBc7B1kHQnKvhSj5pvMSBWc/Q/kY7Ev5t9gdOu13g==} peerDependencies: @@ -904,8 +907,8 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.4.1': - resolution: {integrity: sha512-q3Q4OFBj7MHHbIFYk/Beejlqv5j7CC3+VWhGcr0TK3SGvdCIZ7EliYuc5JIOgDlEPsnTIk+lkgWI4LAA9mLzSw==} + '@storybook/core@8.4.2': + resolution: {integrity: sha512-hF8GWoUZTjwwuV5j4OLhMHZtZQL/NYcVUBReC2Ba06c8PkFIKqKZwATr1zKd301gQ5Qwcn9WgmZxJTMgdKQtOg==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: @@ -1054,11 +1057,11 @@ packages: peerDependencies: '@svgr/core': '*' - '@tanstack/query-core@5.59.17': - resolution: {integrity: sha512-jWdDiif8kaqnRGHNXAa9CnudtxY5v9DUxXhodgqX2Rwzj+1UwStDHEbBd9IA5C7VYAaJ2s+BxFR6PUBs8ERorA==} + '@tanstack/query-core@5.59.20': + resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} - '@tanstack/react-query@5.59.19': - resolution: {integrity: sha512-xLRfyFyQOFcLltKCds0LijfC6/HQJrrTTnZB8ciyn74LIkVAm++vZJ6eUVG20RmJtdP8REdy7vSOYW4M3//XLA==} + '@tanstack/react-query@5.59.20': + resolution: {integrity: sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw==} peerDependencies: react: ^18 || ^19 @@ -1145,14 +1148,14 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@22.8.7': - resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==} + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - '@types/qs@6.9.16': - resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + '@types/qs@6.9.17': + resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -1193,8 +1196,8 @@ packages: '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} - '@typescript-eslint/eslint-plugin@8.12.2': - resolution: {integrity: sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==} + '@typescript-eslint/eslint-plugin@8.14.0': + resolution: {integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -1204,8 +1207,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.12.2': - resolution: {integrity: sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==} + '@typescript-eslint/parser@8.14.0': + resolution: {integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1214,12 +1217,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.12.2': - resolution: {integrity: sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==} + '@typescript-eslint/scope-manager@8.14.0': + resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.12.2': - resolution: {integrity: sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==} + '@typescript-eslint/type-utils@8.14.0': + resolution: {integrity: sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1227,12 +1230,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.12.2': - resolution: {integrity: sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==} + '@typescript-eslint/types@8.14.0': + resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.12.2': - resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==} + '@typescript-eslint/typescript-estree@8.14.0': + resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1240,14 +1243,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.12.2': - resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==} + '@typescript-eslint/utils@8.14.0': + resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@8.12.2': - resolution: {integrity: sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==} + '@typescript-eslint/visitor-keys@8.14.0': + resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-react@4.3.3': @@ -1449,8 +1452,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001677: - resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} + caniuse-lite@1.0.30001680: + resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} chai@5.1.2: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} @@ -1472,8 +1475,8 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chromatic@11.16.5: - resolution: {integrity: sha512-wUEKXyu3GYmUg6Jq13uyRE9iC8ph5gbfDHdyHH0vQathkGQrcjHHdoxI/GXKIjU6d+xupLon8sxRV9NuZKTWbA==} + chromatic@11.18.1: + resolution: {integrity: sha512-hkNT9vA6K9+PnE/khhZYBnRCOm8NonaQDs7RZ8YHFo7/lh1b/x/uFMkTjWjaj/mkM6QOR/evu5VcZMtcaauSlw==} hasBin: true peerDependencies: '@chromatic-com/cypress': ^0.*.* || ^1.0.0 @@ -1562,8 +1565,8 @@ packages: engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + cross-spawn@7.0.5: + resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} engines: {node: '>= 8'} css.escape@1.5.1: @@ -1677,8 +1680,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.50: - resolution: {integrity: sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==} + electron-to-chromium@1.5.57: + resolution: {integrity: sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2320,8 +2323,8 @@ packages: socks: optional: true - mongoose@8.8.0: - resolution: {integrity: sha512-KluvgwnQB1GPOYZZXUHJRjS1TW6xxwTlf/YgjWExuuNanIe3W7VcR7dDXQVCIRk8L7NYge8EnoTcu2grWtN+XQ==} + mongoose@8.8.1: + resolution: {integrity: sha512-l7DgeY1szT98+EKU8GYnga5WnyatAu+kOQ2VlVX1Mxif6A0Umt0YkSiksCiyGxzx8SPhGe9a53ND1GD4yVDrPA==} engines: {node: '>=16.20.1'} mpath@0.9.0: @@ -2386,8 +2389,8 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} on-finished@2.4.1: @@ -2528,8 +2531,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2614,8 +2617,8 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + psl@1.10.0: + resolution: {integrity: sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==} pstree.remy@1.1.8: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} @@ -2679,15 +2682,15 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-router-dom@6.27.0: - resolution: {integrity: sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==} + react-router-dom@6.28.0: + resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.27.0: - resolution: {integrity: sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==} + react-router@6.28.0: + resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -2745,8 +2748,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.24.4: - resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==} + rollup@4.26.0: + resolution: {integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2847,8 +2850,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - storybook@8.4.1: - resolution: {integrity: sha512-0tfFIFghjho9FtnFoiJMoxhcs2iIdvEF81GTSVnTsDVJrYA84nB+FxN3UY1fT0BcQ8BFlbf+OhSjZL7ufqqWKA==} + storybook@8.4.2: + resolution: {integrity: sha512-GMCgyAulmLNrkUtDkCpFO4SB77YrpiIxq6e5tzaQdXEuaDu1mdNwOuP3VG7nE2FzxmqDvagSgriM68YW9iFaZA==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -2924,8 +2927,8 @@ packages: resolution: {integrity: sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==} engines: {node: '>=10'} - swagger-ui-dist@5.17.14: - resolution: {integrity: sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==} + swagger-ui-dist@5.18.2: + resolution: {integrity: sha512-J+y4mCw/zXh1FOj5wGJvnAajq6XgHOyywsa9yITmwxIlJbMqITq3gYRZHaeqLVH/eV/HOPphE6NjF+nbSNC5Zw==} swagger-ui-express@5.0.1: resolution: {integrity: sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==} @@ -3045,8 +3048,8 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript-eslint@8.12.2: - resolution: {integrity: sha512-UbuVUWSrHVR03q9CWx+JDHeO6B/Hr9p4U5lRH++5tq/EbFq1faYZe50ZSBePptgfIKLEti0aPQ3hFgnPVcd8ZQ==} + typescript-eslint@8.14.0: + resolution: {integrity: sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3098,6 +3101,11 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -3108,6 +3116,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@11.0.3: + resolution: {integrity: sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -3128,8 +3140,8 @@ packages: peerDependencies: vite: '>=2.6.0' - vite@5.4.10: - resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -3433,13 +3445,13 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@chromatic-com/storybook@3.2.2(react@18.3.1)(storybook@8.4.1(prettier@3.3.3))': + '@chromatic-com/storybook@3.2.2(react@18.3.1)(storybook@8.4.2(prettier@3.3.3))': dependencies: - chromatic: 11.16.5 + chromatic: 11.18.1 filesize: 10.1.6 jsonfile: 6.1.0 react-confetti: 6.1.0(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) strip-ansi: 7.1.0 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -3641,7 +3653,7 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.0': {} + '@humanwhocodes/retry@0.4.1': {} '@isaacs/cliui@8.0.2': dependencies: @@ -3652,13 +3664,13 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0))': dependencies: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.6.3) - vite: 5.4.10(@types/node@22.8.7) + vite: 5.4.11(@types/node@22.9.0) optionalDependencies: typescript: 5.6.3 @@ -3711,191 +3723,193 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@remix-run/router@1.20.0': {} + '@remix-run/router@1.21.0': {} - '@rollup/pluginutils@5.1.3(rollup@4.24.4)': + '@rollup/pluginutils@5.1.3(rollup@4.26.0)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.24.4 + rollup: 4.26.0 - '@rollup/rollup-android-arm-eabi@4.24.4': + '@rollup/rollup-android-arm-eabi@4.26.0': optional: true - '@rollup/rollup-android-arm64@4.24.4': + '@rollup/rollup-android-arm64@4.26.0': optional: true - '@rollup/rollup-darwin-arm64@4.24.4': + '@rollup/rollup-darwin-arm64@4.26.0': optional: true - '@rollup/rollup-darwin-x64@4.24.4': + '@rollup/rollup-darwin-x64@4.26.0': optional: true - '@rollup/rollup-freebsd-arm64@4.24.4': + '@rollup/rollup-freebsd-arm64@4.26.0': optional: true - '@rollup/rollup-freebsd-x64@4.24.4': + '@rollup/rollup-freebsd-x64@4.26.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.24.4': + '@rollup/rollup-linux-arm-gnueabihf@4.26.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.24.4': + '@rollup/rollup-linux-arm-musleabihf@4.26.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.24.4': + '@rollup/rollup-linux-arm64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.24.4': + '@rollup/rollup-linux-arm64-musl@4.26.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.24.4': + '@rollup/rollup-linux-riscv64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.24.4': + '@rollup/rollup-linux-s390x-gnu@4.26.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.24.4': + '@rollup/rollup-linux-x64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-x64-musl@4.24.4': + '@rollup/rollup-linux-x64-musl@4.26.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.24.4': + '@rollup/rollup-win32-arm64-msvc@4.26.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.24.4': + '@rollup/rollup-win32-ia32-msvc@4.26.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.24.4': + '@rollup/rollup-win32-x64-msvc@4.26.0': optional: true - '@storybook/addon-actions@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@scarf/scarf@1.4.0': {} + + '@storybook/addon-actions@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-backgrounds@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-controls@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.2(@types/react@18.3.12)(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-docs@8.4.2(@types/react@18.3.12)(storybook@8.4.2(prettier@3.3.3))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.12)(react@18.3.1) - '@storybook/blocks': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3)) - '@storybook/csf-plugin': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3)) + '@storybook/blocks': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3)) + '@storybook/csf-plugin': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/react-dom-shim': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - webpack-sources - '@storybook/addon-essentials@8.4.2(@types/react@18.3.12)(storybook@8.4.1(prettier@3.3.3))': - dependencies: - '@storybook/addon-actions': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/addon-backgrounds': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/addon-controls': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/addon-docs': 8.4.2(@types/react@18.3.12)(storybook@8.4.1(prettier@3.3.3)) - '@storybook/addon-highlight': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/addon-measure': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/addon-outline': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/addon-toolbars': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/addon-viewport': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - storybook: 8.4.1(prettier@3.3.3) + '@storybook/addon-essentials@8.4.2(@types/react@18.3.12)(storybook@8.4.2(prettier@3.3.3))': + dependencies: + '@storybook/addon-actions': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/addon-backgrounds': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/addon-controls': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/addon-docs': 8.4.2(@types/react@18.3.12)(storybook@8.4.2(prettier@3.3.3)) + '@storybook/addon-highlight': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/addon-measure': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/addon-outline': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/addon-toolbars': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/addon-viewport': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + storybook: 8.4.2(prettier@3.3.3) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - webpack-sources - '@storybook/addon-highlight@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-highlight@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/addon-interactions@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-interactions@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/test': 8.4.2(storybook@8.4.1(prettier@3.3.3)) + '@storybook/instrumenter': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/test': 8.4.2(storybook@8.4.2(prettier@3.3.3)) polished: 4.3.1 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) ts-dedent: 2.2.0 - '@storybook/addon-measure@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-measure@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) tiny-invariant: 1.3.3 - '@storybook/addon-onboarding@8.4.2(react@18.3.1)(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-onboarding@8.4.2(react@18.3.1)(storybook@8.4.2(prettier@3.3.3))': dependencies: react-confetti: 6.1.0(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) transitivePeerDependencies: - react - '@storybook/addon-outline@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-outline@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-toolbars@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/addon-viewport@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/addon-viewport@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: memoizerific: 1.11.3 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/blocks@8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3))': + '@storybook/blocks@8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/csf': 0.1.11 '@storybook/icons': 1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.4.2(storybook@8.4.1(prettier@3.3.3))(vite@5.4.10(@types/node@22.8.7))': + '@storybook/builder-vite@8.4.2(storybook@8.4.2(prettier@3.3.3))(vite@5.4.11(@types/node@22.9.0))': dependencies: - '@storybook/csf-plugin': 8.4.2(storybook@8.4.1(prettier@3.3.3)) + '@storybook/csf-plugin': 8.4.2(storybook@8.4.2(prettier@3.3.3)) browser-assert: 1.2.1 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) ts-dedent: 2.2.0 - vite: 5.4.10(@types/node@22.8.7) + vite: 5.4.11(@types/node@22.9.0) transitivePeerDependencies: - webpack-sources - '@storybook/components@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/components@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/core@8.4.1(prettier@3.3.3)': + '@storybook/core@8.4.2(prettier@3.3.3)': dependencies: '@storybook/csf': 0.1.11 better-opn: 3.0.2 @@ -3915,9 +3929,9 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/csf-plugin@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) unplugin: 1.15.0 transitivePeerDependencies: - webpack-sources @@ -3933,41 +3947,41 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/instrumenter@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.4 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/manager-api@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/manager-api@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/preview-api@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/preview-api@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/react-dom-shim@8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3))': + '@storybook/react-dom-shim@8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/react-vite@8.4.2(@storybook/test@8.4.2(storybook@8.4.1(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.4)(storybook@8.4.1(prettier@3.3.3))(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7))': + '@storybook/react-vite@8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.26.0)(storybook@8.4.2(prettier@3.3.3))(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7)) - '@rollup/pluginutils': 5.1.3(rollup@4.24.4) - '@storybook/builder-vite': 8.4.2(storybook@8.4.1(prettier@3.3.3))(vite@5.4.10(@types/node@22.8.7)) - '@storybook/react': 8.4.2(@storybook/test@8.4.2(storybook@8.4.1(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3))(typescript@5.6.3) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)) + '@rollup/pluginutils': 5.1.3(rollup@4.26.0) + '@storybook/builder-vite': 8.4.2(storybook@8.4.2(prettier@3.3.3))(vite@5.4.11(@types/node@22.9.0)) + '@storybook/react': 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3))(typescript@5.6.3) find-up: 5.0.0 magic-string: 0.30.12 react: 18.3.1 react-docgen: 7.1.0 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) tsconfig-paths: 4.2.0 - vite: 5.4.10(@types/node@22.8.7) + vite: 5.4.11(@types/node@22.9.0) transitivePeerDependencies: - '@storybook/test' - rollup @@ -3975,36 +3989,36 @@ snapshots: - typescript - webpack-sources - '@storybook/react@8.4.2(@storybook/test@8.4.2(storybook@8.4.1(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3))(typescript@5.6.3)': + '@storybook/react@8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3))(typescript@5.6.3)': dependencies: - '@storybook/components': 8.4.2(storybook@8.4.1(prettier@3.3.3)) + '@storybook/components': 8.4.2(storybook@8.4.2(prettier@3.3.3)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/preview-api': 8.4.2(storybook@8.4.1(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.1(prettier@3.3.3)) - '@storybook/theming': 8.4.2(storybook@8.4.1(prettier@3.3.3)) + '@storybook/manager-api': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/preview-api': 8.4.2(storybook@8.4.2(prettier@3.3.3)) + '@storybook/react-dom-shim': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.3)) + '@storybook/theming': 8.4.2(storybook@8.4.2(prettier@3.3.3)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) optionalDependencies: - '@storybook/test': 8.4.2(storybook@8.4.1(prettier@3.3.3)) + '@storybook/test': 8.4.2(storybook@8.4.2(prettier@3.3.3)) typescript: 5.6.3 - '@storybook/test@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.2(storybook@8.4.1(prettier@3.3.3)) + '@storybook/instrumenter': 8.4.2(storybook@8.4.2(prettier@3.3.3)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) - '@storybook/theming@8.4.2(storybook@8.4.1(prettier@3.3.3))': + '@storybook/theming@8.4.2(storybook@8.4.2(prettier@3.3.3))': dependencies: - storybook: 8.4.1(prettier@3.3.3) + storybook: 8.4.2(prettier@3.3.3) '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.0)': dependencies: @@ -4076,11 +4090,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/query-core@5.59.17': {} + '@tanstack/query-core@5.59.20': {} - '@tanstack/react-query@5.59.19(react@18.3.1)': + '@tanstack/react-query@5.59.20(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.59.17 + '@tanstack/query-core': 5.59.20 react: 18.3.1 '@testing-library/dom@10.4.0': @@ -4142,15 +4156,15 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@types/connect@3.4.38': dependencies: - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@types/cors@2.8.17': dependencies: - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@types/doctrine@0.0.9': {} @@ -4158,8 +4172,8 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.8.7 - '@types/qs': 6.9.16 + '@types/node': 22.9.0 + '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -4167,13 +4181,13 @@ snapshots: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.16 + '@types/qs': 6.9.17 '@types/serve-static': 1.15.7 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@types/history@4.7.11': {} @@ -4187,13 +4201,13 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/node@22.8.7': + '@types/node@22.9.0': dependencies: undici-types: 6.19.8 '@types/prop-types@15.7.13': {} - '@types/qs@6.9.16': {} + '@types/qs@6.9.17': {} '@types/range-parser@1.2.7': {} @@ -4222,12 +4236,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@types/send': 0.17.4 '@types/swagger-jsdoc@6.0.4': {} @@ -4245,14 +4259,14 @@ snapshots: dependencies: '@types/webidl-conversions': 7.0.3 - '@typescript-eslint/eslint-plugin@8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.12.2 - '@typescript-eslint/type-utils': 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.14.0 eslint: 9.14.0(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.2 @@ -4263,12 +4277,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.12.2 - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.14.0 debug: 4.3.7(supports-color@5.5.0) eslint: 9.14.0(jiti@1.21.6) optionalDependencies: @@ -4276,15 +4290,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.12.2': + '@typescript-eslint/scope-manager@8.14.0': dependencies: - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/visitor-keys': 8.14.0 - '@typescript-eslint/type-utils@8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) debug: 4.3.7(supports-color@5.5.0) ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: @@ -4293,12 +4307,12 @@ snapshots: - eslint - supports-color - '@typescript-eslint/types@8.12.2': {} + '@typescript-eslint/types@8.14.0': {} - '@typescript-eslint/typescript-estree@8.12.2(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.14.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/visitor-keys': 8.14.0 debug: 4.3.7(supports-color@5.5.0) fast-glob: 3.3.2 is-glob: 4.0.3 @@ -4310,30 +4324,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/utils@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 8.12.2 - '@typescript-eslint/types': 8.12.2 - '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) eslint: 9.14.0(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@8.12.2': + '@typescript-eslint/visitor-keys@8.14.0': dependencies: - '@typescript-eslint/types': 8.12.2 + '@typescript-eslint/types': 8.14.0 eslint-visitor-keys: 3.4.3 - '@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.8.7))': + '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@22.9.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.10(@types/node@22.8.7) + vite: 5.4.11(@types/node@22.9.0) transitivePeerDependencies: - supports-color @@ -4444,14 +4458,14 @@ snapshots: asynckit@0.4.0: {} - autoprefixer@10.4.20(postcss@8.4.47): + autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001677 + caniuse-lite: 1.0.30001680 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -4521,8 +4535,8 @@ snapshots: browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001677 - electron-to-chromium: 1.5.50 + caniuse-lite: 1.0.30001680 + electron-to-chromium: 1.5.57 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -4549,7 +4563,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001677: {} + caniuse-lite@1.0.30001680: {} chai@5.1.2: dependencies: @@ -4583,7 +4597,7 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chromatic@11.16.5: {} + chromatic@11.18.1: {} cliui@8.0.1: dependencies: @@ -4656,9 +4670,9 @@ snapshots: cross-env@7.0.3: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.5 - cross-spawn@7.0.3: + cross-spawn@7.0.5: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -4740,7 +4754,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.50: {} + electron-to-chromium@1.5.57: {} emoji-regex@8.0.0: {} @@ -4839,7 +4853,7 @@ snapshots: eslint-plugin-storybook@0.11.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3): dependencies: '@storybook/csf': 0.1.11 - '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) eslint: 9.14.0(jiti@1.21.6) ts-dedent: 2.2.0 transitivePeerDependencies: @@ -4866,12 +4880,12 @@ snapshots: '@eslint/plugin-kit': 0.2.2 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.0 + '@humanwhocodes/retry': 0.4.1 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 + cross-spawn: 7.0.5 debug: 4.3.7(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 @@ -5021,7 +5035,7 @@ snapshots: foreground-child@3.3.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.5 signal-exit: 4.1.0 form-data@4.0.1: @@ -5416,7 +5430,7 @@ snapshots: bson: 6.9.0 mongodb-connection-string-url: 3.0.1 - mongoose@8.8.0: + mongoose@8.8.1: dependencies: bson: 6.9.0 kareem: 2.6.3 @@ -5492,7 +5506,7 @@ snapshots: object-hash@3.0.0: {} - object-inspect@1.13.2: {} + object-inspect@1.13.3: {} on-finished@2.4.1: dependencies: @@ -5581,29 +5595,29 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.47): + postcss-import@15.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.47): + postcss-js@4.0.1(postcss@8.4.49): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.47 + postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.8.7)(typescript@5.6.3)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3)): dependencies: lilconfig: 3.1.2 yaml: 2.6.0 optionalDependencies: - postcss: 8.4.47 - ts-node: 10.9.2(@types/node@22.8.7)(typescript@5.6.3) + postcss: 8.4.49 + ts-node: 10.9.2(@types/node@22.9.0)(typescript@5.6.3) - postcss-nested@6.2.0(postcss@8.4.47): + postcss-nested@6.2.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -5613,7 +5627,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.47: + postcss@8.4.49: dependencies: nanoid: 3.3.7 picocolors: 1.1.1 @@ -5648,7 +5662,9 @@ snapshots: proxy-from-env@1.1.0: {} - psl@1.9.0: {} + psl@1.10.0: + dependencies: + punycode: 2.3.1 pstree.remy@1.1.8: {} @@ -5715,16 +5731,16 @@ snapshots: react-refresh@0.14.2: {} - react-router-dom@6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.20.0 + '@remix-run/router': 1.21.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.27.0(react@18.3.1) + react-router: 6.28.0(react@18.3.1) - react-router@6.27.0(react@18.3.1): + react-router@6.28.0(react@18.3.1): dependencies: - '@remix-run/router': 1.20.0 + '@remix-run/router': 1.21.0 react: 18.3.1 react-spinners@0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -5782,28 +5798,28 @@ snapshots: reusify@1.0.4: {} - rollup@4.24.4: + rollup@4.26.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.24.4 - '@rollup/rollup-android-arm64': 4.24.4 - '@rollup/rollup-darwin-arm64': 4.24.4 - '@rollup/rollup-darwin-x64': 4.24.4 - '@rollup/rollup-freebsd-arm64': 4.24.4 - '@rollup/rollup-freebsd-x64': 4.24.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.4 - '@rollup/rollup-linux-arm-musleabihf': 4.24.4 - '@rollup/rollup-linux-arm64-gnu': 4.24.4 - '@rollup/rollup-linux-arm64-musl': 4.24.4 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.4 - '@rollup/rollup-linux-riscv64-gnu': 4.24.4 - '@rollup/rollup-linux-s390x-gnu': 4.24.4 - '@rollup/rollup-linux-x64-gnu': 4.24.4 - '@rollup/rollup-linux-x64-musl': 4.24.4 - '@rollup/rollup-win32-arm64-msvc': 4.24.4 - '@rollup/rollup-win32-ia32-msvc': 4.24.4 - '@rollup/rollup-win32-x64-msvc': 4.24.4 + '@rollup/rollup-android-arm-eabi': 4.26.0 + '@rollup/rollup-android-arm64': 4.26.0 + '@rollup/rollup-darwin-arm64': 4.26.0 + '@rollup/rollup-darwin-x64': 4.26.0 + '@rollup/rollup-freebsd-arm64': 4.26.0 + '@rollup/rollup-freebsd-x64': 4.26.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.26.0 + '@rollup/rollup-linux-arm-musleabihf': 4.26.0 + '@rollup/rollup-linux-arm64-gnu': 4.26.0 + '@rollup/rollup-linux-arm64-musl': 4.26.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.26.0 + '@rollup/rollup-linux-riscv64-gnu': 4.26.0 + '@rollup/rollup-linux-s390x-gnu': 4.26.0 + '@rollup/rollup-linux-x64-gnu': 4.26.0 + '@rollup/rollup-linux-x64-musl': 4.26.0 + '@rollup/rollup-win32-arm64-msvc': 4.26.0 + '@rollup/rollup-win32-ia32-msvc': 4.26.0 + '@rollup/rollup-win32-x64-msvc': 4.26.0 fsevents: 2.3.3 rrweb-cssom@0.6.0: {} @@ -5883,7 +5899,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.3 sift@17.1.3: {} @@ -5918,9 +5934,9 @@ snapshots: statuses@2.0.1: {} - storybook@8.4.1(prettier@3.3.3): + storybook@8.4.2(prettier@3.3.3): dependencies: - '@storybook/core': 8.4.1(prettier@3.3.3) + '@storybook/core': 8.4.2(prettier@3.3.3) optionalDependencies: prettier: 3.3.3 transitivePeerDependencies: @@ -6010,16 +6026,18 @@ snapshots: transitivePeerDependencies: - openapi-types - swagger-ui-dist@5.17.14: {} + swagger-ui-dist@5.18.2: + dependencies: + '@scarf/scarf': 1.4.0 swagger-ui-express@5.0.1(express@4.21.1): dependencies: express: 4.21.1 - swagger-ui-dist: 5.17.14 + swagger-ui-dist: 5.18.2 symbol-tree@3.2.4: {} - tailwindcss@3.4.14(ts-node@10.9.2(@types/node@22.8.7)(typescript@5.6.3)): + tailwindcss@3.4.14(ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -6035,11 +6053,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.8.7)(typescript@5.6.3)) - postcss-nested: 6.2.0(postcss@8.4.47) + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3)) + postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 @@ -6072,7 +6090,7 @@ snapshots: tough-cookie@4.1.4: dependencies: - psl: 1.9.0 + psl: 1.10.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 @@ -6095,14 +6113,14 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@22.8.7)(typescript@5.6.3): + ts-node@10.9.2(@types/node@22.9.0)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.8.7 + '@types/node': 22.9.0 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -6140,11 +6158,11 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typescript-eslint@8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3): + typescript-eslint@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.12.2(@typescript-eslint/parser@8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/parser': 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/utils': 8.12.2(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -6183,6 +6201,11 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 + use-sync-external-store@1.2.2(react@18.3.1): + dependencies: + react: 18.3.1 + optional: true + util-deprecate@1.0.2: {} util@0.12.5: @@ -6195,6 +6218,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@11.0.3: {} + uuid@9.0.1: {} v8-compile-cache-lib@3.0.1: {} @@ -6203,24 +6228,24 @@ snapshots: vary@1.1.2: {} - vite-plugin-svgr@4.3.0(rollup@4.24.4)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.7)): + vite-plugin-svgr@4.3.0(rollup@4.26.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)): dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.24.4) + '@rollup/pluginutils': 5.1.3(rollup@4.26.0) '@svgr/core': 8.1.0(typescript@5.6.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.3)) - vite: 5.4.10(@types/node@22.8.7) + vite: 5.4.11(@types/node@22.9.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite@5.4.10(@types/node@22.8.7): + vite@5.4.11(@types/node@22.9.0): dependencies: esbuild: 0.21.5 - postcss: 8.4.47 - rollup: 4.24.4 + postcss: 8.4.49 + rollup: 4.26.0 optionalDependencies: - '@types/node': 22.8.7 + '@types/node': 22.9.0 fsevents: 2.3.3 w3c-xmlserializer@5.0.0: @@ -6321,7 +6346,8 @@ snapshots: optionalDependencies: commander: 9.5.0 - zustand@5.0.1(@types/react@18.3.12)(react@18.3.1): + zustand@5.0.1(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)): optionalDependencies: '@types/react': 18.3.12 react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) From 245a669baa9b3f7776e12cdb9571d0123954d16c Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:44:01 +0900 Subject: [PATCH 23/42] =?UTF-8?q?=E2=9C=A8=20feat:=20crypto=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=EC=9D=80=20=EB=B8=8C=EB=9D=BC=EC=9A=B0=EC=A0=80?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=A7=80=EC=9B=90=EC=9D=B4=20=EC=95=88?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=EA=B0=80=20=EC=9E=88?= =?UTF-8?q?=EC=96=B4=20uuid=20=EB=AA=A8=EB=93=88=EB=A1=9C=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 --- apps/client/src/shared/utils/userId.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/shared/utils/userId.ts b/apps/client/src/shared/utils/userId.ts index a85424f7..107ba3c8 100644 --- a/apps/client/src/shared/utils/userId.ts +++ b/apps/client/src/shared/utils/userId.ts @@ -1,5 +1,7 @@ +import { v4 } from 'uuid'; + export const getUserId = () => { - const userId = localStorage.getItem('userId') || crypto.randomUUID(); + const userId = localStorage.getItem('userId') || v4(); localStorage.setItem('userId', userId); return userId; }; From 5077a6f1772dd00b536d5373c6f138c033a8e71b Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:45:11 +0900 Subject: [PATCH 24/42] =?UTF-8?q?=E2=9C=A8=20feat:=20workspace=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=20=ED=83=80=EC=9E=85=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/types/index.ts | 2 ++ apps/client/src/shared/types/workspaceType.ts | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/apps/client/src/shared/types/index.ts b/apps/client/src/shared/types/index.ts index ba5aadba..a79b20b6 100644 --- a/apps/client/src/shared/types/index.ts +++ b/apps/client/src/shared/types/index.ts @@ -1,5 +1,7 @@ export type { TcreatedWorkspaceDto, + TgetWorkspaceResponse, + TworkspaceDto, Tworkspace, TpagedWorkspaceListResultDto, TpagedWorkspaceListResult, diff --git a/apps/client/src/shared/types/workspaceType.ts b/apps/client/src/shared/types/workspaceType.ts index faaa294a..54407b32 100644 --- a/apps/client/src/shared/types/workspaceType.ts +++ b/apps/client/src/shared/types/workspaceType.ts @@ -6,6 +6,15 @@ export type TpagedWorkspaceListResultDto = { pagedWorkspaceListResult: TpagedWorkspaceListResult; }; +export type TgetWorkspaceResponse = { + workspaceDto: TworkspaceDto; +}; + +export type TworkspaceDto = { + workspace_id: string; + name: string; +}; + export type TpagedWorkspaceListResult = { workspaceList: Array; nextCursor: Tcursor | null; From 8af70ca7d4f71d2f9619f9365ce79ba53fd96e5b Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:47:00 +0900 Subject: [PATCH 25/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EB=8B=A8=EC=9D=BC=20?= =?UTF-8?q?=EC=9B=8C=ED=81=AC=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=EC=9D=98?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20api=20=EC=9A=94=EC=B2=AD=ED=95=98?= =?UTF-8?q?=EB=8A=94=20useGetWorkspace=20=EC=BB=A4=EC=8A=A4=ED=85=80=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 --- .../src/shared/hooks/queries/useGetWorkspace.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 apps/client/src/shared/hooks/queries/useGetWorkspace.ts diff --git a/apps/client/src/shared/hooks/queries/useGetWorkspace.ts b/apps/client/src/shared/hooks/queries/useGetWorkspace.ts new file mode 100644 index 00000000..d4ade259 --- /dev/null +++ b/apps/client/src/shared/hooks/queries/useGetWorkspace.ts @@ -0,0 +1,17 @@ +import { WorkspaceApi } from '@/shared/api'; +import { getUserId } from '@/shared/utils'; +import { useQuery } from '@tanstack/react-query'; + +export const useGetWorkspace = (workspaceId: string) => { + const workspaceApi = WorkspaceApi(); + const userId = getUserId(); + + const { data, isPending, isError } = useQuery({ + queryKey: ['getWorkspace', workspaceId], + queryFn: () => { + return workspaceApi.getWorkspace(userId, workspaceId); + }, + }); + + return { data, isPending, isError }; +}; From b0accfd3ae1e5b77b8336f119b5683f93c0964f4 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:47:55 +0900 Subject: [PATCH 26/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EB=8B=A8=EC=9D=BC=20?= =?UTF-8?q?=EC=9B=8C=ED=81=AC=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20api=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/pages/WorkspacePage.tsx | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/client/src/pages/WorkspacePage.tsx b/apps/client/src/pages/WorkspacePage.tsx index cbd4f037..7605f629 100644 --- a/apps/client/src/pages/WorkspacePage.tsx +++ b/apps/client/src/pages/WorkspacePage.tsx @@ -1,10 +1,28 @@ -import { WorkspacePageHeader, WorkspaceContent } from '@/widgets'; +import { WorkspaceContent, WorkspacePageHeader } from '@/widgets'; + +import { Loading } from '@/shared/ui'; +import { useEffect } from 'react'; +import { useGetWorkspace } from '@/shared/hooks'; +import { useParams } from 'react-router-dom'; // TODO: useParams 훅을 통해 workspaceId 가져오기 export const WorkspacePage = () => { + const params = useParams(); + const { workspaceId } = params; + + const { data, isPending, isError } = useGetWorkspace(workspaceId as string); + useEffect(() => { + console.log(data); + }, [isPending]); + + if (isError) { + return
    에러가 발생했습니다.
    ; + } + return ( <> - + {isPending && } + {data && !isError && } ); From abc56bea6542ca60a323c5a5a6caa39487c41f9a Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:48:57 +0900 Subject: [PATCH 27/42] =?UTF-8?q?=E2=9C=A8=20feat:=20WorkspacePageHeader,?= =?UTF-8?q?=20WorkspaceNameInput=EC=9D=98=20props=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=ED=95=B4=EB=8B=B9=20props=EB=A5=BC=20=ED=86=B5=ED=95=B4=20?= =?UTF-8?q?=ED=98=84=EC=9E=AC=20=EC=9B=8C=ED=81=AC=EC=8A=A4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=EC=9D=98=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20?= =?UTF-8?q?=EC=95=8C=20=EC=88=98=20=EC=9E=88=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/entities/workspace/WorkspaceNameInput.tsx | 10 ++++++---- .../src/widgets/workspace/WorkspacePageHeader.tsx | 9 +++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/client/src/entities/workspace/WorkspaceNameInput.tsx b/apps/client/src/entities/workspace/WorkspaceNameInput.tsx index 0bc3bbd1..ce8785b3 100644 --- a/apps/client/src/entities/workspace/WorkspaceNameInput.tsx +++ b/apps/client/src/entities/workspace/WorkspaceNameInput.tsx @@ -2,10 +2,13 @@ import { FocusEventHandler, KeyboardEventHandler, useState } from 'react'; import toast from 'react-hot-toast'; -export const WorkspaceNameInput = () => { - // TODO: 워크스페이스 이름 변경 로직 필요 +type WorkspaceNameInputProps = { + workspaceName: string; +}; - const [name, setName] = useState(''); +export const WorkspaceNameInput = ({ workspaceName }: WorkspaceNameInputProps) => { + // TODO: 워크스페이스 이름 변경 로직 필요 + const [name, setName] = useState(workspaceName || ''); const handleBlur: FocusEventHandler = ( event: React.FocusEvent @@ -34,7 +37,6 @@ export const WorkspaceNameInput = () => { e.preventDefault(); }; - // TODO: 워크스페이스 이름 존재 시 placeholder가 그에 맞추어 변경되어야함 return ( <> { +type WorkspacePageHeaderProps = { + workspace: TgetWorkspaceResponse; +}; + +export const WorkspacePageHeader = ({ workspace }: WorkspacePageHeaderProps) => { return (
    - +
    From 94edaee72e075d5f4f49fb757ea6798552980743 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:49:51 +0900 Subject: [PATCH 28/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20EmptyWorkspace?= =?UTF-8?q?=EA=B0=80=20WorkspaceGrid=20=EC=9E=90=EC=8B=9D=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=EB=A1=9C=20=EB=8F=99=EC=9E=91?= =?UTF-8?q?=ED=95=A0=20=EC=8B=9C=20=EB=94=94=EC=9E=90=EC=9D=B8=EC=9D=B4=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=EA=B0=80=20=EC=9E=88=EC=96=B4=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=B0=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/widgets/home/WorkspaceContainer.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/client/src/widgets/home/WorkspaceContainer.tsx b/apps/client/src/widgets/home/WorkspaceContainer.tsx index b85213be..e6299b77 100644 --- a/apps/client/src/widgets/home/WorkspaceContainer.tsx +++ b/apps/client/src/widgets/home/WorkspaceContainer.tsx @@ -46,15 +46,15 @@ export const WorkspaceContainer = () => { {isError ? ( ) : ( - - {workspaceList && - (workspaceList.length === 0 ? ( - - ) : ( - - ))} - {(isPending || isFetchingNextPage) && } - + workspaceList && + (workspaceList.length === 0 ? ( + + ) : ( + + + {(isPending || isFetchingNextPage) && } + + )) )} {!isPending && !isFetchingNextPage && hasNextPage && (
    From b52224d3d597cede9f5c5a8557833bf7ee6a67c1 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:50:51 +0900 Subject: [PATCH 29/42] =?UTF-8?q?=E2=9C=A8=20feat:=20user=5Fid,=20workspac?= =?UTF-8?q?e=5Fid=20=EB=A5=BC=20=ED=86=B5=ED=95=B4=20document=EB=A5=BC=20?= =?UTF-8?q?=EC=B0=BE=EA=B3=A0=20newName=EC=9C=BC=EB=A1=9C=20=ED=95=B4?= =?UTF-8?q?=EB=8B=B9=20document=EB=A5=BC=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=ED=95=98=EB=8A=94=20=EB=A9=94=EC=86=8C=EB=93=9C=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 --- apps/server/src/services/workspaceService.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps/server/src/services/workspaceService.ts b/apps/server/src/services/workspaceService.ts index a0468245..4ffc89be 100644 --- a/apps/server/src/services/workspaceService.ts +++ b/apps/server/src/services/workspaceService.ts @@ -78,9 +78,26 @@ export const WorkspaceService = () => { } }; + const updateWorkspaceName = async (userId: string, workspaceId: string, newName: string) => { + try { + const updatedWorkspace = await Workspace.findOneAndUpdate( + { user_id: userId, workspace_id: workspaceId }, + { name: newName, updated_at: Date.now() }, + { new: true } + ); + return updatedWorkspace; + } catch (error) { + if (error instanceof Error) { + throw new Error(`Failed to get workspace : ${error.message}`); + } + throw new Error(`Unknown Error ocurred while getting workspace`); + } + }; + return { createWorkspace, findWorkspaceListByPage, findWorkspaceByWorkspaceId, + updateWorkspaceName, }; }; From 863831b5d81e8fc1c41e4029a1132a86c175127f Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Wed, 13 Nov 2024 23:51:10 +0900 Subject: [PATCH 30/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EC=9A=94=EC=B2=AD=20api=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20=EC=B2=98=EB=A6=AC=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/controllers/workspaceController.ts | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/apps/server/src/controllers/workspaceController.ts b/apps/server/src/controllers/workspaceController.ts index 3556e198..47c77af5 100644 --- a/apps/server/src/controllers/workspaceController.ts +++ b/apps/server/src/controllers/workspaceController.ts @@ -70,5 +70,29 @@ export const WorkspaceController = () => { } }; - return { createNewWorkspace, getWorkspaceListByPage, getWorkspaceInfo }; + const editWorkspaceName = async (req: Request, res: Response) => { + try { + const userId = req.get('user-id') as string; + const { workspaceId, newName } = req.body; + const updatedWorkspace = await workspaceService.updateWorkspaceName( + userId, + workspaceId, + newName + ); + + if (!updatedWorkspace) { + throw new Error('Workspace not found'); + } + res.status(200).json(updatedWorkspace); + } catch (error) { + console.error(error); + if (error instanceof Error) { + if (error.message === 'Workspace not found') { + return res.status(404).json({ message: ERROR_MESSAGE[404] }); + } + res.status(500).json({ message: ERROR_MESSAGE[500] }); + } + } + }; + return { createNewWorkspace, getWorkspaceListByPage, getWorkspaceInfo, editWorkspaceName }; }; From 3fd9a4e2eb142be605cfa0588ea6e55e8f5b0980 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 00:15:19 +0900 Subject: [PATCH 31/42] =?UTF-8?q?=E2=9C=A8=20feat:=20/workspace/name=20PAT?= =?UTF-8?q?CH=20=EB=9D=BC=EC=9A=B0=ED=8C=85=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EB=AA=85=EC=84=B8=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/routes/v1/workspaceRoute.ts | 54 ++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/apps/server/src/routes/v1/workspaceRoute.ts b/apps/server/src/routes/v1/workspaceRoute.ts index 515c4587..ca33cece 100644 --- a/apps/server/src/routes/v1/workspaceRoute.ts +++ b/apps/server/src/routes/v1/workspaceRoute.ts @@ -19,7 +19,7 @@ workspaceRouter.get( } #swagger.parameters['cursor'] = { in: 'query', - description: '커서 정보입니다. ex: {updatedAt: 2024-11-07T00:00:00.000Z, workspaceId: workspace-id}', + description: '커서 정보입니다. ex: {updatedAt: 2024-11-07T00:00:00.000Z, workspaceId: b15eac31-3942-4192-9cbd-2e2cdd48da0a}', required: false, type: 'string', } @@ -105,3 +105,55 @@ workspaceRouter.get( */ workspaceController.getWorkspaceInfo ); + +workspaceRouter.patch( + '/name', + /* + #swagger.summary = '워크스페이스 이름 변경' + #swagger.description = 'user id 와 workspace id로 워크스페이스를 조회 후 새로운 워크스페이스 이름으로 변경합니다.' + #swagger.tags = ['Workspace'] + #swagger.parameters['user-id'] = { + in: 'header', + description: '유저 아이디 (UUID 형식)', + type: 'string', + required: true, + } + #swagger.requestBody = { + required: true, + content: { + "application/json": { + schema: { + type: 'object', + properties: { + workspaceId: { + type: 'string', + example: 'b15eac31-3942-4192-9cbd-2e2cdd48da0a', + }, + newName: { + type: 'string', + example: '새로운 워크스페이스 이름', + }, + }, + } + } + } + } + #swagger.responses[200] = { + description: 'success', + content : { + "application/json" : { + schema: { + $ref: '#/components/schemas/Workspace' + } + } + } + } + #swagger.responses[404] = { + description: 'Not Found' + } + #swagger.responses[500] = { + description: 'internal server error' + } + */ + workspaceController.editWorkspaceName +); From ee4a1520dd4dd759da70744695a3fb610ff37f94 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 00:15:59 +0900 Subject: [PATCH 32/42] =?UTF-8?q?=E2=9C=A8=20feat:=20PATCH=20/workspace/na?= =?UTF-8?q?me=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/api/workspaceApi.ts | 32 +++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/apps/client/src/shared/api/workspaceApi.ts b/apps/client/src/shared/api/workspaceApi.ts index c4870d39..d3f7f979 100644 --- a/apps/client/src/shared/api/workspaceApi.ts +++ b/apps/client/src/shared/api/workspaceApi.ts @@ -1,4 +1,9 @@ -import { TcreatedWorkspaceDto, TpagedWorkspaceListResultDto } from '@/shared/types'; +import { + TcreatedWorkspaceDto, + TgetWorkspaceResponse, + TpagedWorkspaceListResultDto, + Tworkspace, +} from '@/shared/types'; import { Instance } from '@/shared/api'; @@ -32,8 +37,33 @@ export const WorkspaceApi = () => { throw new Error('Invalid response from server'); }; + const getWorkspace = async (userId: string, workspaceId: string) => { + const response = await Instance.get(`/workspace?workspaceId=${workspaceId}`, { + headers: { 'user-id': userId }, + }); + if (response) { + return response.data as TgetWorkspaceResponse; + } + throw new Error('Invalid response from server'); + }; + + const updateWorkspaceName = async (userId: string, workspaceId: string, newName: string) => { + const response = await Instance.patch( + '/workspace/name', + { workspaceId, newName }, + { headers: { 'user-id': userId } } + ); + + if (response) { + return response.data as Tworkspace; + } + throw new Error('Invalid response from server'); + }; + return { createWorkspace, getWorkspaceList, + getWorkspace, + updateWorkspaceName, }; }; From e5064574ae484aee5c4d76b8072305d2e10189d5 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 01:30:53 +0900 Subject: [PATCH 33/42] =?UTF-8?q?=E2=9C=A8=20feat:=20Workspace=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=EB=A5=BC=20=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20use?= =?UTF-8?q?WorkspaceStore=20=EC=A0=84=EC=97=AD=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/store/useWorkspaceStore.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 apps/client/src/shared/store/useWorkspaceStore.ts diff --git a/apps/client/src/shared/store/useWorkspaceStore.ts b/apps/client/src/shared/store/useWorkspaceStore.ts new file mode 100644 index 00000000..c82b4021 --- /dev/null +++ b/apps/client/src/shared/store/useWorkspaceStore.ts @@ -0,0 +1,11 @@ +import { create } from 'zustand'; + +type TWorkspace = { + name: string; + setName: (newName: string) => void; +}; + +export const useWorkspaceStore = create((set) => ({ + name: '워크스페이스 이름', + setName: (newName) => set({ name: newName }), +})); From 64dcae19638db99fc813d307aaeba0315a3b5767 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 01:32:25 +0900 Subject: [PATCH 34/42] =?UTF-8?q?=E2=9C=A8=20feat:=20useGetWorkspace=20?= =?UTF-8?q?=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=EC=9C=BC=EB=A1=9C=20wor?= =?UTF-8?q?kspace=EC=9D=98=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=ED=95=A0=20=EC=8B=9C=20=EC=84=B1=EA=B3=B5=ED=95=98?= =?UTF-8?q?=EB=A9=B4=20workspace=20=EC=9D=98=20name=EC=9D=84=20=EC=A0=84?= =?UTF-8?q?=EC=97=AD=20=EC=83=81=ED=83=9C=EB=A1=9C=20=EA=B4=80=EB=A6=AC,?= =?UTF-8?q?=20=EC=8B=A4=ED=8C=A8=ED=95=98=EB=A9=B4=20toast=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EB=A0=8C=EB=8D=94=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/shared/hooks/queries/useGetWorkspace.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/client/src/shared/hooks/queries/useGetWorkspace.ts b/apps/client/src/shared/hooks/queries/useGetWorkspace.ts index d4ade259..ce210b81 100644 --- a/apps/client/src/shared/hooks/queries/useGetWorkspace.ts +++ b/apps/client/src/shared/hooks/queries/useGetWorkspace.ts @@ -1,11 +1,14 @@ +import React from 'react'; import { WorkspaceApi } from '@/shared/api'; import { getUserId } from '@/shared/utils'; +import toast from 'react-hot-toast'; import { useQuery } from '@tanstack/react-query'; +import { useWorkspaceStore } from '@/shared/store'; export const useGetWorkspace = (workspaceId: string) => { const workspaceApi = WorkspaceApi(); const userId = getUserId(); - + const { setName } = useWorkspaceStore(); const { data, isPending, isError } = useQuery({ queryKey: ['getWorkspace', workspaceId], queryFn: () => { @@ -13,5 +16,15 @@ export const useGetWorkspace = (workspaceId: string) => { }, }); + React.useEffect(() => { + if (isError) { + toast.error('워크스페이스 정보 불러오기 실패'); + return; + } + if (data) { + setName(data.workspaceDto.name); + } + }, [data, setName, isError]); + return { data, isPending, isError }; }; From 93a97a0b5fde411ce315c6c8f9b532c5ba42819d Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 01:33:21 +0900 Subject: [PATCH 35/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=EB=A5=BC=20=EB=B6=88=EB=9F=AC=EC=98=A4=EB=8A=94=20=EA=B2=83?= =?UTF-8?q?=EC=9D=84=20=EC=8B=A4=ED=8C=A8=ED=95=98=EB=A9=B4=20NotFound=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EB=A5=BC=20=EB=A0=8C=EB=8D=94?= =?UTF-8?q?=EB=A7=81=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/pages/WorkspacePage.tsx | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/apps/client/src/pages/WorkspacePage.tsx b/apps/client/src/pages/WorkspacePage.tsx index 7605f629..d18cf22f 100644 --- a/apps/client/src/pages/WorkspacePage.tsx +++ b/apps/client/src/pages/WorkspacePage.tsx @@ -1,28 +1,23 @@ import { WorkspaceContent, WorkspacePageHeader } from '@/widgets'; import { Loading } from '@/shared/ui'; -import { useEffect } from 'react'; +import { NotFound } from '@/pages/NotFound'; import { useGetWorkspace } from '@/shared/hooks'; import { useParams } from 'react-router-dom'; -// TODO: useParams 훅을 통해 workspaceId 가져오기 export const WorkspacePage = () => { - const params = useParams(); - const { workspaceId } = params; + const { workspaceId } = useParams(); - const { data, isPending, isError } = useGetWorkspace(workspaceId as string); - useEffect(() => { - console.log(data); - }, [isPending]); + const { isPending, isError } = useGetWorkspace(workspaceId as string); if (isError) { - return
    에러가 발생했습니다.
    ; + return ; } return ( <> {isPending && } - {data && !isError && } + ); From abbd5ea11f3ac1a5ac88f6736576915af3efc7cb Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 01:33:51 +0900 Subject: [PATCH 36/42] =?UTF-8?q?=F0=9F=94=A8=20refactor:=20workspace=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=A0=84=EC=97=AD=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=EB=A1=9C=20=EA=B4=80=EB=A6=AC=ED=95=A8=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20props=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/src/widgets/workspace/WorkspacePageHeader.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/apps/client/src/widgets/workspace/WorkspacePageHeader.tsx b/apps/client/src/widgets/workspace/WorkspacePageHeader.tsx index f4dc2a96..375aafe8 100644 --- a/apps/client/src/widgets/workspace/WorkspacePageHeader.tsx +++ b/apps/client/src/widgets/workspace/WorkspacePageHeader.tsx @@ -1,18 +1,13 @@ import { RedoButton, SaveButton, UndoButton, WorkspaceNameInput } from '@/entities'; import { Logo } from '@/shared/ui'; -import { TgetWorkspaceResponse } from '@/shared/types'; -type WorkspacePageHeaderProps = { - workspace: TgetWorkspaceResponse; -}; - -export const WorkspacePageHeader = ({ workspace }: WorkspacePageHeaderProps) => { +export const WorkspacePageHeader = () => { return (
    - +
    From 3f352acf32a21a70d2fc77ab1f7dc55d294ab76f Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 01:34:28 +0900 Subject: [PATCH 37/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=EC=8A=A4=ED=8E=98=EC=9D=B4=EC=8A=A4=EC=9D=98=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD=EC=9D=84=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=ED=9B=85=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 --- .../hooks/queries/useUpdateWorkspaceName.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 apps/client/src/shared/hooks/queries/useUpdateWorkspaceName.ts diff --git a/apps/client/src/shared/hooks/queries/useUpdateWorkspaceName.ts b/apps/client/src/shared/hooks/queries/useUpdateWorkspaceName.ts new file mode 100644 index 00000000..cab3b774 --- /dev/null +++ b/apps/client/src/shared/hooks/queries/useUpdateWorkspaceName.ts @@ -0,0 +1,26 @@ +import { WorkspaceApi } from '@/shared/api'; +import { getUserId } from '@/shared/utils'; +import toast from 'react-hot-toast'; +import { useMutation } from '@tanstack/react-query'; +import { useWorkspaceStore } from '@/shared/store'; + +export const useUpdateWorkspaceName = () => { + const workspaceApi = WorkspaceApi(); + const userId = getUserId(); + const { setName } = useWorkspaceStore(); + + const { mutate, isPending } = useMutation({ + mutationFn: ({ workspaceId, newName }: { workspaceId: string; newName: string }) => { + return workspaceApi.updateWorkspaceName(userId, workspaceId, newName); + }, + onSuccess: (data) => { + toast.success('워크스페이스 이름이 변경되었습니다.'); + setName(data?.name!); + }, + onError: () => { + toast.error('워크스페이스 이름 변경을 실패했습니다.'); + }, + }); + + return { mutate, isPending }; +}; From fd96c392166a2bf77af53e254b064f216e0a21f8 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 01:34:45 +0900 Subject: [PATCH 38/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20index.ts=20re-exp?= =?UTF-8?q?ort=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/hooks/index.ts | 2 ++ apps/client/src/shared/store/index.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/apps/client/src/shared/hooks/index.ts b/apps/client/src/shared/hooks/index.ts index d0b9a9fe..147be201 100644 --- a/apps/client/src/shared/hooks/index.ts +++ b/apps/client/src/shared/hooks/index.ts @@ -1,2 +1,4 @@ export { useCreateWorkspace } from './queries/useCreateWorkspace'; export { useGetWorkspaceList } from './queries/useGetWorkspaceList'; +export { useGetWorkspace } from './queries/useGetWorkspace'; +export { useUpdateWorkspaceName } from './queries/useUpdateWorkspaceName'; diff --git a/apps/client/src/shared/store/index.ts b/apps/client/src/shared/store/index.ts index d0c39b43..ee116c2d 100644 --- a/apps/client/src/shared/store/index.ts +++ b/apps/client/src/shared/store/index.ts @@ -1,2 +1,3 @@ export { useLoadingStore } from './useLoadingStore'; export { useModalStore } from './useModalStore'; +export { useWorkspaceStore } from './useWorkspaceStore'; From 133b876da02f23f8dc29e9197cbde869c98bce72 Mon Sep 17 00:00:00 2001 From: lee0jae330 Date: Thu, 14 Nov 2024 01:35:52 +0900 Subject: [PATCH 39/42] =?UTF-8?q?=E2=9C=A8=20feat:=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80,?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=20=EB=8C=80=EA=B8=B0=20=EC=8B=9C=20input=20=EC=B0=BD=20?= =?UTF-8?q?=EB=B9=84=ED=99=9C=EC=84=B1=ED=99=94=20=EB=B0=8F=20=EB=A1=9C?= =?UTF-8?q?=EB=94=A9=20=EC=9C=84=EC=A0=AF=20=EB=A0=8C=EB=8D=94=EB=A7=81=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entities/workspace/WorkspaceNameInput.tsx | 48 ++++++++++--------- apps/client/src/shared/assets/spinner.svg | 14 ++++++ 2 files changed, 40 insertions(+), 22 deletions(-) create mode 100644 apps/client/src/shared/assets/spinner.svg diff --git a/apps/client/src/entities/workspace/WorkspaceNameInput.tsx b/apps/client/src/entities/workspace/WorkspaceNameInput.tsx index ce8785b3..42578a96 100644 --- a/apps/client/src/entities/workspace/WorkspaceNameInput.tsx +++ b/apps/client/src/entities/workspace/WorkspaceNameInput.tsx @@ -1,24 +1,22 @@ -import { FocusEventHandler, KeyboardEventHandler, useState } from 'react'; +import { FocusEventHandler, KeyboardEventHandler } from 'react'; -import toast from 'react-hot-toast'; +import Spinner from '@/shared/assets/spinner.svg?react'; +import { useParams } from 'react-router-dom'; +import { useUpdateWorkspaceName } from '@/shared/hooks'; +import { useWorkspaceStore } from '@/shared/store'; -type WorkspaceNameInputProps = { - workspaceName: string; -}; - -export const WorkspaceNameInput = ({ workspaceName }: WorkspaceNameInputProps) => { - // TODO: 워크스페이스 이름 변경 로직 필요 - const [name, setName] = useState(workspaceName || ''); +export const WorkspaceNameInput = () => { + const { workspaceId } = useParams() as { workspaceId: string }; + const { name } = useWorkspaceStore(); + const { mutate, isPending } = useUpdateWorkspaceName(); const handleBlur: FocusEventHandler = ( event: React.FocusEvent ) => { - // TODO: 이름 변경 로직 추가 - if (event.target.value === name) { + if (event.target.value === name || event.target.value === '') { return; } - toast.error('이름 변경 실패'); - setName(event.target.value); + mutate({ workspaceId, newName: event.target.value }); }; const handleEnter: KeyboardEventHandler = (e) => { @@ -28,23 +26,29 @@ export const WorkspaceNameInput = ({ workspaceName }: WorkspaceNameInputProps) = }; const handleKeyDown = (e: React.KeyboardEvent) => { - // TODO: 이름 변경 로직 추가 e.currentTarget.blur(); - if (name === e.currentTarget.value) { + if (name === e.currentTarget.value || e.currentTarget.value === '') { return; } - setName(e.currentTarget.value); + mutate({ workspaceId, newName: e.currentTarget.value }); e.preventDefault(); }; return ( <> - +
    + + {isPending && ( + + )} +
    ); }; diff --git a/apps/client/src/shared/assets/spinner.svg b/apps/client/src/shared/assets/spinner.svg new file mode 100644 index 00000000..231dc584 --- /dev/null +++ b/apps/client/src/shared/assets/spinner.svg @@ -0,0 +1,14 @@ + + + + \ No newline at end of file From 0b8e7a3c8fc11bd483a0d3c62ac8234a4160ab92 Mon Sep 17 00:00:00 2001 From: leeyeongjae Date: Thu, 14 Nov 2024 11:50:02 +0900 Subject: [PATCH 40/42] =?UTF-8?q?=F0=9F=8E=A8=20style:=20=ED=86=A0?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/ui/toast/ToasterWithMax.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/shared/ui/toast/ToasterWithMax.tsx b/apps/client/src/shared/ui/toast/ToasterWithMax.tsx index 1d2a8ec0..2228e417 100644 --- a/apps/client/src/shared/ui/toast/ToasterWithMax.tsx +++ b/apps/client/src/shared/ui/toast/ToasterWithMax.tsx @@ -12,5 +12,5 @@ export const ToasterWithMax = () => { .forEach((t) => toast.dismiss(t.id)); }, [toasts, toastLimit]); - return ; + return ; }; From 3c53efa5c39c1ed68f4226e34392e506be8ddd14 Mon Sep 17 00:00:00 2001 From: YEONGJAE LEE <71895560+lee0jae330@users.noreply.github.com> Date: Thu, 14 Nov 2024 13:23:38 +0900 Subject: [PATCH 41/42] Update boolock-dev-cicd.yml --- .github/workflows/boolock-dev-cicd.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/boolock-dev-cicd.yml b/.github/workflows/boolock-dev-cicd.yml index ebac751a..b2b844b0 100644 --- a/.github/workflows/boolock-dev-cicd.yml +++ b/.github/workflows/boolock-dev-cicd.yml @@ -42,6 +42,7 @@ jobs: - name: Build Backend run: | cd apps/server + pnpm run swagger-auto pnpm run build - name: Build base image From d9aff7966529a6461b0f4748185aa66191c3aa1a Mon Sep 17 00:00:00 2001 From: leeyeongjae Date: Thu, 14 Nov 2024 13:59:39 +0900 Subject: [PATCH 42/42] =?UTF-8?q?=F0=9F=99=80=20chore:=20effect=20?= =?UTF-8?q?=EC=9E=84=ED=8F=AC=ED=8A=B8=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/client/src/shared/hooks/queries/useGetWorkspace.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/shared/hooks/queries/useGetWorkspace.ts b/apps/client/src/shared/hooks/queries/useGetWorkspace.ts index ce210b81..ddf72927 100644 --- a/apps/client/src/shared/hooks/queries/useGetWorkspace.ts +++ b/apps/client/src/shared/hooks/queries/useGetWorkspace.ts @@ -1,4 +1,4 @@ -import React from 'react'; +import { useEffect } from 'react'; import { WorkspaceApi } from '@/shared/api'; import { getUserId } from '@/shared/utils'; import toast from 'react-hot-toast'; @@ -16,7 +16,7 @@ export const useGetWorkspace = (workspaceId: string) => { }, }); - React.useEffect(() => { + useEffect(() => { if (isError) { toast.error('워크스페이스 정보 불러오기 실패'); return;