diff --git a/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx b/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx index d8aa2d39..28c6b794 100644 --- a/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx +++ b/src/app/(user-page)/my-meeting/_features/CardRightSection.tsx @@ -8,7 +8,7 @@ import { useQueryClient } from '@tanstack/react-query'; import Image from 'next/image'; import { useRouter } from 'next/navigation'; import { getMyMeetingMemberProfile } from 'service/api/mymeeting'; -import type { Member } from 'types/myMeeting'; +import { Member } from 'type-clyde/meeting'; import PublicSelect from './PublicDropdown'; diff --git a/src/app/(user-page)/my-meeting/_features/ModalProfile.tsx b/src/app/(user-page)/my-meeting/_features/ModalProfile.tsx index 77fa69e1..0705bd89 100644 --- a/src/app/(user-page)/my-meeting/_features/ModalProfile.tsx +++ b/src/app/(user-page)/my-meeting/_features/ModalProfile.tsx @@ -3,9 +3,9 @@ import TechButton from '@/components/ui/tech-stack/tech-stack-components/TechBut import { getIconComponent } from '@/util/getIconDetail'; import Image from 'next/image'; import React from 'react'; -import { IMemberProfile } from 'types/myMeeting'; +import { MemberProfile } from 'type-clyde/meeting'; -const ModalProfile = ({ user }: { user: IMemberProfile }) => { +const ModalProfile = ({ user }: { user: MemberProfile }) => { return (
diff --git a/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx b/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx index 00ba0783..7241ae53 100644 --- a/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx +++ b/src/app/(user-page)/my-meeting/_features/ModalUserList.tsx @@ -2,7 +2,8 @@ import { Tag } from '@/components/ui/Tag'; import Image from 'next/image'; import { useRouter } from 'next/navigation'; import React from 'react'; -import type { IBanner, Member } from 'types/myMeeting'; +import { Member } from 'type-clyde/meeting'; +import { Banner } from 'type-clyde/meeting/banner'; import { Button } from '../../../../components/ui/Button'; @@ -15,7 +16,7 @@ const ModalUserList = ({ showPublicSelect = false, }: { memberList: Member[]; - currentUser: IBanner; + currentUser: Banner; className?: string; handlePrefetchProfile: (member: Member) => Promise; showPublicSelect?: boolean; diff --git a/src/app/(user-page)/my-meeting/_features/Participated.tsx b/src/app/(user-page)/my-meeting/_features/Participated.tsx index 3323fd5e..bfa9205a 100644 --- a/src/app/(user-page)/my-meeting/_features/Participated.tsx +++ b/src/app/(user-page)/my-meeting/_features/Participated.tsx @@ -6,7 +6,7 @@ import { useInfiniteMyMeetingParticipatedQueries } from '@/hooks/queries/useMyMe import { translateCategoryNameToEng } from '@/util/searchFilter'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; -import { IMyMeetingParticipated } from 'types/myMeeting'; +import { MyMeetingParticipated } from 'type-clyde/meeting/myMeeting'; import CardRightSection from './CardRightSection'; import LeaveMeetingButton from './LeaveMeetingButton'; @@ -15,7 +15,7 @@ import PendingStatusChip from './PendingStatusChip'; import MeetingListSkeleton from './skeletons/SkeletonMeetingList'; interface IStatusOverlay { - meeting: IMyMeetingParticipated; + meeting: MyMeetingParticipated; } const Participated = () => { @@ -44,16 +44,16 @@ const Participated = () => { // 클릭 불가능한 상태인지 확인하는 함수 (오버레이 표시 여부만 결정) const isDisabledStatus = ( - status: IMyMeetingParticipated['myMemberStatus'], + status: MyMeetingParticipated['myMemberStatus'], ): boolean => { return status === 'REJECTED' || status === 'EXPEL'; }; // 모임 상세 페이지 URL 생성 함수 - const getMeetingDetailUrl = (meeting: IMyMeetingParticipated) => + const getMeetingDetailUrl = (meeting: MyMeetingParticipated) => `/meeting/${translateCategoryNameToEng(meeting.categoryTitle)}/${meeting.meetingId}`; - const handleCardClick = (meeting: IMyMeetingParticipated) => { + const handleCardClick = (meeting: MyMeetingParticipated) => { router.push(getMeetingDetailUrl(meeting)); }; diff --git a/src/app/(user-page)/my-meeting/_features/PendingSection.tsx b/src/app/(user-page)/my-meeting/_features/PendingSection.tsx index 7668a087..b6fbe7a0 100644 --- a/src/app/(user-page)/my-meeting/_features/PendingSection.tsx +++ b/src/app/(user-page)/my-meeting/_features/PendingSection.tsx @@ -4,7 +4,7 @@ import { translateCategoryNameToEng } from '@/util/searchFilter'; import { ChevronRight } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; -import { IMyMeetingPending } from 'types/myMeeting'; +import { MyMeetingPending } from 'type-clyde/meeting/myMeeting'; import PendingStatusChip from './PendingStatusChip'; import MeetingListSkeleton from './skeletons/SkeletonMeetingList'; @@ -21,10 +21,10 @@ const PendingSection = () => { isLoading, } = useInfiniteMyMeetingPendingQueries(); - const getMeetingDetailUrl = (meeting: IMyMeetingPending) => + const getMeetingDetailUrl = (meeting: MyMeetingPending) => `/meeting/${translateCategoryNameToEng(meeting.categoryTitle)}/${meeting.meetingId}`; - const handleCardClick = (meeting: IMyMeetingPending) => { + const handleCardClick = (meeting: MyMeetingPending) => { router.push(getMeetingDetailUrl(meeting)); }; diff --git a/src/app/(user-page)/my-meeting/_features/UserItem.tsx b/src/app/(user-page)/my-meeting/_features/UserItem.tsx index ada30423..e26cc498 100644 --- a/src/app/(user-page)/my-meeting/_features/UserItem.tsx +++ b/src/app/(user-page)/my-meeting/_features/UserItem.tsx @@ -1,7 +1,7 @@ import { Button } from '@/components/ui/Button'; import { Tag } from '@/components/ui/Tag'; import Image from 'next/image'; -import type { UserData } from 'types/myMeeting'; +import { UserData } from 'type-clyde/meeting'; const UserItem = ({ user, diff --git a/src/app/(user-page)/my-meeting/_features/Writable.tsx b/src/app/(user-page)/my-meeting/_features/Writable.tsx index 8a5ae1b8..c8a31ef2 100644 --- a/src/app/(user-page)/my-meeting/_features/Writable.tsx +++ b/src/app/(user-page)/my-meeting/_features/Writable.tsx @@ -5,7 +5,7 @@ import useInfiniteScroll from '@/hooks/common/useInfiniteScroll'; import { useInfiniteWritableMyMeetingsQueries } from '@/hooks/queries/useMyCommentQueries'; import { translateCategoryNameToEng } from '@/util/searchFilter'; import { useRouter } from 'next/navigation'; -import { MyComment } from 'types/myComment'; +import { MyComment } from 'type-clyde/meeting/comment'; import MeetingListSkeleton from './skeletons/SkeletonMeetingList'; diff --git a/src/app/(user-page)/my-meeting/_features/Written.tsx b/src/app/(user-page)/my-meeting/_features/Written.tsx index d5d18c19..fefae0ad 100644 --- a/src/app/(user-page)/my-meeting/_features/Written.tsx +++ b/src/app/(user-page)/my-meeting/_features/Written.tsx @@ -6,7 +6,7 @@ import useInfiniteScroll from '@/hooks/common/useInfiniteScroll'; import { useInfiniteWrittenMyCommentQueries } from '@/hooks/queries/useMyCommentQueries'; import { translateCategoryNameToEng } from '@/util/searchFilter'; import { useRouter } from 'next/navigation'; -import { MyComment } from 'types/myComment'; +import { MyComment } from 'type-clyde/meeting/comment'; import MeetingListSkeleton from './skeletons/SkeletonMeetingList'; diff --git a/src/app/(user-page)/my-meeting/comments/page.tsx b/src/app/(user-page)/my-meeting/comments/page.tsx index f7a474e4..0b1f66d2 100644 --- a/src/app/(user-page)/my-meeting/comments/page.tsx +++ b/src/app/(user-page)/my-meeting/comments/page.tsx @@ -9,8 +9,8 @@ import { getMyMeetingsWritableComments, getMyWrittenComments, } from 'service/api/mycomments'; -import { Paginated } from 'types/meeting'; -import { MyComment } from 'types/myComment'; +import { Paginated } from 'type-clyde/common/pagination'; +import { MyComment } from 'type-clyde/meeting/comment'; import Tab from '../_features/Tab'; import Writable from '../_features/Writable'; diff --git a/src/app/(user-page)/my-meeting/likes/page.tsx b/src/app/(user-page)/my-meeting/likes/page.tsx index efbfdbd8..ce102959 100644 --- a/src/app/(user-page)/my-meeting/likes/page.tsx +++ b/src/app/(user-page)/my-meeting/likes/page.tsx @@ -5,8 +5,8 @@ import { dehydrate, } from '@tanstack/react-query'; import { getMyMeetingLikes } from 'service/api/mymeeting'; -import { Paginated } from 'types/meeting'; -import { IMyMeetingLikes } from 'types/myMeeting'; +import { Paginated } from 'type-clyde/common/pagination'; +import { MyMeetingLikes } from 'type-clyde/meeting/myMeeting'; import Likes from '../_features/Likes'; @@ -16,7 +16,7 @@ export default async function LikesPage() { await queryClient.prefetchInfiniteQuery({ queryKey: myMeetingKeys.likes(), queryFn: ({ pageParam }) => getMyMeetingLikes(pageParam), - getNextPageParam: (lastPage: Paginated) => + getNextPageParam: (lastPage: Paginated) => lastPage.nextCursor ?? false, initialPageParam: 0, }); diff --git a/src/app/(user-page)/my-meeting/my/@modal/(.)user-list/page.tsx b/src/app/(user-page)/my-meeting/my/@modal/(.)user-list/page.tsx index 7c846d8e..b30a2460 100644 --- a/src/app/(user-page)/my-meeting/my/@modal/(.)user-list/page.tsx +++ b/src/app/(user-page)/my-meeting/my/@modal/(.)user-list/page.tsx @@ -6,8 +6,7 @@ import { useBannerQueries } from '@/hooks/queries/useMyPageQueries'; import { useQueryClient } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; import { getMyMeetingMemberProfile } from 'service/api/mymeeting'; -import { Paginated } from 'types/meeting'; -import { IMyMeetingManage, Member } from 'types/myMeeting'; +import { Member } from 'type-clyde/meeting'; import ModalUserList from '../../../_features/ModalUserList'; diff --git a/src/app/(user-page)/my-meeting/my/page.tsx b/src/app/(user-page)/my-meeting/my/page.tsx index 2b897315..ea281fa5 100644 --- a/src/app/(user-page)/my-meeting/my/page.tsx +++ b/src/app/(user-page)/my-meeting/my/page.tsx @@ -1,4 +1,3 @@ -import NotYet from '@/components/common/NotYet'; import { myMeetingKeys } from '@/hooks/queries/useMyMeetingQueries'; import { QUERY_KEYS } from '@/hooks/queries/useMyPageQueries'; import { @@ -13,12 +12,12 @@ import { getMyMeetingPending, } from 'service/api/mymeeting'; import { getBanner } from 'service/api/mypageProfile'; -import { Paginated } from 'types/meeting'; +import { Paginated } from 'type-clyde/common/pagination'; import { - IMyMeetingManage, - IMyMeetingParticipated, - IMyMeetingPending, -} from 'types/myMeeting'; + MyMeetingManage, + MyMeetingParticipated, + MyMeetingPending, +} from 'type-clyde/meeting/myMeeting'; import Created from '../_features/Created'; import Participated from '../_features/Participated'; @@ -44,7 +43,7 @@ export default async function Page({ await queryClient.prefetchInfiniteQuery({ queryKey: myMeetingKeys.manage(), queryFn: ({ pageParam }) => getMyMeetingManage(pageParam), - getNextPageParam: (lastPage: Paginated) => + getNextPageParam: (lastPage: Paginated) => lastPage.nextCursor ?? false, initialPageParam: 0, }); @@ -54,14 +53,14 @@ export default async function Page({ queryClient.prefetchInfiniteQuery({ queryKey: myMeetingKeys.participated(), queryFn: ({ pageParam }) => getMyMeetingParticipated(pageParam), - getNextPageParam: (lastPage: Paginated) => + getNextPageParam: (lastPage: Paginated) => lastPage.nextCursor ?? false, initialPageParam: 0, }), queryClient.prefetchInfiniteQuery({ queryKey: myMeetingKeys.pending(), queryFn: ({ pageParam }) => getMyMeetingPending(pageParam), - getNextPageParam: (lastPage: Paginated) => + getNextPageParam: (lastPage: Paginated) => lastPage.nextCursor ?? false, initialPageParam: 0, }), diff --git a/src/app/(user-page)/mypage/_features/BasicEdit.tsx b/src/app/(user-page)/mypage/_features/BasicEdit.tsx index 8aecb793..5ddc495e 100644 --- a/src/app/(user-page)/mypage/_features/BasicEdit.tsx +++ b/src/app/(user-page)/mypage/_features/BasicEdit.tsx @@ -6,6 +6,7 @@ import { useUpdateProfileMutation } from '@/hooks/mutations/useMyPageMutation'; import { useProfileQuery } from '@/hooks/queries/useMyPageQueries'; import { useCallback, useEffect, useState } from 'react'; import { Controller, useForm, useWatch } from 'react-hook-form'; +import { UserBaseInfo } from 'type-clyde/user/profile'; import { AGE_OPTIONS, @@ -16,7 +17,6 @@ import { MAX_INTRO_LENGTH, POSITION_OPTIONS, } from '../../../../constants/mypage/mypageConstant'; -import { IFormData } from '../../../../types/mypageTypes'; interface BasicEditProps { onEditComplete: () => void; @@ -45,7 +45,7 @@ const BasicEdit = ({ onEditComplete }: BasicEditProps) => { setValue, reset, formState: { errors, isSubmitting }, - } = useForm({ + } = useForm({ defaultValues: { name: '', intro: '', @@ -107,7 +107,7 @@ const BasicEdit = ({ onEditComplete }: BasicEditProps) => { }, [profileData, reset]); // 폼 제출 처리 - const onSubmit = (data: IFormData) => { + const onSubmit = (data: UserBaseInfo) => { // 글자 수 검사 추가 if (data.intro && data.intro.length > MAX_INTRO_LENGTH) { return; diff --git a/src/app/(user-page)/mypage/_features/ContactEdit.tsx b/src/app/(user-page)/mypage/_features/ContactEdit.tsx index 48b08008..75b976ba 100644 --- a/src/app/(user-page)/mypage/_features/ContactEdit.tsx +++ b/src/app/(user-page)/mypage/_features/ContactEdit.tsx @@ -6,8 +6,7 @@ import { useUpdateContactInfoMutation } from '@/hooks/mutations/useMyPageMutatio import { useProfileQuery } from '@/hooks/queries/useMyPageQueries'; import { useEffect } from 'react'; import { useForm } from 'react-hook-form'; - -import { IContactInfoUpdateRequest } from '../../../../types/mypageTypes'; +import { ContactInfo } from 'type-clyde/user/profile'; interface ContactEditProps { onEditComplete: () => void; @@ -20,7 +19,7 @@ const ContactEdit = ({ onEditComplete }: ContactEditProps) => { handleSubmit, reset, formState: { errors, isSubmitting }, - } = useForm({ + } = useForm({ defaultValues: { phone: '', kakao: '', @@ -55,7 +54,7 @@ const ContactEdit = ({ onEditComplete }: ContactEditProps) => { }, [profileData, reset]); // 폼 제출 처리 - const onSubmit = (data: IContactInfoUpdateRequest) => { + const onSubmit = (data: ContactInfo) => { updateContact(data, { onSuccess: () => { onEditComplete(); diff --git a/src/app/(user-page)/mypage/_features/PasswordEdit.tsx b/src/app/(user-page)/mypage/_features/PasswordEdit.tsx index e0301a76..e56b14ae 100644 --- a/src/app/(user-page)/mypage/_features/PasswordEdit.tsx +++ b/src/app/(user-page)/mypage/_features/PasswordEdit.tsx @@ -4,8 +4,7 @@ import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { useUpdatePasswordMutation } from '@/hooks/mutations/useMyPageMutation'; import { useForm } from 'react-hook-form'; - -import { IPasswordUpdateRequest } from '../../../../types/mypageTypes'; +import { PasswordUpdateRequest } from 'type-clyde/user/profile'; interface PasswordEditProps { onEditComplete: () => void; @@ -19,7 +18,7 @@ const PasswordEdit = ({ onEditComplete }: PasswordEditProps) => { watch, setError, formState: { errors, isSubmitting }, - } = useForm({ + } = useForm({ defaultValues: { currentPassword: '', newPassword: '', @@ -35,7 +34,7 @@ const PasswordEdit = ({ onEditComplete }: PasswordEditProps) => { useUpdatePasswordMutation(); // 폼 제출 처리 - const onSubmit = (data: IPasswordUpdateRequest) => { + const onSubmit = (data: PasswordUpdateRequest) => { // 비밀번호 일치 여부 확인 if (data.newPassword !== data.passwordCheck) { setError('passwordCheck', { diff --git a/src/app/(user-page)/mypage/_features/TechStackEdit.tsx b/src/app/(user-page)/mypage/_features/TechStackEdit.tsx index 6068eb9e..12130c9b 100644 --- a/src/app/(user-page)/mypage/_features/TechStackEdit.tsx +++ b/src/app/(user-page)/mypage/_features/TechStackEdit.tsx @@ -6,7 +6,7 @@ import { useProfileQuery } from '@/hooks/queries/useMyPageQueries'; import useTechSelection from '@/hooks/useTechSelection'; import { getIconColor, getIconsByCategory } from '@/util/getIconDetail'; import React, { useEffect, useState } from 'react'; -import { CategoryType } from 'types/techStack'; +import { CategoryType } from 'type-clyde/common/icon/techStacks'; import CategoryTabs from '../../../../components/ui/tech-stack/tech-stack-components/CategoryTabs'; import SelectedTechList from '../../../../components/ui/tech-stack/tech-stack-components/SelectedTechList'; diff --git a/src/app/login/_features/EmailInput.tsx b/src/app/login/_features/EmailInput.tsx index 244a78c1..f9047dc5 100644 --- a/src/app/login/_features/EmailInput.tsx +++ b/src/app/login/_features/EmailInput.tsx @@ -5,14 +5,14 @@ import useDebounce from '@/hooks/useDebounde'; import { loginEmailValidation } from '@/util/validation'; import { useCallback } from 'react'; import { useWatch } from 'react-hook-form'; -import { IInputProps, ILoginFormData } from 'types/auth'; +import { InputProps, LoginFormData } from 'type-clyde/auth/form'; const EmailInput = ({ control, register, errors, trigger, -}: IInputProps) => { +}: InputProps) => { const email = useWatch({ control, name: 'email' }); useDebounce({ diff --git a/src/app/login/_features/PasswordInput.tsx b/src/app/login/_features/PasswordInput.tsx index 465085e8..2c2d3961 100644 --- a/src/app/login/_features/PasswordInput.tsx +++ b/src/app/login/_features/PasswordInput.tsx @@ -5,14 +5,14 @@ import useDebounce from '@/hooks/useDebounde'; import { loginPasswordValidation } from '@/util/validation'; import { useCallback } from 'react'; import { useWatch } from 'react-hook-form'; -import { IInputProps, ILoginFormData } from 'types/auth'; +import { InputProps, LoginFormData } from 'type-clyde/auth/form'; const PasswordInput = ({ control, register, errors, trigger, -}: IInputProps) => { +}: InputProps) => { const password = useWatch({ control, name: 'password' }); useDebounce({ diff --git a/src/app/meeting/[category]/[id]/page.tsx b/src/app/meeting/[category]/[id]/page.tsx index f5280e9f..d9956dd6 100644 --- a/src/app/meeting/[category]/[id]/page.tsx +++ b/src/app/meeting/[category]/[id]/page.tsx @@ -7,13 +7,10 @@ import { QueryClient, dehydrate, } from '@tanstack/react-query'; -import { - Comment, - getCommentsCount, - getCommentsMeeting, -} from 'service/api/comment'; +import { getCommentsCount, getCommentsMeeting } from 'service/api/comment'; import { getMeetingDetail, getMeetingDetailManager } from 'service/api/meeting'; -import { Paginated } from 'types/meeting'; +import { Paginated } from 'type-clyde/common/pagination'; +import { Comment } from 'type-clyde/meeting/comment'; import CardWrapper from '../../_features/CardWrapper'; import ContentLabel from '../../_features/ContextLabel'; diff --git a/src/app/meeting/[category]/page.tsx b/src/app/meeting/[category]/page.tsx index f804533f..9f26321b 100644 --- a/src/app/meeting/[category]/page.tsx +++ b/src/app/meeting/[category]/page.tsx @@ -9,7 +9,9 @@ import { import { MEETING_TYPES } from 'constants/meeting-form/meetingConstants'; import { notFound } from 'next/navigation'; import { getMeetings, getTopMeetings } from 'service/api/meeting'; -import { Paginated, SearchMeeting } from 'types/meeting'; +import { Paginated } from 'type-clyde/common/pagination'; +import { SortFieldType } from 'type-clyde/common/pagination'; +import { SearchMeeting } from 'type-clyde/meeting'; import MeetingList from '../_features/MeetingList'; import RecommendMeeting from '../_features/RecommendMeeting'; @@ -22,7 +24,7 @@ async function MeetingListPage({ params }: { params: { category: string } }) { const initialSearchQueryObj = { keyword: '', skillArray: [], - sortField: 'CREATED', + sortField: 'CREATED' as SortFieldType, lastMeetingId: 0, size: 4, }; diff --git a/src/app/meeting/_features/MeetingList.tsx b/src/app/meeting/_features/MeetingList.tsx index bc4f6fe1..f00bd891 100644 --- a/src/app/meeting/_features/MeetingList.tsx +++ b/src/app/meeting/_features/MeetingList.tsx @@ -18,8 +18,10 @@ import { keepPreviousData } from '@tanstack/react-query'; import Image from 'next/image'; import { useParams, useRouter } from 'next/navigation'; import { ChangeEvent, useCallback, useState } from 'react'; -import type { IMeetingSearchCondition, SearchMeeting } from 'types/meeting'; +import { SortFieldType } from 'type-clyde/common/pagination'; +import { MeetingSearchCondition } from '../../../type-clyde/meeting/search'; +import { SearchMeeting } from '../../../type-clyde/meeting/search'; import MeetingExtraInfo from './MeetingExtraInfo'; import NoResultsMeeting from './NoResultsMeeting'; import MeetingListSkeleton from './skeleton/MeetingListSkeleton'; @@ -28,7 +30,7 @@ const MeetingList = () => { const { category } = useParams(); const categoryStr = Array.isArray(category) ? category[0] : category; - const [searchQuery, setSearchQuery] = useState({ + const [searchQuery, setSearchQuery] = useState({ keyword: '', skillArray: [], sortField: 'CREATED', @@ -64,7 +66,7 @@ const MeetingList = () => { // 필터 변경 핸들러 const handleSearchOption = useCallback( - (newQuery: Partial) => { + (newQuery: Partial) => { // 기존 키워드와 동일하다면 API 호출하지 않도록 처리 setSearchQuery((prev) => { if (prev.keyword === newQuery.keyword) { @@ -144,7 +146,9 @@ const MeetingList = () => { handleSearchOption({ sortField: value })} + onChange={(value) => + handleSearchOption({ sortField: value as SortFieldType }) + } trigger="생성순" variant="doubleArrow" sideOffset={8} diff --git a/src/app/meeting/_features/RecommendMeeting.tsx b/src/app/meeting/_features/RecommendMeeting.tsx index 888f8756..3e03029b 100644 --- a/src/app/meeting/_features/RecommendMeeting.tsx +++ b/src/app/meeting/_features/RecommendMeeting.tsx @@ -9,7 +9,7 @@ import { } from '@/util/searchFilter'; import Image from 'next/image'; import { useParams, useRouter } from 'next/navigation'; -import type { TopMeeting } from 'types/meeting'; +import { TopMeeting } from 'type-clyde/meeting/response'; import RecommendMeetingSkeleton from './skeleton/RecommentMeetingSkeleton'; diff --git a/src/app/meeting/_features/ReviewItem.tsx b/src/app/meeting/_features/ReviewItem.tsx index 5b6630d4..cd3f0eb2 100644 --- a/src/app/meeting/_features/ReviewItem.tsx +++ b/src/app/meeting/_features/ReviewItem.tsx @@ -1,7 +1,7 @@ import RatingStars from '@/components/common/review/RatingStars'; import { getRelativeTime } from '@/util/date'; import Image from 'next/image'; -import { Comment } from 'service/api/comment'; +import { Comment } from 'type-clyde/meeting/comment'; interface ReviewItemProps { className?: string; diff --git a/src/app/meeting/_features/form/MeetingForm.tsx b/src/app/meeting/_features/form/MeetingForm.tsx index 20c8875b..ed56ea33 100644 --- a/src/app/meeting/_features/form/MeetingForm.tsx +++ b/src/app/meeting/_features/form/MeetingForm.tsx @@ -23,7 +23,7 @@ import { MEETING_TYPES } from 'constants/category/category'; import { useRouter } from 'next/navigation'; import React, { useEffect, useRef, useState } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { CreateMeetingPayload, UpdateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload, UpdateMeetingPayload } from 'type-clyde/meeting'; interface MeetingFormProps { mode: 'create' | 'edit'; diff --git a/src/app/meeting/_features/form/form-filed/CategoryField.tsx b/src/app/meeting/_features/form/form-filed/CategoryField.tsx index 8521476b..584444c1 100644 --- a/src/app/meeting/_features/form/form-filed/CategoryField.tsx +++ b/src/app/meeting/_features/form/form-filed/CategoryField.tsx @@ -2,7 +2,7 @@ import { cn } from '@/util/cn'; import { MEETING_TYPES } from 'constants/category/category'; import { Check } from 'lucide-react'; import { Controller, useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import { meetingTypeValidation } from '../validation'; diff --git a/src/app/meeting/_features/form/form-filed/DateField.tsx b/src/app/meeting/_features/form/form-filed/DateField.tsx index 70f10f1e..4ddef299 100644 --- a/src/app/meeting/_features/form/form-filed/DateField.tsx +++ b/src/app/meeting/_features/form/form-filed/DateField.tsx @@ -1,6 +1,6 @@ import { DatePicker } from '@/components/ui/form/DatePicker'; import { useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import { startDateValidation } from '../validation'; diff --git a/src/app/meeting/_features/form/form-filed/DescriptionField.tsx b/src/app/meeting/_features/form/form-filed/DescriptionField.tsx index 9b48f9e4..c0241f83 100644 --- a/src/app/meeting/_features/form/form-filed/DescriptionField.tsx +++ b/src/app/meeting/_features/form/form-filed/DescriptionField.tsx @@ -1,6 +1,6 @@ import { cn } from '@/util/cn'; import { useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import { descriptionValidation } from '../validation'; diff --git a/src/app/meeting/_features/form/form-filed/ImageField.tsx b/src/app/meeting/_features/form/form-filed/ImageField.tsx index 7bed75fb..b22e730f 100644 --- a/src/app/meeting/_features/form/form-filed/ImageField.tsx +++ b/src/app/meeting/_features/form/form-filed/ImageField.tsx @@ -7,7 +7,7 @@ import { Image as ImageIcon } from 'lucide-react'; import Image from 'next/image'; import React, { useEffect, useState } from 'react'; import { useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import { imageValidationMessages } from '../validation'; diff --git a/src/app/meeting/_features/form/form-filed/LocationField.tsx b/src/app/meeting/_features/form/form-filed/LocationField.tsx index 8068cd11..f21cd92b 100644 --- a/src/app/meeting/_features/form/form-filed/LocationField.tsx +++ b/src/app/meeting/_features/form/form-filed/LocationField.tsx @@ -1,6 +1,6 @@ import { Input } from '@/components/ui/Input'; import { useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import { locationValidation } from '../validation'; diff --git a/src/app/meeting/_features/form/form-filed/MemberLimitField.tsx b/src/app/meeting/_features/form/form-filed/MemberLimitField.tsx index 51f51ef2..0a939892 100644 --- a/src/app/meeting/_features/form/form-filed/MemberLimitField.tsx +++ b/src/app/meeting/_features/form/form-filed/MemberLimitField.tsx @@ -1,7 +1,7 @@ import { Input } from '@/components/ui/Input'; import { Users } from 'lucide-react'; import { useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import { memberLimitValidation } from '../validation'; diff --git a/src/app/meeting/_features/form/form-filed/PrivacyField.tsx b/src/app/meeting/_features/form/form-filed/PrivacyField.tsx index 4aff9136..c44220a1 100644 --- a/src/app/meeting/_features/form/form-filed/PrivacyField.tsx +++ b/src/app/meeting/_features/form/form-filed/PrivacyField.tsx @@ -2,7 +2,7 @@ import { cn } from '@/util/cn'; import { PRIVACY_OPTIONS } from 'constants/meeting-form/meetingConstants'; import { Check } from 'lucide-react'; import { Controller, useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; const PrivacyField = () => { const { diff --git a/src/app/meeting/_features/form/form-filed/RequireApprovalField.tsx b/src/app/meeting/_features/form/form-filed/RequireApprovalField.tsx index 2fcd84a3..78228533 100644 --- a/src/app/meeting/_features/form/form-filed/RequireApprovalField.tsx +++ b/src/app/meeting/_features/form/form-filed/RequireApprovalField.tsx @@ -2,7 +2,7 @@ import { cn } from '@/util/cn'; import { JOIN_METHODS } from 'constants/meeting-form/meetingConstants'; import { Check } from 'lucide-react'; import { Controller, useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; const RequireApprovalField = () => { const { diff --git a/src/app/meeting/_features/form/form-filed/TechStackField.tsx b/src/app/meeting/_features/form/form-filed/TechStackField.tsx index f21b5b20..dc551859 100644 --- a/src/app/meeting/_features/form/form-filed/TechStackField.tsx +++ b/src/app/meeting/_features/form/form-filed/TechStackField.tsx @@ -1,6 +1,6 @@ import TechSelector from '@/components/ui/tech-stack/TechSelector'; import { Controller, useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import { TECH_STACK_CONFIG, techStackValidation } from '../validation'; diff --git a/src/app/meeting/_features/form/form-filed/TitleField.tsx b/src/app/meeting/_features/form/form-filed/TitleField.tsx index cd342437..73f0546f 100644 --- a/src/app/meeting/_features/form/form-filed/TitleField.tsx +++ b/src/app/meeting/_features/form/form-filed/TitleField.tsx @@ -1,6 +1,6 @@ import { Input } from '@/components/ui/Input'; import { useFormContext } from 'react-hook-form'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import { meetingTitleValidation } from '../validation'; diff --git a/src/app/meeting/edit-meeting/[id]/page.tsx b/src/app/meeting/edit-meeting/[id]/page.tsx index 65e23bb7..3d8f5c3e 100644 --- a/src/app/meeting/edit-meeting/[id]/page.tsx +++ b/src/app/meeting/edit-meeting/[id]/page.tsx @@ -5,7 +5,7 @@ import { useQueryClient } from '@tanstack/react-query'; import { useEffect, useState } from 'react'; import { MeetingDetail } from 'service/api/meeting'; import { getMeetingDetail } from 'service/api/meeting'; -import { CreateMeetingPayload } from 'types/meetingForm'; +import { CreateMeetingPayload } from 'type-clyde/meeting'; import MeetingForm from '../../_features/form/MeetingForm'; diff --git a/src/app/signup/_features/EmailInput.tsx b/src/app/signup/_features/EmailInput.tsx index fa6d77a8..b8841956 100644 --- a/src/app/signup/_features/EmailInput.tsx +++ b/src/app/signup/_features/EmailInput.tsx @@ -6,9 +6,9 @@ import useDebounce from '@/hooks/useDebounde'; import { emailValidation } from '@/util/validation'; import { Dispatch, SetStateAction, useCallback, useEffect } from 'react'; import { useWatch } from 'react-hook-form'; -import { IInputProps, ISignupFormData } from 'types/auth'; +import { InputProps, SignupFormData } from 'type-clyde/auth/form'; -export interface IEmailInputProps extends IInputProps { +export interface IEmailInputProps extends InputProps { isEmailCheck: boolean; handleEmailCheck: () => void; setIsEmailCheck: Dispatch>; diff --git a/src/app/signup/_features/NameInput.tsx b/src/app/signup/_features/NameInput.tsx index 692291a6..f9e38fac 100644 --- a/src/app/signup/_features/NameInput.tsx +++ b/src/app/signup/_features/NameInput.tsx @@ -4,15 +4,9 @@ import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import useDebounce from '@/hooks/useDebounde'; import { nameValidation } from '@/util/validation'; -import { Dispatch, SetStateAction, useCallback, useEffect } from 'react'; +import { useCallback, useEffect } from 'react'; import { useWatch } from 'react-hook-form'; -import { IInputProps, ISignupFormData } from 'types/auth'; - -export interface INameInputProps extends IInputProps { - isNameCheck: boolean; - handleNameCheck: () => void; - setIsNameCheck: Dispatch>; -} +import { NameInputProps } from 'type-clyde/auth/form'; const NameInput = ({ register, @@ -22,7 +16,7 @@ const NameInput = ({ setIsNameCheck, control, trigger, -}: INameInputProps) => { +}: NameInputProps) => { const name = useWatch({ control, name: 'name' }); // 중복확인 로직 수행 diff --git a/src/app/signup/_features/PasswordCheckInput.tsx b/src/app/signup/_features/PasswordCheckInput.tsx index fa9bffaa..5908a0b6 100644 --- a/src/app/signup/_features/PasswordCheckInput.tsx +++ b/src/app/signup/_features/PasswordCheckInput.tsx @@ -5,8 +5,7 @@ import useDebounce from '@/hooks/useDebounde'; import { passwordCheckValidation } from '@/util/validation'; import { useCallback } from 'react'; import { useWatch } from 'react-hook-form'; - -import { IPasswordInputProps } from './PasswordInput'; +import { PasswordInputProps } from 'type-clyde/auth/form'; const PasswordCheckInput = ({ register, @@ -14,7 +13,7 @@ const PasswordCheckInput = ({ errors, control, trigger, -}: IPasswordInputProps) => { +}: PasswordInputProps) => { const password = useWatch({ control, name: 'password' }); const passwordCheck = useWatch({ control, name: 'passwordCheck' }); diff --git a/src/app/signup/_features/PasswordInput.tsx b/src/app/signup/_features/PasswordInput.tsx index 34d322db..baae055d 100644 --- a/src/app/signup/_features/PasswordInput.tsx +++ b/src/app/signup/_features/PasswordInput.tsx @@ -5,19 +5,7 @@ import useDebounce from '@/hooks/useDebounde'; import { passwordValidation } from '@/util/validation'; import { useCallback } from 'react'; import { useWatch } from 'react-hook-form'; -import { IInputProps, ISignupFormData } from 'types/auth'; - -export interface IPasswordInputProps extends IInputProps { - dirtyFields: Partial< - Readonly<{ - name?: boolean | undefined; - email?: boolean | undefined; - position?: boolean | undefined; - password?: boolean | undefined; - passwordCheck?: boolean | undefined; - }> - >; -} +import { PasswordInputProps } from 'type-clyde/auth/form'; const PasswordInput = ({ register, @@ -25,7 +13,7 @@ const PasswordInput = ({ trigger, dirtyFields, errors, -}: IPasswordInputProps) => { +}: PasswordInputProps) => { const password = useWatch({ control, name: 'password' }); useDebounce({ value: password, diff --git a/src/app/signup/_features/PositionInput.tsx b/src/app/signup/_features/PositionInput.tsx index 2314db28..9d103453 100644 --- a/src/app/signup/_features/PositionInput.tsx +++ b/src/app/signup/_features/PositionInput.tsx @@ -1,10 +1,11 @@ import { PositionSelect } from '@/components/common/PositionSelect'; import { positionValidation } from '@/util/validation'; import { useWatch } from 'react-hook-form'; -import { IInputProps, ISignupFormData } from 'types/auth'; +import { UserPosition } from 'type-clyde/auth/form'; +import { InputProps, SignupFormData } from 'type-clyde/auth/form'; -interface IPositionInputProps extends IInputProps { - handleClickPosition: (value: string) => void; +interface IPositionInputProps extends InputProps { + handleClickPosition: (value: UserPosition) => void; } const PositionInput = ({ @@ -13,7 +14,8 @@ const PositionInput = ({ errors, register, }: IPositionInputProps) => { - const position = useWatch({ control, name: 'position' }); + const position = useWatch({ control, name: 'position' }) as UserPosition; + return (