From 66dc6a42bb70ef9f7fd568e8c611b95a3503609e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=95=88=EC=84=B1=EC=A7=84?= Date: Tue, 21 Jul 2026 10:18:34 +0900 Subject: [PATCH 1/2] =?UTF-8?q?design:=EC=9B=8C=ED=81=AC=EC=8A=A4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EB=AA=A8=EB=93=88=20=EB=A1=9C=EB=94=A9=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=88=EB=A0=88=ED=86=A4=20=EC=B6=94=EA=B0=80(#83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../[workspaceId]/calendar/loading.tsx | 5 + .../workspaces/[workspaceId]/chat/loading.tsx | 5 + .../[workspaceId]/dashboard/loading.tsx | 5 + .../[workspaceId]/files/loading.tsx | 5 + .../[workspaceId]/meeting-notes/loading.tsx | 5 + .../[workspaceId]/notices/loading.tsx | 5 + .../[workspaceId]/notifications/loading.tsx | 5 + .../[workspaceId]/progress-chart/loading.tsx | 5 + .../project-management/loading.tsx | 5 + .../[workspaceId]/settings/loading.tsx | 5 + .../[workspaceId]/sprint-board/loading.tsx | 5 + .../[workspaceId]/work-schedule/loading.tsx | 5 + src/shared/ui/skeleton.tsx | 11 + src/widgets/workspace-page-skeleton/index.ts | 3 + .../ui/WorkspacePageSkeleton.tsx | 205 ++++++++++++++++++ 15 files changed, 279 insertions(+) create mode 100644 src/app/workspaces/[workspaceId]/calendar/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/chat/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/dashboard/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/files/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/meeting-notes/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/notices/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/notifications/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/progress-chart/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/project-management/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/settings/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/sprint-board/loading.tsx create mode 100644 src/app/workspaces/[workspaceId]/work-schedule/loading.tsx create mode 100644 src/shared/ui/skeleton.tsx create mode 100644 src/widgets/workspace-page-skeleton/index.ts create mode 100644 src/widgets/workspace-page-skeleton/ui/WorkspacePageSkeleton.tsx diff --git a/src/app/workspaces/[workspaceId]/calendar/loading.tsx b/src/app/workspaces/[workspaceId]/calendar/loading.tsx new file mode 100644 index 0000000..82741ea --- /dev/null +++ b/src/app/workspaces/[workspaceId]/calendar/loading.tsx @@ -0,0 +1,5 @@ +// 캘린더 데이터를 조회하는 동안 월간 그리드의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/chat/loading.tsx b/src/app/workspaces/[workspaceId]/chat/loading.tsx new file mode 100644 index 0000000..85cbacb --- /dev/null +++ b/src/app/workspaces/[workspaceId]/chat/loading.tsx @@ -0,0 +1,5 @@ +// 채팅 초기 메시지와 참여자 데이터를 조회하는 동안 대화 패널을 표시합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/dashboard/loading.tsx b/src/app/workspaces/[workspaceId]/dashboard/loading.tsx new file mode 100644 index 0000000..f3be766 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/dashboard/loading.tsx @@ -0,0 +1,5 @@ +// 대시보드 레이아웃과 위젯을 조회하는 동안 카드 배치를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/files/loading.tsx b/src/app/workspaces/[workspaceId]/files/loading.tsx new file mode 100644 index 0000000..e093df5 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/files/loading.tsx @@ -0,0 +1,5 @@ +// 자료실 목록을 조회하는 동안 자료 카드 목록의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/meeting-notes/loading.tsx b/src/app/workspaces/[workspaceId]/meeting-notes/loading.tsx new file mode 100644 index 0000000..443a30d --- /dev/null +++ b/src/app/workspaces/[workspaceId]/meeting-notes/loading.tsx @@ -0,0 +1,5 @@ +// 회의록 목록을 조회하는 동안 목록 카드의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/notices/loading.tsx b/src/app/workspaces/[workspaceId]/notices/loading.tsx new file mode 100644 index 0000000..ce6f5c5 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/notices/loading.tsx @@ -0,0 +1,5 @@ +// 공지 목록을 조회하는 동안 공지 카드와 상세 영역의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/notifications/loading.tsx b/src/app/workspaces/[workspaceId]/notifications/loading.tsx new file mode 100644 index 0000000..a0f4de3 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/notifications/loading.tsx @@ -0,0 +1,5 @@ +// 전체 알림 목록을 조회하는 동안 알림 카드 목록의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/progress-chart/loading.tsx b/src/app/workspaces/[workspaceId]/progress-chart/loading.tsx new file mode 100644 index 0000000..da30ac5 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/progress-chart/loading.tsx @@ -0,0 +1,5 @@ +// 진행률 데이터를 계산하는 동안 차트 카드의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/project-management/loading.tsx b/src/app/workspaces/[workspaceId]/project-management/loading.tsx new file mode 100644 index 0000000..659bd24 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/project-management/loading.tsx @@ -0,0 +1,5 @@ +// 프로젝트 업무 보드를 조회하는 동안 칸반 열과 업무 카드의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/settings/loading.tsx b/src/app/workspaces/[workspaceId]/settings/loading.tsx new file mode 100644 index 0000000..4722700 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/settings/loading.tsx @@ -0,0 +1,5 @@ +// 워크스페이스 설정과 멤버 정보를 조회하는 동안 설정 폼의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/sprint-board/loading.tsx b/src/app/workspaces/[workspaceId]/sprint-board/loading.tsx new file mode 100644 index 0000000..055bc05 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/sprint-board/loading.tsx @@ -0,0 +1,5 @@ +// 스프린트와 업무를 조회하는 동안 스프린트 보드의 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/app/workspaces/[workspaceId]/work-schedule/loading.tsx b/src/app/workspaces/[workspaceId]/work-schedule/loading.tsx new file mode 100644 index 0000000..be36264 --- /dev/null +++ b/src/app/workspaces/[workspaceId]/work-schedule/loading.tsx @@ -0,0 +1,5 @@ +// 주간 근무유형과 스케줄을 조회하는 동안 근무표의 행과 셀 자리를 유지합니다. +import { WorkspacePageSkeleton } from '@/widgets/workspace-page-skeleton'; +export default function Loading() { + return ; +} diff --git a/src/shared/ui/skeleton.tsx b/src/shared/ui/skeleton.tsx new file mode 100644 index 0000000..c4951b7 --- /dev/null +++ b/src/shared/ui/skeleton.tsx @@ -0,0 +1,11 @@ +// 데이터 로딩 중 실제 콘텐츠의 자리와 크기를 유지하는 공통 스켈레톤 블록입니다. + +interface SkeletonProps { + className?: string; +} + +export function Skeleton({ className = '' }: SkeletonProps) { + return ( +