Skip to content

Commit fe5d00c

Browse files
authored
Merge pull request #360 from checkmo2025/fix-354
[fix] 모임 조설정페이지 수정 + [style] 책장 프로필없을 때 기본프로필
2 parents c0c67dc + 7733230 commit fe5d00c

File tree

9 files changed

+211
-85
lines changed

9 files changed

+211
-85
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import type { GetMeetingMembersPayload, GetMeetingMembersResult } from "../../types/Meeting/GetmeetingMember";
2+
import { axiosInstance } from "../axiosInstance";
3+
4+
export async function getMeetingMembers(
5+
{ meetingId, cursorId = null, size = 15 }: GetMeetingMembersPayload
6+
): Promise<GetMeetingMembersResult> {
7+
return await axiosInstance.get(
8+
`/meetings/${meetingId}/members`,
9+
{ params: { cursorId, size } }
10+
);
11+
}
Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ClubMember } from "../../types/Club/GetClubMembers";
1+
import type { MeetingMemberItem } from "../../types/Meeting/GetmeetingMember";
22
import type { MeetingTeamMutateRequest } from "../../types/Meeting/MeetingTeamManage";
33

44
// "1조" → 1, "A조" → 1, 그 외엔 groups 인덱스 기반
@@ -13,18 +13,16 @@ export function toTeamNumber(groupName: string, groups: string[]) {
1313
return idx >= 0 ? idx + 1 : 0;
1414
}
1515

16-
export function buildMeetingTeamMutateRequest( groupSelections: Record<string, ClubMember[]>,
17-
groups: string[]
16+
export function buildMeetingTeamMutateRequest(
17+
groupSelections: Record<string, MeetingMemberItem[]>
1818
): MeetingTeamMutateRequest {
1919
return {
20-
teamMemberDTOList: Object.entries(groupSelections)
21-
.map(([groupName, members]) => ({
22-
teamNumber: toTeamNumber(groupName, groups),
23-
nicknameList: members.map(m => m.basicInfo.nickname)
24-
25-
26-
}))
27-
.filter(x => x.teamNumber > 0 && x.nicknameList.length > 0)
20+
teamMemberDTOList: Object.entries(groupSelections).map(([groupName, members]) => {
21+
return {
22+
teamNumber: toTeamNumber(groupName, Object.keys(groupSelections)),
23+
nicknameList: members.map(member => member.memberInfo.nickname),
24+
};
25+
}),
2826

2927
};
3028
}

src/components/Shelf/ReviewSection.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ export default function ReviewSection({
149149
<div className="flex py-2 shadow rounded-2xl border-2 border-[var(--sub-color-2-brown,#EAE5E2)] w-full mb-3 transition-transform duration-300 hover:shadow-md">
150150
<div className="flex items-center justify-between h-[48px] w-[270px] flex-none ml-[12px] mr-[34px]">
151151
<img
152-
src={currentUser.profileImageUrl}
152+
src={currentUser.profileImageUrl || '/assets/ix_user-profile-filled.svg'}
153153
className="w-[48px] h-[48px] rounded-full object-cover"
154154
alt="프로필"
155155
/>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { useInfiniteQuery } from '@tanstack/react-query';
2+
import type { GetMeetingMembersResult } from '../../types/Meeting/GetmeetingMember';
3+
import { getMeetingMembers } from '../../apis/clubMeeting/GetmeetingMember';
4+
5+
6+
const qk = {
7+
meetingMembers: (meetingId: number, size: number) =>
8+
['meetingMembers', meetingId, size] as const,
9+
};
10+
11+
export function useGetInfinityMember(meetingId: number, size = 15) {
12+
return useInfiniteQuery<GetMeetingMembersResult, Error>({
13+
queryKey: qk.meetingMembers(meetingId, size),
14+
queryFn: ({ pageParam }) => {
15+
const cursor = (pageParam ?? null) as number | null;
16+
return getMeetingMembers({ meetingId, cursorId: cursor, size });
17+
},
18+
initialPageParam: null as number | null,
19+
getNextPageParam: (lastPage) =>
20+
lastPage.hasNext ? lastPage.nextCursor : undefined,
21+
select: (data) => {
22+
const flatMembers = data.pages.flatMap(p => p.members);
23+
const membership = data.pages[0]?.membership;
24+
return { ...data, flatMembers, membership };
25+
},
26+
staleTime: 30_000,
27+
gcTime: 5 * 60_000,
28+
});
29+
}

src/pages/BookClub/Shelf/ScoreDetailPage.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ export default function ScoreDetailPage() {
1515
useEffect(() => {
1616
const nickname = localStorage.getItem('nickname');
1717
const profileImageUrl = localStorage.getItem('profileImageUrl');
18-
if(!nickname || !profileImageUrl) {
19-
console.log("error처리")
20-
return;
18+
if(nickname) {
19+
setMynickname(nickname);
20+
2121
}
22-
setMynickname(nickname);
23-
setUrl(profileImageUrl);
22+
if(profileImageUrl) {
23+
setUrl(profileImageUrl);
24+
}
25+
2426
}, [])
2527

2628
return (

src/pages/BookClub/Shelf/ShelfDetailPage.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ export default function ShelfDetailPage() {
2020
useEffect(() => {
2121
const nickname = localStorage.getItem('nickname');
2222
const profileImageUrl = localStorage.getItem('profileImageUrl');
23-
if(!nickname || !profileImageUrl) {
24-
console.log("error처리")
25-
return;
23+
if(nickname) {
24+
setMynickname(nickname);
25+
26+
}
27+
if(profileImageUrl) {
28+
setUrl(profileImageUrl);
2629
}
27-
setMynickname(nickname);
28-
setUrl(profileImageUrl);
2930
}, [])
3031

3132
if (isLoading) return <div className = "font-[Pretendard] font-semibold text-[16px] text-[#8D8D8D]">로딩 중…</div>

src/pages/BookClub/Shelf/TopicDetailPage.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,13 @@ export default function ThemeDetailPage() {
3535
useEffect(() => {
3636
const nickname = localStorage.getItem('nickname');
3737
const profileImageUrl = localStorage.getItem('profileImageUrl');
38-
if(!nickname || !profileImageUrl) {
39-
console.log("error처리")
40-
return;
38+
if(nickname) {
39+
setMynickname(nickname);
40+
41+
}
42+
if(profileImageUrl) {
43+
setUrl(profileImageUrl);
4144
}
42-
setMynickname(nickname);
43-
setUrl(profileImageUrl);
4445
}, [])
4546

4647
useEffect(() => {
@@ -133,7 +134,7 @@ export default function ThemeDetailPage() {
133134
{/* 등록 영역 */}
134135
<div className=" py-2 flex shadow rounded-2xl border-2 border-[var(--sub-color-2-brown,#EAE5E2)] mb-3 transition-transform duration-300 hover:shadow-md">
135136
<div className="flex-shrink-0 items-center w-[222px] h-[48px] ml-[12px] flex gap-[19px] mr-[15px]">
136-
<img src={MyUrl} className="w-[48px] h-[48px] rounded-full object-cover" alt="프로필"/>
137+
<img src={MyUrl || '/assets/ix_user-profile-filled.svg'} className="w-[48px] h-[48px] rounded-full object-cover" alt="프로필"/>
137138
<div className="flex-1 font-semibold text-[15px] text-gray-800">
138139
{Mynickname}
139140
</div>

0 commit comments

Comments
 (0)