Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6a5b695
SortField 타입안정성 확보
clyde-yoonjae Mar 22, 2025
30ed1c4
UserPosition 타입 안정성 확보
clyde-yoonjae Mar 22, 2025
4ab3e90
리펙토링 용 type폴더 생성
clyde-yoonjae Mar 22, 2025
640a3f0
type폴더 위치 변경
clyde-yoonjae Mar 23, 2025
e1fbf09
인증인가 관련 타입 총 정리
clyde-yoonjae Mar 23, 2025
3046193
comment 타입 정리
clyde-yoonjae Mar 23, 2025
3da4906
미팅 생성 수정 폼 타입 정리
clyde-yoonjae Mar 23, 2025
8d0ed0a
tech-stack 타입 전환
clyde-yoonjae Mar 23, 2025
c484385
auth 타입 전환
clyde-yoonjae Mar 23, 2025
71555da
error 타입 전환
clyde-yoonjae Mar 23, 2025
3621b0c
globalts 타입 전환
clyde-yoonjae Mar 23, 2025
4214bc7
globalts 타입 추가
clyde-yoonjae Mar 23, 2025
854cdf5
미팅 생성 수정 관련 모든폼 타입 전환
clyde-yoonjae Mar 23, 2025
a1c65bc
빌드에러(타입) 수정 todo: paginated타입 하나로 통일
clyde-yoonjae Mar 23, 2025
ff2e393
paginated 타입 걷어내기
clyde-yoonjae Mar 23, 2025
d4d1575
myComment 타입 전환
clyde-yoonjae Mar 23, 2025
688bf21
Comment 타입해결(내장타입 주의)
clyde-yoonjae Mar 23, 2025
8135880
mypage타입 중복코드 chore(50%제거)
clyde-yoonjae Mar 24, 2025
1862e13
mypage타입 전부 전환
clyde-yoonjae Mar 24, 2025
b211329
myMeeting 타입 관심사 분리 및 기존파일 제거
clyde-yoonjae Mar 24, 2025
d57284b
myMeeting 타입 전부 전환
clyde-yoonjae Mar 24, 2025
4ceb24e
MeetingList 타입 전부 수정 및 전환
clyde-yoonjae Mar 24, 2025
a21a496
기존 type폴더 삭제
clyde-yoonjae Mar 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
4 changes: 2 additions & 2 deletions src/app/(user-page)/my-meeting/_features/ModalProfile.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<div className="p-4">
<div className="mb-4 flex gap-4">
Expand Down
5 changes: 3 additions & 2 deletions src/app/(user-page)/my-meeting/_features/ModalUserList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand All @@ -15,7 +16,7 @@ const ModalUserList = ({
showPublicSelect = false,
}: {
memberList: Member[];
currentUser: IBanner;
currentUser: Banner;
className?: string;
handlePrefetchProfile: (member: Member) => Promise<void>;
showPublicSelect?: boolean;
Expand Down
10 changes: 5 additions & 5 deletions src/app/(user-page)/my-meeting/_features/Participated.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -15,7 +15,7 @@ import PendingStatusChip from './PendingStatusChip';
import MeetingListSkeleton from './skeletons/SkeletonMeetingList';

interface IStatusOverlay {
meeting: IMyMeetingParticipated;
meeting: MyMeetingParticipated;
}

const Participated = () => {
Expand Down Expand Up @@ -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));
};

Expand Down
6 changes: 3 additions & 3 deletions src/app/(user-page)/my-meeting/_features/PendingSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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));
};

Expand Down
2 changes: 1 addition & 1 deletion src/app/(user-page)/my-meeting/_features/UserItem.tsx
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
2 changes: 1 addition & 1 deletion src/app/(user-page)/my-meeting/_features/Writable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
2 changes: 1 addition & 1 deletion src/app/(user-page)/my-meeting/_features/Written.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
4 changes: 2 additions & 2 deletions src/app/(user-page)/my-meeting/comments/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
6 changes: 3 additions & 3 deletions src/app/(user-page)/my-meeting/likes/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand All @@ -16,7 +16,7 @@ export default async function LikesPage() {
await queryClient.prefetchInfiniteQuery({
queryKey: myMeetingKeys.likes(),
queryFn: ({ pageParam }) => getMyMeetingLikes(pageParam),
getNextPageParam: (lastPage: Paginated<IMyMeetingLikes>) =>
getNextPageParam: (lastPage: Paginated<MyMeetingLikes>) =>
lastPage.nextCursor ?? false,
initialPageParam: 0,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
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';

Expand All @@ -30,7 +29,7 @@
]);

// 유저 정보 파악
const { data: currentUser, isLoading, error } = useBannerQueries();

Check warning on line 32 in src/app/(user-page)/my-meeting/my/@modal/(.)user-list/page.tsx

View workflow job for this annotation

GitHub Actions / check

'error' is assigned a value but never used. Allowed unused vars must match /^_/u

if (!currentUser || isLoading || !cachedMemberList) return;

Expand Down
17 changes: 8 additions & 9 deletions src/app/(user-page)/my-meeting/my/page.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import NotYet from '@/components/common/NotYet';
import { myMeetingKeys } from '@/hooks/queries/useMyMeetingQueries';
import { QUERY_KEYS } from '@/hooks/queries/useMyPageQueries';
import {
Expand All @@ -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';
Expand All @@ -44,7 +43,7 @@ export default async function Page({
await queryClient.prefetchInfiniteQuery({
queryKey: myMeetingKeys.manage(),
queryFn: ({ pageParam }) => getMyMeetingManage(pageParam),
getNextPageParam: (lastPage: Paginated<IMyMeetingManage>) =>
getNextPageParam: (lastPage: Paginated<MyMeetingManage>) =>
lastPage.nextCursor ?? false,
initialPageParam: 0,
});
Expand All @@ -54,14 +53,14 @@ export default async function Page({
queryClient.prefetchInfiniteQuery({
queryKey: myMeetingKeys.participated(),
queryFn: ({ pageParam }) => getMyMeetingParticipated(pageParam),
getNextPageParam: (lastPage: Paginated<IMyMeetingParticipated>) =>
getNextPageParam: (lastPage: Paginated<MyMeetingParticipated>) =>
lastPage.nextCursor ?? false,
initialPageParam: 0,
}),
queryClient.prefetchInfiniteQuery({
queryKey: myMeetingKeys.pending(),
queryFn: ({ pageParam }) => getMyMeetingPending(pageParam),
getNextPageParam: (lastPage: Paginated<IMyMeetingPending>) =>
getNextPageParam: (lastPage: Paginated<MyMeetingPending>) =>
lastPage.nextCursor ?? false,
initialPageParam: 0,
}),
Expand Down
6 changes: 3 additions & 3 deletions src/app/(user-page)/mypage/_features/BasicEdit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -16,7 +17,6 @@ import {
MAX_INTRO_LENGTH,
POSITION_OPTIONS,
} from '../../../../constants/mypage/mypageConstant';
import { IFormData } from '../../../../types/mypageTypes';

interface BasicEditProps {
onEditComplete: () => void;
Expand Down Expand Up @@ -45,7 +45,7 @@ const BasicEdit = ({ onEditComplete }: BasicEditProps) => {
setValue,
reset,
formState: { errors, isSubmitting },
} = useForm<IFormData>({
} = useForm<UserBaseInfo>({
defaultValues: {
name: '',
intro: '',
Expand Down Expand Up @@ -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;
Expand Down
7 changes: 3 additions & 4 deletions src/app/(user-page)/mypage/_features/ContactEdit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -20,7 +19,7 @@ const ContactEdit = ({ onEditComplete }: ContactEditProps) => {
handleSubmit,
reset,
formState: { errors, isSubmitting },
} = useForm<IContactInfoUpdateRequest>({
} = useForm<ContactInfo>({
defaultValues: {
phone: '',
kakao: '',
Expand Down Expand Up @@ -55,7 +54,7 @@ const ContactEdit = ({ onEditComplete }: ContactEditProps) => {
}, [profileData, reset]);

// 폼 제출 처리
const onSubmit = (data: IContactInfoUpdateRequest) => {
const onSubmit = (data: ContactInfo) => {
updateContact(data, {
onSuccess: () => {
onEditComplete();
Expand Down
7 changes: 3 additions & 4 deletions src/app/(user-page)/mypage/_features/PasswordEdit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -19,7 +18,7 @@ const PasswordEdit = ({ onEditComplete }: PasswordEditProps) => {
watch,
setError,
formState: { errors, isSubmitting },
} = useForm<IPasswordUpdateRequest>({
} = useForm<PasswordUpdateRequest>({
defaultValues: {
currentPassword: '',
newPassword: '',
Expand All @@ -35,7 +34,7 @@ const PasswordEdit = ({ onEditComplete }: PasswordEditProps) => {
useUpdatePasswordMutation();

// 폼 제출 처리
const onSubmit = (data: IPasswordUpdateRequest) => {
const onSubmit = (data: PasswordUpdateRequest) => {
// 비밀번호 일치 여부 확인
if (data.newPassword !== data.passwordCheck) {
setError('passwordCheck', {
Expand Down
2 changes: 1 addition & 1 deletion src/app/(user-page)/mypage/_features/TechStackEdit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
4 changes: 2 additions & 2 deletions src/app/login/_features/EmailInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,21 @@
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<ILoginFormData>) => {
}: InputProps<LoginFormData>) => {
const email = useWatch({ control, name: 'email' });

useDebounce({
value: email,
callBack: useCallback(() => {
trigger?.('email');
}, [email]),

Check warning on line 22 in src/app/login/_features/EmailInput.tsx

View workflow job for this annotation

GitHub Actions / check

React Hook useCallback has a missing dependency: 'trigger'. Either include it or remove the dependency array. If 'trigger' changes too often, find the parent component that defines it and wrap that definition in useCallback
});

return (
Expand Down
4 changes: 2 additions & 2 deletions src/app/login/_features/PasswordInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,21 @@
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<ILoginFormData>) => {
}: InputProps<LoginFormData>) => {
const password = useWatch({ control, name: 'password' });

useDebounce({
value: password,
callBack: useCallback(() => {
trigger?.('password');
}, [password]),

Check warning on line 22 in src/app/login/_features/PasswordInput.tsx

View workflow job for this annotation

GitHub Actions / check

React Hook useCallback has a missing dependency: 'trigger'. Either include it or remove the dependency array. If 'trigger' changes too often, find the parent component that defines it and wrap that definition in useCallback
});

return (
Expand Down
9 changes: 3 additions & 6 deletions src/app/meeting/[category]/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
6 changes: 4 additions & 2 deletions src/app/meeting/[category]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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,
};
Expand Down
Loading
Loading