diff --git a/packages/web/src/apis/auth/queries.ts b/packages/web/src/apis/auth/queries.ts
index f43265052..5164d07be 100644
--- a/packages/web/src/apis/auth/queries.ts
+++ b/packages/web/src/apis/auth/queries.ts
@@ -1,6 +1,7 @@
-import { Keys, NicknameDuplicateResponse, getNicknameDuplicate, getSchoolSearch } from '.';
import { useQuery, useSuspenseQuery } from '@tanstack/react-query';
+import { Keys, NicknameDuplicateResponse, getNicknameDuplicate, getSchoolSearch } from '.';
+
export const useGetSearchSchool = (searchWord: string) =>
useSuspenseQuery({
queryKey: Keys.getSchoolSearch(searchWord),
diff --git a/packages/web/src/apis/common/mutations.ts b/packages/web/src/apis/common/mutations.ts
index c4ccbe4af..3b623bbf0 100644
--- a/packages/web/src/apis/common/mutations.ts
+++ b/packages/web/src/apis/common/mutations.ts
@@ -1,6 +1,7 @@
-import { postFiles } from './apis';
import { useMutation } from '@tanstack/react-query';
+import { postFiles } from './apis';
+
export const usePostFiles = () => {
return useMutation({ mutationFn: postFiles });
};
diff --git a/packages/web/src/apis/config/privateApi.ts b/packages/web/src/apis/config/privateApi.ts
index 657d6bafa..42468826b 100644
--- a/packages/web/src/apis/config/privateApi.ts
+++ b/packages/web/src/apis/config/privateApi.ts
@@ -1,7 +1,5 @@
import axios, { AxiosError, AxiosResponse, type InternalAxiosRequestConfig } from 'axios';
-import { postReissue } from '../auth';
-
import type { CustomInstance, ErrorType } from './type';
import { BASE_API_URL } from '@/constants';
@@ -19,7 +17,7 @@ privateApi.defaults.timeout = 2500;
privateApi.interceptors.request.use(
async (config: InternalAxiosRequestConfig) => {
try {
- const { accessToken, refreshToken } = await getTokenFromCookie();
+ const { accessToken } = await getTokenFromCookie();
config.headers['X-AUTH-TOKEN'] = accessToken;
return config;
} catch (error) {
diff --git a/packages/web/src/apis/groups/mutations.tsx b/packages/web/src/apis/groups/mutations.tsx
index eae56200d..fb808a41e 100644
--- a/packages/web/src/apis/groups/mutations.tsx
+++ b/packages/web/src/apis/groups/mutations.tsx
@@ -18,9 +18,9 @@ import { GroupDetailResponse } from './type';
import { MeetingScrapResponse } from '../meeting';
import { Keys as MeetingKeys } from '../meeting/keys';
-import FeedbackCompleteModal from '@/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/FeedbackCompleteModal.client';
+import FeedbackCompleteModal from '@/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/FeedbackCompleteModal';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
export const usePostCreateGroup = () => {
const { replace } = useAppRouter();
@@ -30,7 +30,7 @@ export const usePostCreateGroup = () => {
mutationFn: postCreateGroup,
onSuccess: (data) => {
queryClient.resetQueries({ queryKey: GroupsKeys.getGroups() });
- replace(`/grouping/${data.groupId}?tab=detail`);
+ replace(`/grouping/detail/${data.groupId}?tab=detail`);
},
});
};
diff --git a/packages/web/src/apis/meeting/mutations.ts b/packages/web/src/apis/meeting/mutations.ts
index a3a8768be..da14c267e 100644
--- a/packages/web/src/apis/meeting/mutations.ts
+++ b/packages/web/src/apis/meeting/mutations.ts
@@ -1,4 +1,5 @@
-import { postMeetingRejected } from '.';
import { useMutation } from '@tanstack/react-query';
+import { postMeetingRejected } from '.';
+
export const usePostApply = () => useMutation({ mutationFn: postMeetingRejected });
diff --git a/packages/web/src/apis/meeting/queries.ts b/packages/web/src/apis/meeting/queries.ts
index b170847b4..e7822c986 100644
--- a/packages/web/src/apis/meeting/queries.ts
+++ b/packages/web/src/apis/meeting/queries.ts
@@ -1,3 +1,5 @@
+import { useSuspenseQuery } from '@tanstack/react-query';
+
import {
getMeetingHosting,
getMeetingNotEstimated,
@@ -7,7 +9,6 @@ import {
getMeetingWaiting,
} from '.';
import { Keys } from './keys';
-import { useSuspenseQuery } from '@tanstack/react-query';
export const useGetExample = () => {};
diff --git a/packages/web/src/apis/notifications/mutations.ts b/packages/web/src/apis/notifications/mutations.ts
index ed4b7eb9c..901cc6f92 100644
--- a/packages/web/src/apis/notifications/mutations.ts
+++ b/packages/web/src/apis/notifications/mutations.ts
@@ -1,6 +1,7 @@
-import { postFCMToken } from './apis';
import { useMutation } from '@tanstack/react-query';
+import { postFCMToken } from './apis';
+
export const usePostFCMToken = () => {
return useMutation({ mutationFn: postFCMToken });
};
diff --git a/packages/web/src/apis/notifications/queries.ts b/packages/web/src/apis/notifications/queries.ts
index a29540092..0828f78c3 100644
--- a/packages/web/src/apis/notifications/queries.ts
+++ b/packages/web/src/apis/notifications/queries.ts
@@ -1,5 +1,6 @@
-import { Keys, getNotification } from '.';
import { useSuspenseQuery } from '@tanstack/react-query';
+import { Keys, getNotification } from '.';
+
export const useGetNotifications = () =>
useSuspenseQuery({ queryKey: Keys.getNotifications(), queryFn: getNotification });
diff --git a/packages/web/src/apis/profile/mutations.ts b/packages/web/src/apis/profile/mutations.ts
index a07ea9bb4..6f5b88945 100644
--- a/packages/web/src/apis/profile/mutations.ts
+++ b/packages/web/src/apis/profile/mutations.ts
@@ -1,6 +1,8 @@
+import { useMutation, useQueryClient } from '@tanstack/react-query';
+
import { Keys, deleteMate, patchProfile, patchSignOut, postEmailVerify } from '.';
+
import useAppRouter from '@/hooks/useAppRouter';
-import { useMutation, useQueryClient } from '@tanstack/react-query';
export const usePatchProfile = () => {
const queryClient = useQueryClient();
diff --git a/packages/web/src/apis/profile/queries.ts b/packages/web/src/apis/profile/queries.ts
index d998312f4..3501ec6aa 100644
--- a/packages/web/src/apis/profile/queries.ts
+++ b/packages/web/src/apis/profile/queries.ts
@@ -1,6 +1,7 @@
-import { Keys, getMates, getPraises, getProfile, getProfileById } from '.';
import { useSuspenseQuery } from '@tanstack/react-query';
+import { Keys, getMates, getPraises, getProfile, getProfileById } from '.';
+
export const useGetProfile = () =>
useSuspenseQuery({
queryKey: Keys.getProfile(),
diff --git a/packages/web/src/app/[lng]/(main)/chat/page.tsx b/packages/web/src/app/[lng]/(main)/chat/page.tsx
new file mode 100644
index 000000000..42a9856b6
--- /dev/null
+++ b/packages/web/src/app/[lng]/(main)/chat/page.tsx
@@ -0,0 +1,3 @@
+export default function ChatPage() {
+ return
;
+}
diff --git a/packages/web/src/app/[lng]/(main)/community/components/AllContent.tsx b/packages/web/src/app/[lng]/(main)/community/components/AllContent.tsx
deleted file mode 100644
index 97478a977..000000000
--- a/packages/web/src/app/[lng]/(main)/community/components/AllContent.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-'use client';
-
-import { useEffect } from 'react';
-import { useInView } from 'react-intersection-observer';
-
-import { useGetCommunityArticles } from '@/apis/community/queries';
-import ArticleItem from '@/app/[lng]/(main)/community/components/ArticleItem';
-import Empty from '@/app/[lng]/(main)/community/components/Empty';
-import { ItemList } from '@/components/List';
-import { useBlockStore } from '@/store/useBlockStore';
-
-export default function AllContent() {
- const { ref, inView } = useInView();
- const { blockCommunityArticleIds } = useBlockStore();
- const { data: articleList, fetchNextPage, hasNextPage } = useGetCommunityArticles(0);
-
- useEffect(() => {
- if (inView && hasNextPage) fetchNextPage();
- }, [inView, fetchNextPage]);
-
- return (
- <>
- {
- return (
- !blockCommunityArticleIds.includes(articleData.article.id) && (
-
- )
- );
- }}
- renderEmpty={() => }
- />
-
- >
- );
-}
diff --git a/packages/web/src/app/[lng]/(main)/community/components/ArticleItem.tsx b/packages/web/src/app/[lng]/(main)/community/components/ArticleItem.tsx
index 635f8eed8..e8eaae9d0 100644
--- a/packages/web/src/app/[lng]/(main)/community/components/ArticleItem.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/components/ArticleItem.tsx
@@ -47,26 +47,18 @@ export default function ArticleItem({ articleData, onClick }: ArticleItemProps)
likeCount,
isLiked,
createdAt,
- isWriter,
- userId,
- thumbnail,
category,
} = article;
- const {
- id: writerId,
- isCertifiedStudent,
- reliabilityLevel,
- nickName,
- countryName,
- countryImage,
- profileImage,
- } = writer;
+ const { isCertifiedStudent, reliabilityLevel, nickName, countryImage, profileImage } = writer;
const locale = i18n.language === 'ko' ? ko : enUS;
return (
- push(`/community/${articleId}`, false))}>
+
push(`/community/detail/${articleId}`, false))}
+ >
{t(`category.${category.name}`)}
{formatDate(createdAt, locale)}
@@ -80,7 +72,7 @@ export default function ArticleItem({ articleData, onClick }: ArticleItemProps)
{!!images?.length && (
-
+
)}
diff --git a/packages/web/src/app/[lng]/(main)/community/components/LanguageContent.tsx b/packages/web/src/app/[lng]/(main)/community/components/CommunityArticles.tsx
similarity index 85%
rename from packages/web/src/app/[lng]/(main)/community/components/LanguageContent.tsx
rename to packages/web/src/app/[lng]/(main)/community/components/CommunityArticles.tsx
index 983c7f264..a4882d363 100644
--- a/packages/web/src/app/[lng]/(main)/community/components/LanguageContent.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/components/CommunityArticles.tsx
@@ -10,10 +10,14 @@ import { useGetCommunityArticles } from '@/apis/community/queries';
import { ItemList } from '@/components/List';
import { useBlockStore } from '@/store/useBlockStore';
-export default function LanguageContent() {
+interface CommunityArticle {
+ categoryId: number;
+}
+
+export default function CommunityArticles({ categoryId }: CommunityArticle) {
const { ref, inView } = useInView();
const { blockCommunityArticleIds } = useBlockStore();
- const { data: articleList, fetchNextPage, hasNextPage } = useGetCommunityArticles(3);
+ const { data: articleList, fetchNextPage, hasNextPage } = useGetCommunityArticles(categoryId);
useEffect(() => {
if (inView && hasNextPage) fetchNextPage();
diff --git a/packages/web/src/app/[lng]/(main)/community/components/ContentSection.tsx b/packages/web/src/app/[lng]/(main)/community/components/ContentSection.tsx
index 7bb7a006f..b563f6a30 100644
--- a/packages/web/src/app/[lng]/(main)/community/components/ContentSection.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/components/ContentSection.tsx
@@ -1,16 +1,12 @@
'use client';
-import dynamic from 'next/dynamic';
import { Suspense } from 'react';
+import CommunityArticles from './CommunityArticles';
+
import { useTranslation } from '@/app/i18n/client';
import { Loading } from '@/components/Loading';
import { Tabs } from '@/components/Tabs';
-const AllContent = dynamic(() => import('./AllContent'));
-const KpopContent = dynamic(() => import('./KpopContent'));
-const LanguageContent = dynamic(() => import('./LanguageContent'));
-const QuestionContent = dynamic(() => import('./QuestionContent'));
-
export default function ContentSection() {
const { t } = useTranslation('community');
@@ -24,22 +20,22 @@ export default function ContentSection() {
}>
-
+
}>
-
+
}>
-
+
}>
-
+
diff --git a/packages/web/src/app/[lng]/(main)/community/components/KpopContent.tsx b/packages/web/src/app/[lng]/(main)/community/components/KpopContent.tsx
deleted file mode 100644
index 7f012d8a3..000000000
--- a/packages/web/src/app/[lng]/(main)/community/components/KpopContent.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-'use client';
-
-import { useEffect } from 'react';
-import { useInView } from 'react-intersection-observer';
-
-import ArticleItem from './ArticleItem';
-import Empty from './Empty';
-
-import { useGetCommunityArticles } from '@/apis/community/queries';
-import { ItemList } from '@/components/List';
-import { useBlockStore } from '@/store/useBlockStore';
-
-export default function KpopContent() {
- const { ref, inView } = useInView();
- const { blockCommunityArticleIds } = useBlockStore();
- const { data: articleList, fetchNextPage, hasNextPage } = useGetCommunityArticles(1);
-
- useEffect(() => {
- if (inView && hasNextPage) fetchNextPage();
- }, [inView, fetchNextPage]);
-
- return (
- <>
-
{
- return (
- !blockCommunityArticleIds.includes(articleData.article.id) && (
-
- )
- );
- }}
- renderEmpty={() => }
- />
-
- >
- );
-}
diff --git a/packages/web/src/app/[lng]/(main)/community/components/QuestionContent.tsx b/packages/web/src/app/[lng]/(main)/community/components/QuestionContent.tsx
deleted file mode 100644
index 7076a67d8..000000000
--- a/packages/web/src/app/[lng]/(main)/community/components/QuestionContent.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-'use client';
-
-import { useEffect } from 'react';
-import { useInView } from 'react-intersection-observer';
-
-import ArticleItem from './ArticleItem';
-import Empty from './Empty';
-
-import { useGetCommunityArticles } from '@/apis/community/queries';
-import { ItemList } from '@/components/List';
-import { Loading } from '@/components/Loading';
-import { useBlockStore } from '@/store/useBlockStore';
-
-export default function QuestionContent() {
- const { ref, inView } = useInView();
- const { blockCommunityArticleIds } = useBlockStore();
- const { data: articleList, fetchNextPage, hasNextPage } = useGetCommunityArticles(2);
-
- useEffect(() => {
- if (inView && hasNextPage) fetchNextPage();
- }, [inView, fetchNextPage]);
-
- return (
- <>
- {
- return (
- !blockCommunityArticleIds.includes(articleData.article.id) && (
-
- )
- );
- }}
- renderEmpty={() => }
- />
-
- >
- );
-}
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ArticleDetail.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ArticleDetail.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/ArticleDetail.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ArticleDetail.tsx
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ArticleDetailHeader.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ArticleDetailHeader.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/ArticleDetailHeader.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ArticleDetailHeader.tsx
index f53ff98e4..49d0ccd6c 100644
--- a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ArticleDetailHeader.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ArticleDetailHeader.tsx
@@ -12,7 +12,7 @@ import { DropDownOptionType } from '@/components/DropDown/DropDown';
import { Header } from '@/components/Header';
import { Icon } from '@/components/Icon';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { useNumberParams } from '@/hooks/useNumberParams';
import { useBlockStore } from '@/store/useBlockStore';
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ArticleItem.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ArticleItem.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/ArticleItem.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ArticleItem.tsx
index 7b63947c1..903103d84 100644
--- a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ArticleItem.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ArticleItem.tsx
@@ -12,7 +12,7 @@ import { Flex } from '@/components/Layout';
import { Loading } from '@/components/Loading';
import { ImageModal } from '@/components/Modal';
import { Spacing } from '@/components/Spacing';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import cn from '@/utils/cn';
import { getLocalCookie } from '@/utils/cookieController';
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentForm.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentForm.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentForm.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentForm.tsx
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentItem.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentItem.tsx
similarity index 99%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentItem.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentItem.tsx
index 5f5fb08a1..6d8403f8d 100644
--- a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentItem.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentItem.tsx
@@ -23,7 +23,7 @@ import { Icon } from '@/components/Icon';
import { Flex } from '@/components/Layout';
import { Loading } from '@/components/Loading';
import { Spacing } from '@/components/Spacing';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { useBlockStore } from '@/store/useBlockStore';
import cn from '@/utils/cn';
import { getLocalCookie } from '@/utils/cookieController';
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentList.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentList.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentList.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentList.tsx
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentProvider.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentProvider.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommentProvider.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommentProvider.tsx
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommunityModal.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommunityModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/CommunityModal.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/CommunityModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ReplyItem.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ReplyItem.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/ReplyItem.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ReplyItem.tsx
index de127edb0..e66bf1011 100644
--- a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ReplyItem.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ReplyItem.tsx
@@ -15,7 +15,7 @@ import { Icon } from '@/components/Icon';
import { Flex } from '@/components/Layout';
import { Loading } from '@/components/Loading';
import { Spacing } from '@/components/Spacing';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { useBlockStore } from '@/store/useBlockStore';
import cn from '@/utils/cn';
import { getLocalCookie } from '@/utils/cookieController';
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ReplyList.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ReplyList.tsx
similarity index 88%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/components/ReplyList.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ReplyList.tsx
index eabdb1989..bfb8e7f97 100644
--- a/packages/web/src/app/[lng]/(main)/community/[articleId]/components/ReplyList.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/components/ReplyList.tsx
@@ -1,5 +1,5 @@
import { Reply } from '@/apis/community';
-import ReplyItem from '@/app/[lng]/(main)/community/[articleId]/components/ReplyItem';
+import ReplyItem from '@/app/[lng]/(main)/community/detail/[articleId]/components/ReplyItem';
import { ItemList } from '@/components/List';
import { useBlockStore } from '@/store/useBlockStore';
diff --git a/packages/web/src/app/[lng]/(main)/community/[articleId]/page.tsx b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/page.tsx
similarity index 67%
rename from packages/web/src/app/[lng]/(main)/community/[articleId]/page.tsx
rename to packages/web/src/app/[lng]/(main)/community/detail/[articleId]/page.tsx
index e6b11bea7..4069e7b4d 100644
--- a/packages/web/src/app/[lng]/(main)/community/[articleId]/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/detail/[articleId]/page.tsx
@@ -1,7 +1,10 @@
+import { ErrorBoundary } from 'react-error-boundary';
+
+import ArticleDetail from './components/ArticleDetail';
+import ArticleDetailHeader from './components/ArticleDetailHeader';
+
import { Keys, getCommunityArticleDetail } from '@/apis/community';
-import ArticleDetail from '@/app/[lng]/(main)/community/[articleId]/components/ArticleDetail';
-import ArticleDetailHeader from '@/app/[lng]/(main)/community/[articleId]/components/ArticleDetailHeader';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
import { Spacing } from '@/components/Spacing';
@@ -16,7 +19,7 @@ export default function CommunityArticlePage({ params }: CommunityArticlePagePro
return (
<>
-
+
getCommunityArticleDetail(articleId)}
queryKey={Keys.getCommunityArticleDetail(articleId)}
@@ -24,7 +27,7 @@ export default function CommunityArticlePage({ params }: CommunityArticlePagePro
-
+
>
);
diff --git a/packages/web/src/app/[lng]/(main)/community/loading.tsx b/packages/web/src/app/[lng]/(main)/community/loading.tsx
new file mode 100644
index 000000000..eab0965c3
--- /dev/null
+++ b/packages/web/src/app/[lng]/(main)/community/loading.tsx
@@ -0,0 +1,19 @@
+import { Flex } from '@/components/Layout';
+import cn from '@/utils/cn';
+
+interface LoadingProps {
+ className?: string;
+}
+
+const loadingIconStyle = 'h-10 w-10 rounded-full bg-primary';
+
+export default function Loading({ className }: LoadingProps) {
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/packages/web/src/app/[lng]/(main)/community/page.tsx b/packages/web/src/app/[lng]/(main)/community/page.tsx
index 7ff2802d0..54a4c316e 100644
--- a/packages/web/src/app/[lng]/(main)/community/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/page.tsx
@@ -1,10 +1,11 @@
+import { ErrorBoundary } from 'react-error-boundary';
+
import CommunityHeader from './components/CommunityHeader';
import ContentSection from './components/ContentSection';
import CreateArticleButton from './components/CreateArticleButton';
import { Keys, getCommunityArticles } from '@/apis/community';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
-import { Footer } from '@/components/Footer';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
import { Spacing } from '@/components/Spacing';
@@ -18,28 +19,17 @@ export default function CommunityPage({ params: { lng } }: CommunityPageProps) {
return (
<>
-
+
getCommunityArticles({ categoryId: 0, pageParam: 0 }),
- () => getCommunityArticles({ categoryId: 1, pageParam: 0 }),
- () => getCommunityArticles({ categoryId: 2, pageParam: 0 }),
- () => getCommunityArticles({ categoryId: 3, pageParam: 0 }),
- ]}
- queryMultipleKey={[
- Keys.getCommunityArticles(0),
- Keys.getCommunityArticles(1),
- Keys.getCommunityArticles(2),
- Keys.getCommunityArticles(3),
- ]}
+ queryFn={() => getCommunityArticles({ categoryId: 0, pageParam: 0 })}
+ queryKey={Keys.getCommunityArticles(0)}
isInfiniteQuery
>
-
+
-
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/community/write/components/InputSection.tsx b/packages/web/src/app/[lng]/(main)/community/write/components/InputSection.tsx
index 9db6f2445..6511ed32a 100644
--- a/packages/web/src/app/[lng]/(main)/community/write/components/InputSection.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/write/components/InputSection.tsx
@@ -12,7 +12,7 @@ import MultiImageUploader from '@/components/Image/MultiImageUploader';
import ListBoxController from '@/components/ListBox/ListBoxController';
import { Spacing } from '@/components/Spacing';
import { TextFieldController } from '@/components/TextField';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
export default function InputSection() {
const { open, exit } = useModal();
diff --git a/packages/web/src/app/[lng]/(main)/community/write/components/WriteHeader.tsx b/packages/web/src/app/[lng]/(main)/community/write/components/WriteHeader.tsx
index ba85271ee..7713a913e 100644
--- a/packages/web/src/app/[lng]/(main)/community/write/components/WriteHeader.tsx
+++ b/packages/web/src/app/[lng]/(main)/community/write/components/WriteHeader.tsx
@@ -7,7 +7,7 @@ import { IconButton } from '@/components/Button';
import { Header } from '@/components/Header';
import { Icon } from '@/components/Icon';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
export default function WriteHeader() {
const { t } = useTranslation('community');
diff --git a/packages/web/src/app/[lng]/(main)/grouping/components/ArticleItem.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/components/ArticleItem.tsx
similarity index 97%
rename from packages/web/src/app/[lng]/(main)/grouping/components/ArticleItem.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/components/ArticleItem.tsx
index 99309f653..e66c205e0 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/components/ArticleItem.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/components/ArticleItem.tsx
@@ -14,7 +14,7 @@ import { Flex } from '@/components/Layout';
import { ImageModal } from '@/components/Modal';
import { Spacing } from '@/components/Spacing';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
interface ArticleItemProps {
article: Article;
diff --git a/packages/web/src/app/[lng]/(main)/grouping/components/BlockDoneModal.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/components/BlockDoneModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/components/BlockDoneModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/components/BlockDoneModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/components/CreateGroupButton.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/components/CreateGroupButton.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/components/CreateGroupButton.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/components/CreateGroupButton.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/components/GroupingCardList.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/components/GroupingCardList.tsx
similarity index 89%
rename from packages/web/src/app/[lng]/(main)/grouping/components/GroupingCardList.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/components/GroupingCardList.tsx
index ece579f19..11c2189e6 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/components/GroupingCardList.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/components/GroupingCardList.tsx
@@ -2,11 +2,10 @@
import { useEffect } from 'react';
import { useInView } from 'react-intersection-observer';
-import NoMeeting from '../../meeting/components/NoMeeting';
-
import { useGetGroups } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
import { GroupingCard } from '@/components/Card';
+import { Empty } from '@/components/Empty';
import { ItemList } from '@/components/List';
import { useBlockStore } from '@/store/useBlockStore';
@@ -31,7 +30,7 @@ export default function GroupingCardList({ lng }: GroupingCardList) {
renderItem={(group) => {
return !blockGroupIds.includes(group.groupId) && ;
}}
- renderEmpty={() => }
+ renderEmpty={() => }
/>
>
diff --git a/packages/web/src/app/[lng]/(main)/grouping/components/ReportDoneModal.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/components/ReportDoneModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/components/ReportDoneModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/components/ReportDoneModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/components/WarningModal.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/components/WarningModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/components/WarningModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/components/WarningModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/components/CreateHeader.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/components/CreateHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/create/components/CreateHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/components/CreateHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/components/CreateModal.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/components/CreateModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/create/components/CreateModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/components/CreateModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/components/LocationBottomSheet.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/components/LocationBottomSheet.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(main)/grouping/create/components/LocationBottomSheet.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/components/LocationBottomSheet.tsx
index 611548b4f..f08435084 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/create/components/LocationBottomSheet.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/create/components/LocationBottomSheet.tsx
@@ -4,7 +4,7 @@ import { useState } from 'react';
import usePlacesService from 'react-google-autocomplete/lib/usePlacesAutocompleteService';
import { Control, useController } from 'react-hook-form';
-import LocationItem from './LocationItem.client';
+import LocationItem from './LocationItem';
import { CreateGroupContextValue } from '../type';
import { useTranslation } from '@/app/i18n/client';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/components/LocationItem.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/components/LocationItem.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/create/components/LocationItem.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/components/LocationItem.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/CreateGroupFunnel.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/CreateGroupFunnel.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(main)/grouping/create/funnels/CreateGroupFunnel.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/funnels/CreateGroupFunnel.tsx
index f0798a0af..29abdf6b1 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/CreateGroupFunnel.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/CreateGroupFunnel.tsx
@@ -12,8 +12,8 @@ import { LayerLoading } from '@/components/Loading';
import { useFunnel } from '@/hooks/useFunnel';
const MainStep = dynamic(() => import('./main/MainStep.client'));
-const MeetDateStep = dynamic(() => import('./meetDate/MeetDateStep.client'));
-const CreateHeader = dynamic(() => import('../components/CreateHeader.client'));
+const MeetDateStep = dynamic(() => import('./meetDate/MeetDateStep'));
+const CreateHeader = dynamic(() => import('../components/CreateHeader'));
function formatTime(time: TimeType) {
time.fromHour =
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/InputSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/InputSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/InputSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/InputSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/MainStep.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/MainStep.client.tsx
index 020a8a438..eb4b7c214 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/MainStep.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/MainStep.client.tsx
@@ -1,10 +1,10 @@
import { format } from 'date-fns';
-import InputSection from './InputSection.client';
-import SettingSection from './SettingSection.client';
-import UploadSection from './UploadSection.client';
+import InputSection from './InputSection';
+import SettingSection from './SettingSection';
+import UploadSection from './UploadSection';
import { useCreateGroupContext } from '../../components/CreateGroupContext';
-import CreateModal from '../../components/CreateModal.client';
+import CreateModal from '../../components/CreateModal';
import type { CreateGroupContextValue } from '../../type';
import type { TimeType } from '@/types';
@@ -16,7 +16,8 @@ import { Divider } from '@/components/Divider';
import { Spacing } from '@/components/Spacing';
import { useDidMount } from '@/hooks/common/useDidMount';
import useBrowser from '@/hooks/useBrowser';
-import { useModal, useToast } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
+import useToast from '@/hooks/useModal/useToast';
import sendMessageToReactNative from '@/utils/sendMessageToReactNative';
function validateDate(date: Date, time: TimeType, browser: string) {
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/SettingSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/SettingSection.tsx
similarity index 97%
rename from packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/SettingSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/SettingSection.tsx
index ee64652f1..570d75a96 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/SettingSection.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/SettingSection.tsx
@@ -1,7 +1,7 @@
import { useController } from 'react-hook-form';
import { useCreateGroupContext } from '../../components/CreateGroupContext';
-import LocationBottomSheet from '../../components/LocationBottomSheet.client';
+import LocationBottomSheet from '../../components/LocationBottomSheet';
import { displayDate } from '../../util';
import { useTranslation } from '@/app/i18n/client';
@@ -9,7 +9,7 @@ import { Icon } from '@/components/Icon';
import { Spacing } from '@/components/Spacing';
import { SpinBox } from '@/components/SpinBox';
import { TextField } from '@/components/TextField';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
interface SettingSectionProps {
onSelectMeetDate: () => void;
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/UploadSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/UploadSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/UploadSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/funnels/main/UploadSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/CalendarSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/CalendarSection.tsx
similarity index 99%
rename from packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/CalendarSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/CalendarSection.tsx
index f60515a5f..c586c5bbe 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/CalendarSection.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/CalendarSection.tsx
@@ -1,9 +1,10 @@
'use client';
-import { Calendar } from '@/components/Calendar';
import { type Control, useController } from 'react-hook-form';
import type { CreateGroupContextValue } from '../../type';
+import { Calendar } from '@/components/Calendar';
+
interface CalendarSectionProps {
control: Control;
}
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/MeetDateStep.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/MeetDateStep.tsx
similarity index 88%
rename from packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/MeetDateStep.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/MeetDateStep.tsx
index 24491daf9..282a3b91e 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/MeetDateStep.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/MeetDateStep.tsx
@@ -1,6 +1,7 @@
-import CalendarSection from './CalendarSection.client';
-import TimeSection from './TimeSection.client';
+import CalendarSection from './CalendarSection';
+import TimeSection from './TimeSection';
import { useCreateGroupContext } from '../../components/CreateGroupContext';
+
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
import { Divider } from '@/components/Divider';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/TimeSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/TimeSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/TimeSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/create/funnels/meetDate/TimeSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/create/page.tsx b/packages/web/src/app/[lng]/(main)/grouping/create/page.tsx
index 20d5aeea9..1a76021af 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/create/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/create/page.tsx
@@ -1,14 +1,16 @@
-import { Suspense } from 'react';
+import { ErrorBoundary } from 'react-error-boundary';
import CreateGroupContextProvider from './components/CreateGroupContext';
-import CreateGroupFunnel from './funnels/CreateGroupFunnel.client';
+import CreateGroupFunnel from './funnels/CreateGroupFunnel';
+
+import { ErrorFallback } from '@/components/ErrorBoundary';
export default function CreateGroupPage() {
return (
-
+
-
+
);
}
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/components/ApplyHeader.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/components/ApplyHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/components/ApplyHeader.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/components/ApplyHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/components/ApplyModal.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/components/ApplyModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/components/ApplyModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/components/ApplyModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/components/InputForm.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/components/InputForm.tsx
similarity index 96%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/components/InputForm.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/components/InputForm.tsx
index 78a9ec9d8..7e7459318 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/components/InputForm.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/components/InputForm.tsx
@@ -2,7 +2,7 @@
import { SubmitHandler, useForm } from 'react-hook-form';
-import ApplyModal from './ApplyModal.client';
+import ApplyModal from './ApplyModal';
import { usePostApply } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
@@ -10,7 +10,7 @@ import { Button, ButtonGroup } from '@/components/Button';
import { LayerLoading } from '@/components/Loading';
import { Spacing } from '@/components/Spacing';
import { TextFieldController } from '@/components/TextField';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { useNumberParams } from '@/hooks/useNumberParams';
type ApplyFormType = {
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/page.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/page.tsx
similarity index 91%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/page.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/page.tsx
index d3556eb6d..198a2fd33 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/apply/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/apply/page.tsx
@@ -1,5 +1,5 @@
import ApplyHeader from './components/ApplyHeader';
-import InputForm from './components/InputForm.client';
+import InputForm from './components/InputForm';
import { serverTranslation } from '@/app/i18n';
import { Spacing } from '@/components/Spacing';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/ArticleDetail.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/ArticleDetail.tsx
similarity index 94%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/ArticleDetail.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/ArticleDetail.tsx
index bf491040a..b8557b1bc 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/ArticleDetail.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/ArticleDetail.tsx
@@ -1,9 +1,9 @@
'use client';
-import CommentList from './CommentList.client';
+import CommentList from './CommentList';
import { useGetArticle, useGetGroupDetail } from '@/apis/groups';
-import ArticleItem from '@/app/[lng]/(main)/grouping/components/ArticleItem.client';
+import ArticleItem from '@/app/[lng]/(main)/grouping/components/ArticleItem';
import { useTranslation } from '@/app/i18n/client';
import { Divider } from '@/components/Divider';
import { Spacing } from '@/components/Spacing';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/ArticleHeader.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/ArticleHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/ArticleHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/ArticleHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/CommentForm.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/CommentForm.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/CommentForm.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/CommentForm.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/CommentList.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/CommentList.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/components/CommentList.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/components/CommentList.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/page.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/page.tsx
similarity index 72%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/page.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/page.tsx
index 5f0852046..c1d8169c7 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/articles/[articleId]/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/articles/[articleId]/page.tsx
@@ -1,9 +1,11 @@
-import ArticleDetail from './components/ArticleDetail.client';
-import ArticleHeader from './components/ArticleHeader.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import ArticleDetail from './components/ArticleDetail';
+import ArticleHeader from './components/ArticleHeader';
import CommentForm from './components/CommentForm';
import { Keys, getArticle } from '@/apis/groups';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
import { Spacing } from '@/components/Spacing';
@@ -21,14 +23,14 @@ export default function ArticlePage({ params }: ArticleDetailPageProps) {
return (
<>
-
+
getArticle(groupId, articleId)}
queryKey={Keys.getArticle(groupId, articleId)}
>
-
+
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/GroupDetail.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/GroupDetail.tsx
similarity index 94%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/GroupDetail.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/GroupDetail.tsx
index 41655b122..e4a42bdf8 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/GroupDetail.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/GroupDetail.tsx
@@ -3,7 +3,7 @@
import dynamic from 'next/dynamic';
import { Suspense } from 'react';
-import TopSection from './TopSection.client';
+import TopSection from './TopSection';
import { useGetGroupDetail } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
@@ -12,8 +12,8 @@ import { Spacing } from '@/components/Spacing';
import { Tabs } from '@/components/Tabs';
import { useNumberParams } from '@/hooks/useNumberParams';
-const DetailContent = dynamic(() => import('./detail/DetailContent.client'));
-const ArticlesContent = dynamic(() => import('./articles/ArticlesContent.client'));
+const DetailContent = dynamic(() => import('./detail/DetailContent'));
+const ArticlesContent = dynamic(() => import('./articles/ArticlesContent'));
export default function GroupDetailPage() {
const { t } = useTranslation('groupDetail');
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/GroupDetailHeader.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/GroupDetailHeader.tsx
similarity index 92%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/GroupDetailHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/GroupDetailHeader.tsx
index df3b396b6..2786ae6bc 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/GroupDetailHeader.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/GroupDetailHeader.tsx
@@ -2,18 +2,18 @@
import { Suspense } from 'react';
-import BlockDoneModal from '../../components/BlockDoneModal.client';
-import ReportDoneModal from '../../components/ReportDoneModal.client';
-import WarningModal from '../../components/WarningModal.client';
+import BlockDoneModal from '../../../components/BlockDoneModal';
+import ReportDoneModal from '../../../components/ReportDoneModal';
+import WarningModal from '../../../components/WarningModal';
import { useDeleteGroupMember, useGetGroupDetail } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
import { IconButton } from '@/components/Button';
import { Header } from '@/components/Header';
import { Icon } from '@/components/Icon';
-import MoreBottomSheet from '@/components/Modal/MoreBottomSheet.client';
+import MoreBottomSheet from '@/components/Modal/MoreBottomSheet';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { useNumberParams } from '@/hooks/useNumberParams';
import { useBlockStore } from '@/store/useBlockStore';
@@ -59,7 +59,7 @@ function ManageButtonAction({ groupId }: ActionProps) {
return (
isCaptain && (
- push(`/grouping/${groupId}/manage`)}>
+ push(`/grouping/detail/${groupId}/manage`)}>
)
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/TopSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/TopSection.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/TopSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/TopSection.tsx
index 0a526d4e4..ab53789cf 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/TopSection.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/TopSection.tsx
@@ -7,7 +7,7 @@ import { IconButton } from '@/components/Button';
import { Icon } from '@/components/Icon';
import { ImageModal } from '@/components/Modal';
import { Spacing } from '@/components/Spacing';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { useNumberParams } from '@/hooks/useNumberParams';
import { useShowMore } from '@/hooks/useShowMore';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/ArticleSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/ArticleSection.tsx
similarity index 97%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/ArticleSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/ArticleSection.tsx
index 3fdc7d076..845b0e161 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/ArticleSection.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/ArticleSection.tsx
@@ -2,7 +2,7 @@
import { GroupDetailResponse } from '@/apis/groups';
import { useGetArticles } from '@/apis/groups/queries';
-import ArticleItem from '@/app/[lng]/(main)/grouping/components/ArticleItem.client';
+import ArticleItem from '@/app/[lng]/(main)/grouping/components/ArticleItem';
import { ItemList } from '@/components/List';
import { useNumberParams } from '@/hooks/useNumberParams';
import { useBlockStore } from '@/store/useBlockStore';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/ArticlesContent.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/ArticlesContent.tsx
similarity index 87%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/ArticlesContent.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/ArticlesContent.tsx
index 7bc4b058c..864a4cdd9 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/ArticlesContent.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/ArticlesContent.tsx
@@ -1,7 +1,7 @@
import { usePathname } from 'next/navigation';
-import ArticleSection from './ArticleSection.client';
-import NoticeSection from './NoticeSection.client';
+import ArticleSection from './ArticleSection';
+import NoticeSection from './NoticeSection';
import { useGetGroupDetail } from '@/apis/groups';
import { FloatAddButton } from '@/components/Button';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/NoticeItem.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/NoticeItem.tsx
similarity index 93%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/NoticeItem.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/NoticeItem.tsx
index 8da21a64b..c564b74df 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/NoticeItem.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/NoticeItem.tsx
@@ -1,10 +1,11 @@
-import WarningModal from '../../../components/WarningModal.client';
+import WarningModal from '../../../../components/WarningModal';
+
import { type Notice, useDeleteArticle } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
import { Icon } from '@/components/Icon';
import { Flex } from '@/components/Layout';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
interface NoticeItemProps {
notice: Notice;
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/NoticeSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/NoticeSection.tsx
similarity index 97%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/NoticeSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/NoticeSection.tsx
index 4cfc78689..088d0899c 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/articles/NoticeSection.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/articles/NoticeSection.tsx
@@ -1,6 +1,6 @@
'use client';
-import NoticeItem from './NoticeItem.client';
+import NoticeItem from './NoticeItem';
import { GroupDetailResponse, useGetNotices } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/DetailContent.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/DetailContent.tsx
similarity index 87%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/DetailContent.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/DetailContent.tsx
index ba90ae475..d6a50de75 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/DetailContent.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/DetailContent.tsx
@@ -1,9 +1,9 @@
'use client';
import { usePathname } from 'next/navigation';
-import LocationSection from './LocationSection.client';
-import MemberSection from './MemberSection.client';
-import TimeSection from './TimeSection.client';
+import LocationSection from './LocationSection';
+import MemberSection from './MemberSection';
+import TimeSection from './TimeSection';
import { useGetGroupDetail } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/LocationSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/LocationSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/LocationSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/LocationSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/MemberSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/MemberSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/MemberSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/MemberSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/TimeSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/TimeSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/components/detail/TimeSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/components/detail/TimeSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ApplyCard.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ApplyCard.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ApplyCard.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ApplyCard.tsx
index 0e13a3f40..8e4a4055a 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ApplyCard.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ApplyCard.tsx
@@ -11,7 +11,7 @@ import { Flex } from '@/components/Layout';
import { Spacing } from '@/components/Spacing';
import { TextField } from '@/components/TextField';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
interface ApplyCardProps {
apply: Apply;
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ManageDetail.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ManageDetail.tsx
similarity index 88%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ManageDetail.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ManageDetail.tsx
index c46b0bf83..58db33d3f 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ManageDetail.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ManageDetail.tsx
@@ -1,9 +1,9 @@
'use client';
+import dynamic from 'next/dynamic';
import { useState } from 'react';
-import Glider from 'react-glider';
-import ApplyCard from './ApplyCard.client';
+import ApplyCard from './ApplyCard';
import { useGetApplies } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
@@ -12,7 +12,14 @@ import { Flex } from '@/components/Layout';
import { Spacing } from '@/components/Spacing';
import { useNumberParams } from '@/hooks/useNumberParams';
-import 'glider-js/glider.min.css';
+const Glider = dynamic(
+ () =>
+ import('react-glider').then((mod) => {
+ require('glider-js/glider.min.css');
+ return mod;
+ }),
+ { ssr: false }
+);
export default function ManageDetail() {
const { t } = useTranslation('groupDetail');
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ManageHeader.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ManageHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ManageHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ManageHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ManageModal.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ManageModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/components/ManageModal.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/components/ManageModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/page.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/page.tsx
similarity index 63%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/page.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/page.tsx
index a5f31d05c..8f3ce7f6e 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/manage/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/manage/page.tsx
@@ -1,8 +1,10 @@
-import ManageDetail from './components/ManageDetail.client';
-import ManageHeader from './components/ManageHeader.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import ManageDetail from './components/ManageDetail';
+import ManageHeader from './components/ManageHeader';
import { Keys, getApplies } from '@/apis/groups';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
interface GroupingManagePageProps {
@@ -17,11 +19,11 @@ export default function GroupingManagePage({ params }: GroupingManagePageProps)
return (
<>
-
+
getApplies(groupId)} queryKey={Keys.getApplies(groupId)}>
-
+
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/members/components/MemberList.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/members/components/MemberList.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/members/components/MemberList.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/members/components/MemberList.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/members/components/MembersHeader.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/members/components/MembersHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/members/components/MembersHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/members/components/MembersHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/members/page.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/members/page.tsx
similarity index 65%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/members/page.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/members/page.tsx
index 2cae274c6..bff1d87d8 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/members/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/members/page.tsx
@@ -1,7 +1,10 @@
-import MemeberList from './components/MemberList.client';
-import MembersHeader from './components/MembersHeader.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import MemeberList from './components/MemberList';
+import MembersHeader from './components/MembersHeader';
+
import { Keys, getGroupMembers } from '@/apis/groups';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
interface GroupingMembersPageProps {
@@ -16,14 +19,14 @@ export default function GroupingMembersPage({ params }: GroupingMembersPageProps
return (
<>
-
+
getGroupMembers(groupId)}
queryKey={Keys.getGroupMembers(groupId)}
>
-
+
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/page.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/page.tsx
similarity index 72%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/page.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/page.tsx
index 511cf8a50..63f916577 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/page.tsx
@@ -1,8 +1,10 @@
-import GroupDetailPage from './components/GroupDetail.client';
-import GroupDetailHeader from './components/GroupDetailHeader.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import GroupDetailPage from './components/GroupDetail';
+import GroupDetailHeader from './components/GroupDetailHeader';
import { Keys, getGroupDetail, getGroupMembers, getNotices } from '@/apis/groups';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
interface GroupingDetailPageProps {
@@ -17,7 +19,7 @@ export default function GroupingDetailPage({ params }: GroupingDetailPageProps)
return (
<>
-
+
getGroupDetail(groupId),
@@ -32,7 +34,7 @@ export default function GroupingDetailPage({ params }: GroupingDetailPageProps)
>
-
+
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/ImageSection.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/ImageSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/ImageSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/ImageSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/InputForm.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/InputForm.tsx
similarity index 93%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/InputForm.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/InputForm.tsx
index 9a7b9dcaa..3f38b3e72 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/InputForm.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/InputForm.tsx
@@ -2,7 +2,7 @@
import { useForm } from 'react-hook-form';
-import ImageSection from './ImageSection.client';
+import ImageSection from './ImageSection';
import WriteModal from './WriteModal';
import type { WriteFormValues } from '../type';
@@ -12,10 +12,10 @@ import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
import { CircleCheckbox } from '@/components/Checkbox';
import { Flex } from '@/components/Layout';
-import LayerLoading from '@/components/Loading/LayerLoading.client';
+import LayerLoading from '@/components/Loading/LayerLoading';
import { Spacing } from '@/components/Spacing';
import { TextFieldController } from '@/components/TextField';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { useNumberParams } from '@/hooks/useNumberParams';
export default function InputForm() {
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/WriteHeader.client.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/WriteHeader.tsx
similarity index 95%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/WriteHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/WriteHeader.tsx
index 22a508ac1..377430597 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/WriteHeader.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/WriteHeader.tsx
@@ -1,13 +1,14 @@
'use client';
import WriteModal from './WriteModal';
+
import { useTranslation } from '@/app/i18n/client';
import { IconButton } from '@/components/Button';
import { Header } from '@/components/Header';
import { Icon } from '@/components/Icon';
import { Flex } from '@/components/Layout';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
export default function WriteHeader() {
const { t } = useTranslation('groupDetail');
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/WriteModal.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/WriteModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/components/WriteModal.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/components/WriteModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/page.tsx b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/page.tsx
similarity index 66%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/page.tsx
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/page.tsx
index 6d266e78e..52c1761a6 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/page.tsx
@@ -1,7 +1,10 @@
-import InputForm from './components/InputForm.client';
-import WriteHeader from './components/WriteHeader.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import InputForm from './components/InputForm';
+import WriteHeader from './components/WriteHeader';
+
import { Keys, getGroupDetail } from '@/apis/groups';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
interface WritePageProps {
@@ -16,14 +19,14 @@ export default function WritePage({ params }: WritePageProps) {
return (
-
+
getGroupDetail(groupId)}
queryKey={Keys.getGroupDetail(groupId)}
>
-
+
);
}
diff --git a/packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/type.ts b/packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/type.ts
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/grouping/[groupId]/write/type.ts
rename to packages/web/src/app/[lng]/(main)/grouping/detail/[groupId]/write/type.ts
diff --git a/packages/web/src/app/[lng]/(main)/grouping/hooks/useMoreSheet.tsx b/packages/web/src/app/[lng]/(main)/grouping/hooks/useMoreSheet.tsx
index 87c8fcd90..113e680d5 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/hooks/useMoreSheet.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/hooks/useMoreSheet.tsx
@@ -1,12 +1,13 @@
'use client';
-import BlockDoneModal from '../components/BlockDoneModal.client';
-import ReportDoneModal from '../components/ReportDoneModal.client';
-import WarningModal from '../components/WarningModal.client';
+import BlockDoneModal from '../components/BlockDoneModal';
+import ReportDoneModal from '../components/ReportDoneModal';
+import WarningModal from '../components/WarningModal';
+
import { useDeleteArticle, useDeleteComment } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
-import MoreBottomSheet from '@/components/Modal/MoreBottomSheet.client';
+import MoreBottomSheet from '@/components/Modal/MoreBottomSheet';
import useAppRouter from '@/hooks/useAppRouter';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { useBlockStore } from '@/store/useBlockStore';
type CommentId = T extends 'comment' ? { commentId: number } : { commentId?: never };
diff --git a/packages/web/src/app/[lng]/(main)/grouping/loading.tsx b/packages/web/src/app/[lng]/(main)/grouping/loading.tsx
new file mode 100644
index 000000000..eab0965c3
--- /dev/null
+++ b/packages/web/src/app/[lng]/(main)/grouping/loading.tsx
@@ -0,0 +1,19 @@
+import { Flex } from '@/components/Layout';
+import cn from '@/utils/cn';
+
+interface LoadingProps {
+ className?: string;
+}
+
+const loadingIconStyle = 'h-10 w-10 rounded-full bg-primary';
+
+export default function Loading({ className }: LoadingProps) {
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/packages/web/src/app/[lng]/(main)/grouping/page.tsx b/packages/web/src/app/[lng]/(main)/grouping/page.tsx
index fe00ca22c..754b78b7b 100644
--- a/packages/web/src/app/[lng]/(main)/grouping/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/grouping/page.tsx
@@ -1,10 +1,11 @@
-import CreateGroupButton from './components/CreateGroupButton.client';
-import GroupingCardList from './components/GroupingCardList.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import CreateGroupButton from './components/CreateGroupButton';
+import GroupingCardList from './components/GroupingCardList';
import GroupingHeader from './components/GroupingHeader';
import { Keys, getGroups } from '@/apis/groups';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
-import { Footer } from '@/components/Footer';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
import { Spacing } from '@/components/Spacing';
@@ -18,14 +19,13 @@ export default function GroupingPage({ params: { lng } }: GroupingPageProps) {
return (
<>
-
+
getGroups(0)} queryKey={Keys.getGroups()} isInfiniteQuery>
-
+
-
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/layout.tsx b/packages/web/src/app/[lng]/(main)/layout.tsx
new file mode 100644
index 000000000..adb22b659
--- /dev/null
+++ b/packages/web/src/app/[lng]/(main)/layout.tsx
@@ -0,0 +1,11 @@
+import { Footer } from '@/components/Footer';
+import { StrictPropsWithChildren } from '@/types';
+
+export default function MainLayout({ children }: StrictPropsWithChildren) {
+ return (
+ <>
+ {children}
+
+ >
+ );
+}
diff --git a/packages/web/src/app/[lng]/(main)/loading.tsx b/packages/web/src/app/[lng]/(main)/loading.tsx
new file mode 100644
index 000000000..eab0965c3
--- /dev/null
+++ b/packages/web/src/app/[lng]/(main)/loading.tsx
@@ -0,0 +1,19 @@
+import { Flex } from '@/components/Layout';
+import cn from '@/utils/cn';
+
+interface LoadingProps {
+ className?: string;
+}
+
+const loadingIconStyle = 'h-10 w-10 rounded-full bg-primary';
+
+export default function Loading({ className }: LoadingProps) {
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/packages/web/src/app/[lng]/(main)/meeting/components/NoMeeting.tsx b/packages/web/src/app/[lng]/(main)/meeting/components/NoMeeting.tsx
deleted file mode 100644
index f686221ac..000000000
--- a/packages/web/src/app/[lng]/(main)/meeting/components/NoMeeting.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { Icon } from '@/components/Icon';
-import { Flex } from '@/components/Layout';
-import { Spacing } from '@/components/Spacing';
-
-interface NoMeetingProps {
- message: string;
-}
-export default function NoMeeting({ message }: NoMeetingProps) {
- return (
-
-
-
- {message}
-
- );
-}
diff --git a/packages/web/src/app/[lng]/(main)/meeting/loading.tsx b/packages/web/src/app/[lng]/(main)/meeting/loading.tsx
new file mode 100644
index 000000000..eab0965c3
--- /dev/null
+++ b/packages/web/src/app/[lng]/(main)/meeting/loading.tsx
@@ -0,0 +1,19 @@
+import { Flex } from '@/components/Layout';
+import cn from '@/utils/cn';
+
+interface LoadingProps {
+ className?: string;
+}
+
+const loadingIconStyle = 'h-10 w-10 rounded-full bg-primary';
+
+export default function Loading({ className }: LoadingProps) {
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/packages/web/src/app/[lng]/(main)/meeting/participate/components/ContentSection.client.tsx b/packages/web/src/app/[lng]/(main)/meeting/participate/components/ContentSection.tsx
similarity index 79%
rename from packages/web/src/app/[lng]/(main)/meeting/participate/components/ContentSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/meeting/participate/components/ContentSection.tsx
index b5db0ce04..95dd4e981 100644
--- a/packages/web/src/app/[lng]/(main)/meeting/participate/components/ContentSection.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/meeting/participate/components/ContentSection.tsx
@@ -1,16 +1,15 @@
'use client';
-import dynamic from 'next/dynamic';
import { Suspense } from 'react';
+import FeedbackContent from './FeedbackContent';
+import ParticipatingContent from './ParticipatingContent';
+import WaitingContent from './WaitingContent';
+
import { useTranslation } from '@/app/i18n/client';
import { Loading } from '@/components/Loading';
import { Tabs } from '@/components/Tabs';
-const ParticipatingContent = dynamic(() => import('./ParticipatingContent.client'));
-const WaitingContent = dynamic(() => import('./WaitingContent.client'));
-const FeedbackContent = dynamic(() => import('./FeedbackContent.client'));
-
export default function ContentSection() {
const { t } = useTranslation('meeting');
diff --git a/packages/web/src/app/[lng]/(main)/meeting/participate/components/FeedbackContent.client.tsx b/packages/web/src/app/[lng]/(main)/meeting/participate/components/FeedbackContent.tsx
similarity index 85%
rename from packages/web/src/app/[lng]/(main)/meeting/participate/components/FeedbackContent.client.tsx
rename to packages/web/src/app/[lng]/(main)/meeting/participate/components/FeedbackContent.tsx
index 85c570b62..fbcebef60 100644
--- a/packages/web/src/app/[lng]/(main)/meeting/participate/components/FeedbackContent.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/meeting/participate/components/FeedbackContent.tsx
@@ -1,15 +1,15 @@
'use client';
-import FeedbackModal from './FeedbackModal.client';
+import FeedbackModal from './FeedbackModal';
import SubtitleSection from './SubtitleSection';
-import NoMeeting from '../../components/NoMeeting';
import { useGetMeetingNotEstimated } from '@/apis/meeting';
import { useTranslation } from '@/app/i18n/client';
import { Button } from '@/components/Button';
import { GroupingCard } from '@/components/Card';
+import { Empty } from '@/components/Empty';
import { Spacing } from '@/components/Spacing';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
export default function FeedbackContent() {
const { t } = useTranslation('meeting');
@@ -24,7 +24,7 @@ export default function FeedbackContent() {
{meetingNotEstimatedData.length === 0 && (
-
+
)}
{meetingNotEstimatedData.map((groupingData) => (
- {meetingParticipatingData.length === 0 && (
-
- )}
+ {meetingParticipatingData.length === 0 && }
{meetingParticipatingData.map((groupingData) => (
- {meetingHostingData.length === 0 && }
+ {meetingHostingData.length === 0 && }
{meetingHostingData.map((groupingData) => (
- {meetingWaitingData.length === 0 && }
+ {meetingWaitingData.length === 0 && }
{meetingWaitingData.map((groupingData) => (
))}
@@ -37,7 +37,7 @@ export default function WaitingContent() {
- {meetingRejectedData.length === 0 && }
+ {meetingRejectedData.length === 0 && }
{meetingRejectedData.map((groupingData) => (
void;
diff --git a/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step2/Step2.tsx b/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step2/Step2.tsx
index 4fa0b98d1..d58b7f2d4 100644
--- a/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step2/Step2.tsx
+++ b/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step2/Step2.tsx
@@ -1,6 +1,6 @@
import { convertShowMember } from '../../../util';
-import { useFeedbackContext } from '../../components/FeedbackProvider.client';
-import Membercard from '../../components/Membercard.client';
+import { useFeedbackContext } from '../../components/FeedbackProvider';
+import Membercard from '../../components/Membercard';
import TitleSection from '../../components/TitleSection';
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
diff --git a/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/FeedbackCompleteModal.client.tsx b/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/FeedbackCompleteModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/FeedbackCompleteModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/FeedbackCompleteModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/Step3.tsx b/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/Step3.tsx
index 3f90369f6..0ec03689e 100644
--- a/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/Step3.tsx
+++ b/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/funnels/step3/Step3.tsx
@@ -1,7 +1,8 @@
import { PRAISE_VALUE_MAP } from '../../../constants';
-import { FeedbackRequestType, useFeedbackContext } from '../../components/FeedbackProvider.client';
-import Membercard from '../../components/Membercard.client';
+import { FeedbackRequestType, useFeedbackContext } from '../../components/FeedbackProvider';
+import Membercard from '../../components/Membercard';
import TitleSection from '../../components/TitleSection';
+
import { type EstimateResponse, usePostEstimate } from '@/apis/groups';
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
diff --git a/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/page.tsx b/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/page.tsx
index f25a6f200..c402c67b7 100644
--- a/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/meeting/participate/feedback/[groupId]/page.tsx
@@ -1,5 +1,6 @@
-import FeedbackFunnel from './components/FeedbackFunnel.client';
-import FeedbackProvider from './components/FeedbackProvider.client';
+import FeedbackFunnel from './components/FeedbackFunnel';
+import FeedbackProvider from './components/FeedbackProvider';
+
import { Keys, getEstimate } from '@/apis/groups';
import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
diff --git a/packages/web/src/app/[lng]/(main)/meeting/participate/page.tsx b/packages/web/src/app/[lng]/(main)/meeting/participate/page.tsx
index 7bdf94c88..56ed03ce2 100644
--- a/packages/web/src/app/[lng]/(main)/meeting/participate/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/meeting/participate/page.tsx
@@ -1,4 +1,6 @@
-import ContentSection from './components/ContentSection.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import ContentSection from './components/ContentSection';
import MeetingParticipateHeader from './components/MeetingParticipateHeader';
import {
@@ -9,8 +11,7 @@ import {
getMeetingRejected,
getMeetingWaiting,
} from '@/apis/meeting';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
-import { Footer } from '@/components/Footer';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
interface MeetingPageProps {
@@ -23,7 +24,7 @@ export default function MeetingPage({ params: { lng } }: MeetingPageProps) {
return (
<>
-
+
-
-
+
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/meeting/scrap/components/ContentSection.tsx b/packages/web/src/app/[lng]/(main)/meeting/scrap/components/ContentSection.tsx
index e0d5fbd30..0ed8f7b92 100644
--- a/packages/web/src/app/[lng]/(main)/meeting/scrap/components/ContentSection.tsx
+++ b/packages/web/src/app/[lng]/(main)/meeting/scrap/components/ContentSection.tsx
@@ -1,15 +1,13 @@
'use client';
import { useGetMeetingScrap } from '@/apis/meeting';
+import { useTranslation } from '@/app/i18n/client';
import { GroupingCard } from '@/components/Card';
import { Empty } from '@/components/Empty';
import { ItemList } from '@/components/List';
-interface ContentSectionProps {
- lng: string;
-}
-
-export default function ContentSection({ lng }: ContentSectionProps) {
+export default function ContentSection() {
+ const { t } = useTranslation('meeting');
const {
data: { contents },
} = useGetMeetingScrap();
@@ -18,7 +16,7 @@ export default function ContentSection({ lng }: ContentSectionProps) {
}
- renderEmpty={() => }
+ renderEmpty={() => }
/>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/meeting/scrap/page.tsx b/packages/web/src/app/[lng]/(main)/meeting/scrap/page.tsx
index 80c32ecb4..361add452 100644
--- a/packages/web/src/app/[lng]/(main)/meeting/scrap/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/meeting/scrap/page.tsx
@@ -1,9 +1,10 @@
+import { ErrorBoundary } from 'react-error-boundary';
+
import ContentSection from './components/ContentSection';
import MeetingScrapHeader from './components/MeetingScrapHeader';
import { Keys, getMeetingScrap } from '@/apis/meeting';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
-import { Footer } from '@/components/Footer';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
interface MeetingPageProps {
@@ -16,12 +17,11 @@ export default function MeetingPage({ params: { lng } }: MeetingPageProps) {
return (
<>
-
+
-
+
-
-
+
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/profile/[userId]/components/ProfileByIdDetail.client.tsx b/packages/web/src/app/[lng]/(main)/profile/[userId]/components/ProfileByIdDetail.tsx
similarity index 97%
rename from packages/web/src/app/[lng]/(main)/profile/[userId]/components/ProfileByIdDetail.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/[userId]/components/ProfileByIdDetail.tsx
index b27fea253..c7e6e4a32 100644
--- a/packages/web/src/app/[lng]/(main)/profile/[userId]/components/ProfileByIdDetail.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/[userId]/components/ProfileByIdDetail.tsx
@@ -1,5 +1,5 @@
'use client';
-import ProfileDetail from '../../components/ProfileDetailSection.client';
+import ProfileDetail from '../../components/ProfileDetailSection';
import { useGetProfileById } from '@/apis/profile';
import { useNumberParams } from '@/hooks/useNumberParams';
diff --git a/packages/web/src/app/[lng]/(main)/profile/[userId]/page.tsx b/packages/web/src/app/[lng]/(main)/profile/[userId]/page.tsx
index 6eedaa32c..bb2e09b98 100644
--- a/packages/web/src/app/[lng]/(main)/profile/[userId]/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/[userId]/page.tsx
@@ -1,8 +1,10 @@
-import ProfileByIdDetail from './components/ProfileByIdDetail.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import ProfileByIdDetail from './components/ProfileByIdDetail';
import ProfileByIdHeader from './components/ProfileByIdHeader';
import { Keys, getProfileById } from '@/apis/profile';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
interface PageProps {
@@ -15,7 +17,7 @@ export default function page({ params }: PageProps) {
const userId = Number(params.userId);
return (
-
+
getProfileById(userId)}
queryKey={Keys.getProfileById(userId)}
@@ -23,6 +25,6 @@ export default function page({ params }: PageProps) {
-
+
);
}
diff --git a/packages/web/src/app/[lng]/(main)/profile/components/ProfileDetail.client.tsx b/packages/web/src/app/[lng]/(main)/profile/components/ProfileDetail.tsx
similarity index 76%
rename from packages/web/src/app/[lng]/(main)/profile/components/ProfileDetail.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/components/ProfileDetail.tsx
index 6f6622b26..44de1c61c 100644
--- a/packages/web/src/app/[lng]/(main)/profile/components/ProfileDetail.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/components/ProfileDetail.tsx
@@ -1,6 +1,5 @@
'use client';
-
-import ProfileDetailSection from './ProfileDetailSection.client';
+import ProfileDetailSection from './ProfileDetailSection';
import { useGetProfile } from '@/apis/profile';
diff --git a/packages/web/src/app/[lng]/(main)/profile/components/ProfileDetailSection.client.tsx b/packages/web/src/app/[lng]/(main)/profile/components/ProfileDetailSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/components/ProfileDetailSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/components/ProfileDetailSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/components/ProfileHeader.client.tsx b/packages/web/src/app/[lng]/(main)/profile/components/ProfileHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/components/ProfileHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/components/ProfileHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/loading.tsx b/packages/web/src/app/[lng]/(main)/profile/loading.tsx
new file mode 100644
index 000000000..eab0965c3
--- /dev/null
+++ b/packages/web/src/app/[lng]/(main)/profile/loading.tsx
@@ -0,0 +1,19 @@
+import { Flex } from '@/components/Layout';
+import cn from '@/utils/cn';
+
+interface LoadingProps {
+ className?: string;
+}
+
+const loadingIconStyle = 'h-10 w-10 rounded-full bg-primary';
+
+export default function Loading({ className }: LoadingProps) {
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDeleteModal.client.tsx b/packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDeleteModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDeleteModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDeleteModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDetail.client.tsx b/packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDetail.tsx
similarity index 87%
rename from packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDetail.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDetail.tsx
index 062120138..9b1c360cc 100644
--- a/packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDetail.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/mates/components/MatesDetail.tsx
@@ -1,15 +1,16 @@
'use client';
-import MoreBottomSheet from './MoreBottomSheet.client';
+import MoreBottomSheet from './MoreBottomSheet';
import { formatRelativeDate } from '../util';
+
import { type Mate, useGetMates } from '@/apis/profile';
-import NoMeeting from '@/app/[lng]/(main)/meeting/components/NoMeeting';
import { useTranslation } from '@/app/i18n/client';
import { Avatar } from '@/components/Avatar';
+import { Empty } from '@/components/Empty';
import { Icon } from '@/components/Icon';
import { Flex } from '@/components/Layout';
import { Spacing } from '@/components/Spacing';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
export default function MatesDetail() {
const { t } = useTranslation('meeting');
@@ -19,7 +20,7 @@ export default function MatesDetail() {
return (
- {matesData.length === 0 && }
+ {matesData.length === 0 && }
{matesData.map((mateData) => (
))}
diff --git a/packages/web/src/app/[lng]/(main)/profile/mates/components/MatesHeader.client.tsx b/packages/web/src/app/[lng]/(main)/profile/mates/components/MatesHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/mates/components/MatesHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/mates/components/MatesHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/mates/components/MoreBottomSheet.client.tsx b/packages/web/src/app/[lng]/(main)/profile/mates/components/MoreBottomSheet.tsx
similarity index 89%
rename from packages/web/src/app/[lng]/(main)/profile/mates/components/MoreBottomSheet.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/mates/components/MoreBottomSheet.tsx
index 328f3e43f..725239cb4 100644
--- a/packages/web/src/app/[lng]/(main)/profile/mates/components/MoreBottomSheet.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/mates/components/MoreBottomSheet.tsx
@@ -1,8 +1,8 @@
-import MatesDeleteModal from './MatesDeleteModal.client';
+import MatesDeleteModal from './MatesDeleteModal';
import { Mate } from '@/apis/profile';
import { BottomSheet } from '@/components/Modal';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
interface MoreBottomSheetProps {
mateData: Mate;
diff --git a/packages/web/src/app/[lng]/(main)/profile/mates/page.tsx b/packages/web/src/app/[lng]/(main)/profile/mates/page.tsx
index caa50b044..b1f6afa41 100644
--- a/packages/web/src/app/[lng]/(main)/profile/mates/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/mates/page.tsx
@@ -1,18 +1,21 @@
-import ProfileMatesDetail from './components/MatesDetail.client';
-import MatesHeader from './components/MatesHeader.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import ProfileMatesDetail from './components/MatesDetail';
+import MatesHeader from './components/MatesHeader';
+
import { Keys, getMates } from '@/apis/profile';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
export default function MatesPage() {
return (
<>
-
+
-
+
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/profile/page.tsx b/packages/web/src/app/[lng]/(main)/profile/page.tsx
index 7544f0d7e..515a4a417 100644
--- a/packages/web/src/app/[lng]/(main)/profile/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/page.tsx
@@ -1,9 +1,10 @@
-import ProfileDetail from './components/ProfileDetail.client';
-import ProfileHeader from './components/ProfileHeader.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import ProfileDetail from './components/ProfileDetail';
+import ProfileHeader from './components/ProfileHeader';
import { Keys, getProfile } from '@/apis/profile';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
-import { Footer } from '@/components/Footer';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
interface ProfilePageProps {
@@ -16,12 +17,11 @@ export default function Profile({ params: { lng } }: ProfilePageProps) {
return (
<>
-
+
-
-
+
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/profile/praise/components/PraiseHeader.client.tsx b/packages/web/src/app/[lng]/(main)/profile/praise/components/PraiseHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/praise/components/PraiseHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/praise/components/PraiseHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/praise/components/ProfilePraiseDetail.client.tsx b/packages/web/src/app/[lng]/(main)/profile/praise/components/ProfilePraiseDetail.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/praise/components/ProfilePraiseDetail.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/praise/components/ProfilePraiseDetail.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/praise/page.tsx b/packages/web/src/app/[lng]/(main)/profile/praise/page.tsx
index 516071b1e..72e92e052 100644
--- a/packages/web/src/app/[lng]/(main)/profile/praise/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/praise/page.tsx
@@ -1,18 +1,21 @@
-import PraiseHeader from './components/PraiseHeader.client';
-import ProfilePraiseDetail from './components/ProfilePraiseDetail.client';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import PraiseHeader from './components/PraiseHeader';
+import ProfilePraiseDetail from './components/ProfilePraiseDetail';
+
import { Keys, getPraises } from '@/apis/profile';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorFallback } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
export default function PraisePage() {
return (
<>
-
+
-
+
>
);
}
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/components/LinkSection.server.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/components/LinkSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/setting/components/LinkSection.server.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/components/LinkSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/components/ProfileSection.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/components/ProfileSection.tsx
similarity index 99%
rename from packages/web/src/app/[lng]/(main)/profile/setting/components/ProfileSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/components/ProfileSection.tsx
index e75c999b9..d398da8c2 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/components/ProfileSection.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/components/ProfileSection.tsx
@@ -1,5 +1,4 @@
'use client';
-
import { useGetProfile } from '@/apis/profile';
import { Avatar } from '@/components/Avatar';
import { Icon } from '@/components/Icon';
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/components/SettingHeader.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/components/SettingHeader.tsx
similarity index 99%
rename from packages/web/src/app/[lng]/(main)/profile/setting/components/SettingHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/components/SettingHeader.tsx
index 7c98f9eae..53577d876 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/components/SettingHeader.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/components/SettingHeader.tsx
@@ -1,4 +1,5 @@
'use client';
+
import { useTranslation } from '@/app/i18n/client';
import { IconButton } from '@/components/Button';
import { Header } from '@/components/Header';
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteCompleteModal.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteCompleteModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteCompleteModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteCompleteModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteModal.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteModal.tsx
similarity index 91%
rename from packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteModal.tsx
index 889ccc0a4..0466d6026 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteModal.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteModal.tsx
@@ -1,11 +1,12 @@
-import DeleteCompleteModal from './DeleteCompleteModal.client';
+import DeleteCompleteModal from './DeleteCompleteModal';
+
import { usePatchSignOut } from '@/apis/profile';
import { useTranslation } from '@/app/i18n/client';
import { Icon } from '@/components/Icon';
import { Modal } from '@/components/Modal';
import { Spacing } from '@/components/Spacing';
import useLogout from '@/hooks/token/useLogout';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
interface DeleteModalProps {
onCancelClick: () => void;
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteProvider.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteProvider.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteProvider.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteProvider.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteSection.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteSection.tsx
index bf56fc8e6..9011dedb4 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteSection.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/DeleteSection.tsx
@@ -1,6 +1,6 @@
'use client';
import DeleteHeader from './DeleteHeader';
-import DeleteProvider from './DeleteProvider.client';
+import DeleteProvider from './DeleteProvider';
import Step1 from './Step1';
import Step2 from './Step2';
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/Step1.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/Step1.tsx
index 83a7c0ccd..657bda57c 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/Step1.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/Step1.tsx
@@ -1,4 +1,4 @@
-import { useDeleteContext } from './DeleteProvider.client';
+import { useDeleteContext } from './DeleteProvider';
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/Step2.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/Step2.tsx
index e458a09d3..4a2819722 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/Step2.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/delete/components/Step2.tsx
@@ -1,12 +1,12 @@
-import DeleteModal from './DeleteModal.client';
-import { useDeleteContext } from './DeleteProvider.client';
+import DeleteModal from './DeleteModal';
+import { useDeleteContext } from './DeleteProvider';
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
import { CircleCheckbox } from '@/components/Checkbox';
import { Flex } from '@/components/Layout';
import { Spacing } from '@/components/Spacing';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
const infoList = [
'noDesiredGroups',
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/EditProvider.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/EditProvider.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/setting/edit/components/EditProvider.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/edit/components/EditProvider.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/ProfileEdit.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/ProfileEdit.tsx
similarity index 77%
rename from packages/web/src/app/[lng]/(main)/profile/setting/edit/components/ProfileEdit.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/edit/components/ProfileEdit.tsx
index 6f1ace816..e952fa6f9 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/ProfileEdit.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/ProfileEdit.tsx
@@ -1,11 +1,13 @@
'use client';
-import EditProvider from './EditProvider.client';
-import Step1 from './step1/Step1.client';
-import Step2 from './step2/Step2.client';
-import { useGetProfile } from '@/apis/profile';
-import { ModalProvider } from '@/hooks/useModal';
import { useState } from 'react';
+import EditProvider from './EditProvider';
+import Step1 from './step1/Step1';
+import Step2 from './step2/Step2';
+
+import { useGetProfile } from '@/apis/profile';
+import ModalProvider from '@/hooks/useModal/ModalProvider';
+
export default function ProfileEdit() {
const [step, setStep] = useState(1);
const { data: defaultProfileData } = useGetProfile();
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1.tsx
similarity index 73%
rename from packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1.tsx
index f9ec39a6c..aaf8c3cf2 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1.tsx
@@ -1,5 +1,6 @@
-import Step1Header from './Step1Header.client';
-import Step1InputForm from './Step1InputForm.client';
+import Step1Header from './Step1Header';
+import Step1InputForm from './Step1InputForm';
+
import { Spacing } from '@/components/Spacing';
export interface Step1Props {
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1Header.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1Header.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1Header.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1Header.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1InputForm.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1InputForm.tsx
similarity index 96%
rename from packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1InputForm.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1InputForm.tsx
index 101352752..0078cdc68 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1InputForm.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step1/Step1InputForm.tsx
@@ -1,9 +1,9 @@
import { useController } from 'react-hook-form';
import CountryBotoomSheet from './CountryBotoomSheet';
-import { Step1Props } from './Step1.client';
+import { Step1Props } from './Step1';
import { formatBirthDTO } from '../../util';
-import { useEditContext } from '../EditProvider.client';
+import { useEditContext } from '../EditProvider';
import { ProfileRequest, usePatchProfile } from '@/apis/profile';
import { useTranslation } from '@/app/i18n/client';
@@ -17,7 +17,7 @@ import { Tag } from '@/components/Tag';
import { TextField, TextFieldController } from '@/components/TextField';
import { personalityList } from '@/constants/personalityList';
import { useFileUpload } from '@/hooks/useFileUpload';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
interface Step1InputFormProps extends Step1Props {}
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2.tsx
similarity index 92%
rename from packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2.tsx
index 4df424d62..7f39d6d9f 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2.tsx
@@ -1,5 +1,5 @@
import Step2Header from './Step2Header';
-import Step2InputForm from './Step2InputForm.client';
+import Step2InputForm from './Step2InputForm';
import { useTranslation } from '@/app/i18n/client';
import { Spacing } from '@/components/Spacing';
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2InputForm.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2InputForm.tsx
similarity index 96%
rename from packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2InputForm.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2InputForm.tsx
index e01ae4d17..3aa625380 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2InputForm.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step2/Step2InputForm.tsx
@@ -1,10 +1,12 @@
-import { useEditContext } from '../EditProvider.client';
+import { useCallback } from 'react';
+
+import { useEditContext } from '../EditProvider';
+
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
import { Tag } from '@/components/Tag';
import { personalityList } from '@/constants/personalityList';
import { PersonalityType } from '@/types';
-import { useCallback } from 'react';
interface InputFormProps {
onPrevClick: () => void;
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step3/Step3.client.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step3/Step3.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step3/Step3.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/setting/edit/components/step3/Step3.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/edit/page.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/edit/page.tsx
index c5269a5cd..fd63b0a9b 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/edit/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/edit/page.tsx
@@ -1,4 +1,5 @@
-import ProfileEdit from './components/ProfileEdit.client';
+import ProfileEdit from './components/ProfileEdit';
+
import { Keys, getProfile } from '@/apis/profile';
import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
import { HydrationProvider } from '@/components/Provider';
diff --git a/packages/web/src/app/[lng]/(main)/profile/setting/page.tsx b/packages/web/src/app/[lng]/(main)/profile/setting/page.tsx
index 3c22507c8..90a99f8ac 100644
--- a/packages/web/src/app/[lng]/(main)/profile/setting/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/setting/page.tsx
@@ -1,7 +1,10 @@
-import LinkSection from './components/LinkSection.server';
-import ProfileSection from './components/ProfileSection.client';
-import SettingHeader from './components/SettingHeader.client';
-import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
+import { ErrorBoundary } from 'react-error-boundary';
+
+import LinkSection from './components/LinkSection';
+import ProfileSection from './components/ProfileSection';
+import SettingHeader from './components/SettingHeader';
+
+import { ErrorFallback } from '@/components/ErrorBoundary';
interface PageParams {
params: {
@@ -13,9 +16,9 @@ export default function page({ params: { lng } }: PageParams) {
return (
<>
-
+
-
+
>
);
diff --git a/packages/web/src/app/[lng]/(main)/profile/verify/components/CertificateSkipModal.client.tsx b/packages/web/src/app/[lng]/(main)/profile/verify/components/CertificateSkipModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/verify/components/CertificateSkipModal.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/verify/components/CertificateSkipModal.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/verify/components/EmailForm.client.tsx b/packages/web/src/app/[lng]/(main)/profile/verify/components/EmailForm.tsx
similarity index 93%
rename from packages/web/src/app/[lng]/(main)/profile/verify/components/EmailForm.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/verify/components/EmailForm.tsx
index 404d9a1ef..742b1876c 100644
--- a/packages/web/src/app/[lng]/(main)/profile/verify/components/EmailForm.client.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/verify/components/EmailForm.tsx
@@ -1,15 +1,17 @@
'use client';
-import VerifyBottomSheet from './VerifyBottomSheet.client';
+import { memo } from 'react';
+import { useForm } from 'react-hook-form';
+
+import VerifyBottomSheet from './VerifyBottomSheet';
+
+import type { VerifyType } from '../type';
+
import { useEmailMutation } from '@/apis/auth';
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
import { TextFieldController } from '@/components/TextField';
import { regexr } from '@/constants/regexr';
-import { useModal } from '@/hooks/useModal';
-import { memo } from 'react';
-import { useForm } from 'react-hook-form';
-
-import type { VerifyType } from '../type';
+import useModal from '@/hooks/useModal/useModal';
const defaultValues = {
email: '',
diff --git a/packages/web/src/app/[lng]/(main)/profile/verify/components/NoticeSection.client.tsx b/packages/web/src/app/[lng]/(main)/profile/verify/components/NoticeSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/verify/components/NoticeSection.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/verify/components/NoticeSection.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/verify/components/VerifyBottomSheet.client.tsx b/packages/web/src/app/[lng]/(main)/profile/verify/components/VerifyBottomSheet.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/verify/components/VerifyBottomSheet.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/verify/components/VerifyBottomSheet.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/verify/components/VerifyHeader.client.tsx b/packages/web/src/app/[lng]/(main)/profile/verify/components/VerifyHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(main)/profile/verify/components/VerifyHeader.client.tsx
rename to packages/web/src/app/[lng]/(main)/profile/verify/components/VerifyHeader.tsx
diff --git a/packages/web/src/app/[lng]/(main)/profile/verify/page.tsx b/packages/web/src/app/[lng]/(main)/profile/verify/page.tsx
index 18a5dabe8..1faafcb80 100644
--- a/packages/web/src/app/[lng]/(main)/profile/verify/page.tsx
+++ b/packages/web/src/app/[lng]/(main)/profile/verify/page.tsx
@@ -1,7 +1,8 @@
-import EmailForm from './components/EmailForm.client';
-import NoticeSection from './components/NoticeSection.client';
+import EmailForm from './components/EmailForm';
+import NoticeSection from './components/NoticeSection';
import TitleTextMessage from './components/TitleTextMessage';
-import VerifyHeader from './components/VerifyHeader.client';
+import VerifyHeader from './components/VerifyHeader';
+
import { serverTranslation } from '@/app/i18n';
interface PageProps {
diff --git a/packages/web/src/app/[lng]/(sub)/join/components/JoinContentTextMessage.client.tsx b/packages/web/src/app/[lng]/(sub)/join/components/JoinContentTextMessage.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/components/JoinContentTextMessage.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/components/JoinContentTextMessage.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/components/JoinContext.client.tsx b/packages/web/src/app/[lng]/(sub)/join/components/JoinContext.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/components/JoinContext.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/components/JoinContext.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/components/JoinHeader.client.tsx b/packages/web/src/app/[lng]/(sub)/join/components/JoinHeader.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/components/JoinHeader.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/components/JoinHeader.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/components/JoinTitleTextMessage.client.tsx b/packages/web/src/app/[lng]/(sub)/join/components/JoinTitleTextMessage.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/components/JoinTitleTextMessage.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/components/JoinTitleTextMessage.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/JoinFunnel.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/JoinFunnel.tsx
index c2940e4c5..8dfe4a757 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/JoinFunnel.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/JoinFunnel.tsx
@@ -2,12 +2,12 @@
import { createContext, useContext } from 'react';
-import Step1Component from './step1/Step1Component.client';
-import Step2Component from './step2/Step2Component.client';
-import Step3Component from './step3/Step3Component.client';
-import Step4Component from './step4/Step4Component.client';
-import Step5Component from './step5/Step5Component.client';
-import JoinHeader from '../components/JoinHeader.client';
+import Step1Component from './step1/Step1Component';
+import Step2Component from './step2/Step2Component';
+import Step3Component from './step3/Step3Component';
+import Step4Component from './step4/Step4Component';
+import Step5Component from './step5/Step5Component';
+import JoinHeader from '../components/JoinHeader';
import { useFunnel } from '@/hooks/useFunnel';
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/Step1Component.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/Step1Component.tsx
similarity index 76%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step1/Step1Component.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step1/Step1Component.tsx
index daa4d318e..2c65c199f 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/Step1Component.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/Step1Component.tsx
@@ -1,8 +1,9 @@
'use client';
-import FormSection from './components/FormSection.client';
-import NoticeSection from './components/NoticeSection.client';
-import JoinTitleTextMessage from '../../components/JoinTitleTextMessage.client';
+import FormSection from './components/FormSection';
+import NoticeSection from './components/NoticeSection';
+import JoinTitleTextMessage from '../../components/JoinTitleTextMessage';
+
import { useTranslation } from '@/app/i18n/client';
import { Spacing } from '@/components/Spacing';
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/FormSection.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/FormSection.tsx
similarity index 71%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/FormSection.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/FormSection.tsx
index fbcf93ac2..f1b13dbe4 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/FormSection.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/FormSection.tsx
@@ -1,12 +1,14 @@
'use client';
-import NumberForm from './NumberForm.client';
-import NumberVerifyForm from './NumberVerifyForm.client';
-import TimerProvider from '@/components/Provider/TimerProvider.client';
import { useState } from 'react';
+import NumberForm from './NumberForm';
+import NumberVerifyForm from './NumberVerifyForm';
+
import type { StatusType } from '../type';
+import TimerProvider from '@/components/Provider/TimerProvider';
+
export default function InputForm() {
const [inputStatus, setInputStatus] = useState('beforeSend');
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NoticeSection.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NoticeSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NoticeSection.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NoticeSection.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberForm.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberForm.tsx
similarity index 96%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberForm.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberForm.tsx
index 6ba5cb665..349079f3f 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberForm.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberForm.tsx
@@ -1,6 +1,6 @@
import { ElementType, KeyboardEventHandler } from 'react';
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { useJoinContext } from '../../../components/JoinContext';
import { formatNumber, formatNumberBackSpace } from '../util';
import type { SignUpState } from '../../../type';
@@ -14,7 +14,7 @@ import { useTimerContext } from '@/components/Provider';
import { Spacing } from '@/components/Spacing';
import { TextFieldController } from '@/components/TextField';
import { regexr } from '@/constants/regexr';
-import { useToast } from '@/hooks/useModal';
+import useToast from '@/hooks/useModal/useToast';
interface NumberSectionProps {
inputStatus: StatusType;
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberVerifyForm.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberVerifyForm.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberVerifyForm.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberVerifyForm.tsx
index 70f825d72..25850dba4 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberVerifyForm.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step1/components/NumberVerifyForm.tsx
@@ -1,4 +1,4 @@
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { useJoinContext } from '../../../components/JoinContext';
import { useFunnelContext } from '../../JoinFunnel';
import { formatWithoutHyphen } from '../util';
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step2/Step2Component.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step2/Step2Component.tsx
similarity index 86%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step2/Step2Component.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step2/Step2Component.tsx
index 5278a9db1..ebfa6d7a1 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step2/Step2Component.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step2/Step2Component.tsx
@@ -1,13 +1,14 @@
'use client';
-import AgreeBottomSheet from './components/AgreeBottomSheet.client';
+import AgreeBottomSheet from './components/AgreeBottomSheet';
import SchoolInput from './components/SchoolInput';
import SchoolResultList from './components/SchoolResult';
-import JoinTitleTextMessage from '../../components/JoinTitleTextMessage.client';
+import JoinTitleTextMessage from '../../components/JoinTitleTextMessage';
+
import { useTranslation } from '@/app/i18n/client';
import { LocalSuspenseErrorBoundary } from '@/components/ErrorBoundary';
import { useDidMount } from '@/hooks/common/useDidMount';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
export default function Step2Component() {
const { t } = useTranslation('join');
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/AgreeBottomSheet.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/AgreeBottomSheet.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/AgreeBottomSheet.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/AgreeBottomSheet.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SchoolInput.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SchoolInput.tsx
index ce0a53f51..1eb1fb225 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SchoolInput.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SchoolInput.tsx
@@ -1,6 +1,6 @@
'use client';
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { useJoinContext } from '../../../components/JoinContext';
import { useFunnelContext } from '../../JoinFunnel';
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SchoolResult.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SchoolResult.tsx
index 9b6be25b3..f893bc7f4 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SchoolResult.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SchoolResult.tsx
@@ -1,5 +1,5 @@
'use client';
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { useJoinContext } from '../../../components/JoinContext';
import { formatAddress } from '../utils';
import { SchoolSearchResponse, useGetSearchSchool } from '@/apis/auth';
import { Icon } from '@/components/Icon';
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SearchResultSection.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SearchResultSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SearchResultSection.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step2/components/SearchResultSection.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step3/Step3Component.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step3/Step3Component.tsx
similarity index 73%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step3/Step3Component.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step3/Step3Component.tsx
index 4ecf4ff45..7e4c7f8a3 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step3/Step3Component.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step3/Step3Component.tsx
@@ -1,8 +1,9 @@
'use client';
-import EmailForm from './components/EmailForm.client';
-import NoticeSection from './components/NoticeSection.client';
-import JoinTitleTextMessage from '../../components/JoinTitleTextMessage.client';
+import EmailForm from './components/EmailForm';
+import NoticeSection from './components/NoticeSection';
+import JoinTitleTextMessage from '../../components/JoinTitleTextMessage';
+
import { useTranslation } from '@/app/i18n/client';
export default function Step3Component() {
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/CertificateSkipModal.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/CertificateSkipModal.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/CertificateSkipModal.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/CertificateSkipModal.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/EmailForm.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/EmailForm.tsx
similarity index 90%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/EmailForm.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/EmailForm.tsx
index 0f78c0371..606aed962 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/EmailForm.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/EmailForm.tsx
@@ -1,17 +1,19 @@
'use client';
-import CertificateSkipModal from './CertificateSkipModal.client';
-import VerifyBottomSheet from './VerifyBottomSheet.client';
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { memo } from 'react';
+
+import CertificateSkipModal from './CertificateSkipModal';
+import VerifyBottomSheet from './VerifyBottomSheet';
+import { useJoinContext } from '../../../components/JoinContext';
import { useFunnelContext } from '../../JoinFunnel';
+
+import type { SignUpState } from '../../../type';
+
import { useEmailMutation } from '@/apis/auth';
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
import { TextFieldController } from '@/components/TextField';
import { regexr } from '@/constants/regexr';
-import { useModal } from '@/hooks/useModal';
-import { memo } from 'react';
-
-import type { SignUpState } from '../../../type';
+import useModal from '@/hooks/useModal/useModal';
export default memo(function EmailForm() {
const { t } = useTranslation('join');
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/NoticeSection.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/NoticeSection.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/NoticeSection.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/NoticeSection.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/VerifyBottomSheet.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/VerifyBottomSheet.tsx
similarity index 97%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/VerifyBottomSheet.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/VerifyBottomSheet.tsx
index 1e8e6654f..b3a96d60d 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/VerifyBottomSheet.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step3/components/VerifyBottomSheet.tsx
@@ -1,4 +1,4 @@
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { useJoinContext } from '../../../components/JoinContext';
import { useEmailVerifyMutation } from '@/apis/auth';
import { useTranslation } from '@/app/i18n/client';
import { Button, ButtonGroup } from '@/components/Button';
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step4/Step4Component.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step4/Step4Component.tsx
similarity index 60%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step4/Step4Component.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step4/Step4Component.tsx
index daf905b91..7509e460d 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step4/Step4Component.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step4/Step4Component.tsx
@@ -1,6 +1,6 @@
'use client';
-import InputForm from './components/InputForm.client';
+import InputForm from './components/InputForm';
export default function Step4Component() {
return ;
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step4/components/InputForm.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step4/components/InputForm.tsx
similarity index 98%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step4/components/InputForm.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step4/components/InputForm.tsx
index 9dfeca8c0..196f45b1d 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step4/components/InputForm.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step4/components/InputForm.tsx
@@ -2,7 +2,7 @@
import Image from 'next/image';
import { type ElementType, type KeyboardEventHandler, useState } from 'react';
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { useJoinContext } from '../../../components/JoinContext';
import { useFunnelContext } from '../../JoinFunnel';
import { formatBirthBackspace, formatBirthTyping } from '../util';
@@ -17,7 +17,7 @@ import { TextFieldController } from '@/components/TextField';
import { regexr } from '@/constants/regexr';
import { useDidMount } from '@/hooks/common/useDidMount';
import { useFileUpload } from '@/hooks/useFileUpload';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import sendMessageToReactNative from '@/utils/sendMessageToReactNative';
export default function InputForm() {
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step5/Step5Component.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step5/Step5Component.tsx
similarity index 87%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step5/Step5Component.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step5/Step5Component.tsx
index b4145d5cc..f0eb1c779 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step5/Step5Component.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step5/Step5Component.tsx
@@ -1,8 +1,9 @@
'use client';
-import InputForm from './components/InputForm.client';
-import JoinContentTextMessage from '../../components/JoinContentTextMessage.client';
-import JoinTitleTextMessage from '../../components/JoinTitleTextMessage.client';
+import InputForm from './components/InputForm';
+import JoinContentTextMessage from '../../components/JoinContentTextMessage';
+import JoinTitleTextMessage from '../../components/JoinTitleTextMessage';
+
import { useTranslation } from '@/app/i18n/client';
import { Spacing } from '@/components/Spacing';
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/InputForm.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/InputForm.tsx
similarity index 95%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/InputForm.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/InputForm.tsx
index a3076e79d..116140497 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/InputForm.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/InputForm.tsx
@@ -2,7 +2,7 @@
import { useCallback } from 'react';
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { useJoinContext } from '../../../components/JoinContext';
import type { SignUpState } from '../../../type';
@@ -13,7 +13,7 @@ import { Button, ButtonGroup } from '@/components/Button';
import { LayerLoading } from '@/components/Loading';
import { Tag } from '@/components/Tag';
import { personalityList } from '@/constants/personalityList';
-import { useModal } from '@/hooks/useModal';
+import useModal from '@/hooks/useModal/useModal';
import { formatDateDTO } from '@/utils/formatDateDTO';
export default function InputForm() {
diff --git a/packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/PersonalityItem.client.tsx b/packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/PersonalityItem.tsx
similarity index 93%
rename from packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/PersonalityItem.client.tsx
rename to packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/PersonalityItem.tsx
index ea2c9a184..3e0fba11a 100644
--- a/packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/PersonalityItem.client.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/funnels/step5/components/PersonalityItem.tsx
@@ -2,7 +2,7 @@
import clsx from 'clsx';
import { memo } from 'react';
-import { useJoinContext } from '../../../components/JoinContext.client';
+import { useJoinContext } from '../../../components/JoinContext';
import type { PersonalityType } from '@/types';
diff --git a/packages/web/src/app/[lng]/(sub)/join/page.tsx b/packages/web/src/app/[lng]/(sub)/join/page.tsx
index c66870667..a817bbbaf 100644
--- a/packages/web/src/app/[lng]/(sub)/join/page.tsx
+++ b/packages/web/src/app/[lng]/(sub)/join/page.tsx
@@ -1,10 +1,10 @@
import { Suspense } from 'react';
-import JoinContextProvider from './components/JoinContext.client';
+import JoinContextProvider from './components/JoinContext';
import JoinFunnel from './funnels/JoinFunnel';
import { Loading } from '@/components/Loading';
-import { ModalProvider } from '@/hooks/useModal';
+import ModalProvider from '@/hooks/useModal/ModalProvider';
export default async function JoinPage() {
return (
diff --git a/packages/web/src/app/[lng]/(sub)/notification/components/NotiCard.client.tsx b/packages/web/src/app/[lng]/(sub)/notification/components/NotiCard.tsx
similarity index 100%
rename from packages/web/src/app/[lng]/(sub)/notification/components/NotiCard.client.tsx
rename to packages/web/src/app/[lng]/(sub)/notification/components/NotiCard.tsx
diff --git a/packages/web/src/app/[lng]/(sub)/notification/components/NotificationSection.tsx b/packages/web/src/app/[lng]/(sub)/notification/components/NotificationSection.tsx
index ba735cd21..14e3ca504 100644
--- a/packages/web/src/app/[lng]/(sub)/notification/components/NotificationSection.tsx
+++ b/packages/web/src/app/[lng]/(sub)/notification/components/NotificationSection.tsx
@@ -1,5 +1,6 @@
'use client';
-import NotiCard from './NotiCard.client';
+import NotiCard from './NotiCard';
+
import { useGetNotifications } from '@/apis/notifications';
import { useTranslation } from '@/app/i18n/client';
import { Icon } from '@/components/Icon';
diff --git a/packages/web/src/app/[lng]/not-found.tsx b/packages/web/src/app/[lng]/not-found.tsx
index 04d36e503..7cd30edcd 100644
--- a/packages/web/src/app/[lng]/not-found.tsx
+++ b/packages/web/src/app/[lng]/not-found.tsx
@@ -1,12 +1,11 @@
-import NoMeeting from './(main)/meeting/components/NoMeeting';
-
+import { Empty } from '@/components/Empty';
import { Footer } from '@/components/Footer';
export default function NotFound() {
return (
-
-
+
+
);
}
diff --git a/packages/web/src/app/i18n/client.ts b/packages/web/src/app/i18n/client.ts
index 93a4727c0..bfa881f3f 100644
--- a/packages/web/src/app/i18n/client.ts
+++ b/packages/web/src/app/i18n/client.ts
@@ -1,4 +1,3 @@
-/* eslint-disable react-hooks/rules-of-hooks */
'use client';
import i18next from 'i18next';
diff --git a/packages/web/src/components/Analytics/GoogleAnalytics.client.tsx b/packages/web/src/components/Analytics/GoogleAnalytics.tsx
similarity index 100%
rename from packages/web/src/components/Analytics/GoogleAnalytics.client.tsx
rename to packages/web/src/components/Analytics/GoogleAnalytics.tsx
diff --git a/packages/web/src/components/Analytics/index.ts b/packages/web/src/components/Analytics/index.ts
index 661d69c5d..32cd711b0 100644
--- a/packages/web/src/components/Analytics/index.ts
+++ b/packages/web/src/components/Analytics/index.ts
@@ -1 +1 @@
-export { default as GoogleAnalytics } from './GoogleAnalytics.client';
+export { default as GoogleAnalytics } from './GoogleAnalytics';
diff --git a/packages/web/src/components/Avatar/Avatar.tsx b/packages/web/src/components/Avatar/Avatar.tsx
index 14e9c813d..9be69fa1d 100644
--- a/packages/web/src/components/Avatar/Avatar.tsx
+++ b/packages/web/src/components/Avatar/Avatar.tsx
@@ -50,7 +50,7 @@ export default function Avatar({
onClick={onClick}
>
-
+
{iconVariant !== 'none' && (
)}
- {countryImage && }
+ {countryImage && (
+
+ )}
{children}
@@ -82,9 +84,10 @@ export default function Avatar({
}
const AvatarImage = memo(function ({
+ size,
imageUrl,
isPending,
-}: Pick) {
+}: Pick) {
if (isPending) {
return (
@@ -93,8 +96,23 @@ const AvatarImage = memo(function ({
);
}
+ const imageSize = {
+ 'x-small': '1.7rem',
+ small: '2.5rem',
+ medium: '3.5rem',
+ large: '6rem',
+ };
+
if (imageUrl) {
- return ;
+ return (
+
+ );
}
return ;
diff --git a/packages/web/src/components/Calendar/Calendar.client.tsx b/packages/web/src/components/Calendar/Calendar.tsx
similarity index 89%
rename from packages/web/src/components/Calendar/Calendar.client.tsx
rename to packages/web/src/components/Calendar/Calendar.tsx
index bd7865d18..0497aeef5 100644
--- a/packages/web/src/components/Calendar/Calendar.client.tsx
+++ b/packages/web/src/components/Calendar/Calendar.tsx
@@ -1,10 +1,8 @@
-import 'react-datepicker/dist/react-datepicker.css';
-
import { format } from 'date-fns';
import { enUS, ko } from 'date-fns/esm/locale';
+import dynamic from 'next/dynamic';
import { useParams } from 'next/navigation';
import { useMemo } from 'react';
-import DatePicker from 'react-datepicker';
import { Icon } from '../Icon';
import { Spacing } from '../Spacing';
@@ -12,6 +10,13 @@ import { Spacing } from '../Spacing';
import { IconButton } from '@/components/Button';
import { Flex } from '@/components/Layout';
+const DatePicker = dynamic(() =>
+ import('react-datepicker').then((mod) => {
+ require('react-datepicker/dist/react-datepicker.css');
+ return mod;
+ })
+);
+
interface CalendarProps {
dateValue: Date | null;
setDateValue: (date: Date) => void;
diff --git a/packages/web/src/components/Calendar/index.ts b/packages/web/src/components/Calendar/index.ts
index a09b5d924..711315c08 100644
--- a/packages/web/src/components/Calendar/index.ts
+++ b/packages/web/src/components/Calendar/index.ts
@@ -1 +1 @@
-export { default as Calendar } from './Calendar.client';
+export { default as Calendar } from './Calendar';
diff --git a/packages/web/src/components/Card/CardHeader.client.tsx b/packages/web/src/components/Card/CardHeader.tsx
similarity index 100%
rename from packages/web/src/components/Card/CardHeader.client.tsx
rename to packages/web/src/components/Card/CardHeader.tsx
diff --git a/packages/web/src/components/Card/GroupingCard.client.tsx b/packages/web/src/components/Card/GroupingCard.tsx
similarity index 98%
rename from packages/web/src/components/Card/GroupingCard.client.tsx
rename to packages/web/src/components/Card/GroupingCard.tsx
index 715890561..b9a53c15e 100644
--- a/packages/web/src/components/Card/GroupingCard.client.tsx
+++ b/packages/web/src/components/Card/GroupingCard.tsx
@@ -55,7 +55,7 @@ export default function GroupingCard({
return (
-
+
{imageUrl ? (
- {t(message)}
+ {message}
);
}
diff --git a/packages/web/src/components/ErrorBoundary/ErrorFallback.tsx b/packages/web/src/components/ErrorBoundary/ErrorFallback.tsx
new file mode 100644
index 000000000..f5bcc63ea
--- /dev/null
+++ b/packages/web/src/components/ErrorBoundary/ErrorFallback.tsx
@@ -0,0 +1,16 @@
+'use client';
+import { PropsWithChildren } from 'react';
+
+import BaseError from '../Error/BaseError';
+
+interface FallbackProps {
+ error: Error;
+ resetErrorBoundary: (...args: unknown[]) => void;
+}
+
+export default function ErrorFallback({
+ error,
+ resetErrorBoundary,
+}: PropsWithChildren) {
+ return ;
+}
diff --git a/packages/web/src/components/ErrorBoundary/LocalSuspenseErrorBoundary.tsx b/packages/web/src/components/ErrorBoundary/LocalSuspenseErrorBoundary.tsx
index c92fe3d38..d8397a7e8 100644
--- a/packages/web/src/components/ErrorBoundary/LocalSuspenseErrorBoundary.tsx
+++ b/packages/web/src/components/ErrorBoundary/LocalSuspenseErrorBoundary.tsx
@@ -1,28 +1,17 @@
'use client';
-import { PropsWithChildren, Suspense } from 'react';
+
+import { Suspense } from 'react';
import { ErrorBoundary } from 'react-error-boundary';
-import BaseError from '../Error/BaseError';
+import ErrorFallback from './ErrorFallback';
import { Loading } from '../Loading';
import { StrictPropsWithChildren } from '@/types';
-interface LocalSuspenseErrorBoundaryProps {}
-export default function LocalSuspenseErrorBoundary({
- children,
-}: StrictPropsWithChildren) {
+export default function LocalSuspenseErrorBoundary({ children }: StrictPropsWithChildren) {
return (
-
+
}>{children}
);
}
-
-interface FallbackProps {
- error: Error;
- resetErrorBoundary: (...args: unknown[]) => void;
-}
-
-export function Fallback({ error, resetErrorBoundary }: PropsWithChildren) {
- return ;
-}
diff --git a/packages/web/src/components/ErrorBoundary/index.ts b/packages/web/src/components/ErrorBoundary/index.ts
index e3ea39d92..2e6783b57 100644
--- a/packages/web/src/components/ErrorBoundary/index.ts
+++ b/packages/web/src/components/ErrorBoundary/index.ts
@@ -1 +1,2 @@
export { default as LocalSuspenseErrorBoundary } from './LocalSuspenseErrorBoundary';
+export { default as ErrorFallback } from './ErrorFallback';
diff --git a/packages/web/src/components/Footer/Footer.tsx b/packages/web/src/components/Footer/Footer.tsx
index f23cd8701..cb2ceb7d4 100644
--- a/packages/web/src/components/Footer/Footer.tsx
+++ b/packages/web/src/components/Footer/Footer.tsx
@@ -1,14 +1,16 @@
+'use client';
+import { usePathname } from 'next/navigation';
+
import { ButtonAnimation } from '../Animation';
import { Icon } from '../Icon';
import { NavLink } from '../NavLink';
import type { PageType } from '@/types';
-import { serverTranslation } from '@/app/i18n';
+import { useTranslation } from '@/app/i18n/client';
import cn from '@/utils/cn';
interface TabType {
- id: string;
name: PageType;
title: string;
url: string;
@@ -16,25 +18,21 @@ interface TabType {
const tabList: TabType[] = [
{
- id: '1',
name: 'grouping',
title: '매칭',
url: '/grouping',
},
{
- id: '2',
name: 'meeting',
title: '나의모임',
url: '/meeting/participate?tab=participating',
},
{
- id: '3',
name: 'community',
title: '커뮤니티',
url: '/community?tab=all',
},
{
- id: '4',
name: 'profile',
title: '프로필',
url: '/profile',
@@ -42,22 +40,26 @@ const tabList: TabType[] = [
];
interface FooterProps {
- lng: string;
- page?: PageType;
isSpacing?: boolean;
spacingColor?: string;
}
-export default async function Footer({ lng, page, isSpacing = true, spacingColor }: FooterProps) {
- const { t } = await serverTranslation(lng, 'common');
- const isSelected = (tab: TabType) => tab.name === page;
+export default function Footer({ isSpacing = true, spacingColor }: FooterProps) {
+ const pathname = usePathname();
+ const { t } = useTranslation('common');
+ const isSelected = (tab: TabType) => tab.name === pathname.split('/')[2];
+
+ // `detail`이 경로에 포함되어 있을 경우 렌더링하지 않음
+ if (pathname.includes('/detail/')) {
+ return null;
+ }
return (
<>