From 7a6df157195d95964fb3c15804165df0391402e1 Mon Sep 17 00:00:00 2001 From: fr0gydev Date: Thu, 21 Aug 2025 12:32:51 +0900 Subject: [PATCH 1/7] =?UTF-8?q?fix:=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BookSearchBottomSheet/BookSearchBottomSheet.styled.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/common/BookSearchBottomSheet/BookSearchBottomSheet.styled.ts b/src/components/common/BookSearchBottomSheet/BookSearchBottomSheet.styled.ts index 68803dd3..386dc41f 100644 --- a/src/components/common/BookSearchBottomSheet/BookSearchBottomSheet.styled.ts +++ b/src/components/common/BookSearchBottomSheet/BookSearchBottomSheet.styled.ts @@ -249,7 +249,7 @@ export const EmptyContainer = styled.div` `; export const EmptyText = styled.p` - color: #e0e0e0;}; + color: #e0e0e0; font-size: ${typography.fontSize.sm}; font-weight: ${typography.fontWeight.regular}; margin: 0; From fad8ebf0f5b7c87e47aa29db1b6d0e2dae7f2e44 Mon Sep 17 00:00:00 2001 From: fr0gydev Date: Thu, 21 Aug 2025 14:09:11 +0900 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20=EC=BB=A4=EC=84=9C=20=EC=83=89=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/recordwrite/PageRangeSection.styled.ts | 3 +-- src/pages/pollwrite/PollWrite.styled.ts | 5 +++++ src/pages/recordwrite/RecordWrite.styled.ts | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/recordwrite/PageRangeSection.styled.ts b/src/components/recordwrite/PageRangeSection.styled.ts index 87d06c11..425a6aa4 100644 --- a/src/components/recordwrite/PageRangeSection.styled.ts +++ b/src/components/recordwrite/PageRangeSection.styled.ts @@ -1,5 +1,5 @@ import styled from '@emotion/styled'; -import { colors, typography, semanticColors } from '../../styles/global/global'; +import { typography, semanticColors } from '../../styles/global/global'; export const Section = styled.div` display: flex; @@ -53,7 +53,6 @@ export const PageInput = styled.input<{ inputLength?: number }>` width: ${props => (props.inputLength ? `${Math.max(27, props.inputLength * 8)}px` : '27px')}; padding: 0; margin: 0; - caret-color: ${colors.white}; transition: width 0.2s ease; flex-shrink: 0; diff --git a/src/pages/pollwrite/PollWrite.styled.ts b/src/pages/pollwrite/PollWrite.styled.ts index 70501609..fb776ea5 100644 --- a/src/pages/pollwrite/PollWrite.styled.ts +++ b/src/pages/pollwrite/PollWrite.styled.ts @@ -12,4 +12,9 @@ export const Container = styled.div` padding: 96px 20px 100px 20px; box-sizing: border-box; gap: 32px; + + /* 투표작성 페이지에서는 기본 커서 색상 사용 */ + input, textarea { + caret-color: auto; + } `; diff --git a/src/pages/recordwrite/RecordWrite.styled.ts b/src/pages/recordwrite/RecordWrite.styled.ts index 70501609..5968504c 100644 --- a/src/pages/recordwrite/RecordWrite.styled.ts +++ b/src/pages/recordwrite/RecordWrite.styled.ts @@ -12,4 +12,9 @@ export const Container = styled.div` padding: 96px 20px 100px 20px; box-sizing: border-box; gap: 32px; + + /* 기록작성 페이지에서는 기본 커서 색상 사용 */ + input, textarea { + caret-color: auto; + } `; From eaf4f016c9c8b1f751a56cfdd512c0a43ccac9c1 Mon Sep 17 00:00:00 2001 From: fr0gydev Date: Thu, 21 Aug 2025 14:21:33 +0900 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20=EC=BB=A4=EC=84=9C=20=EC=83=89=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC=20-=20=ED=88=AC=ED=91=9C=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20=EC=9E=91=EC=84=B1=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EB=8F=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/creategroup/RoomInfoSection.styled.ts | 1 + src/components/createpost/PostContentSection.styled.ts | 3 ++- src/pages/pollwrite/PollWrite.styled.ts | 4 ---- src/pages/recordwrite/RecordWrite.styled.ts | 4 ---- 4 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/components/creategroup/RoomInfoSection.styled.ts b/src/components/creategroup/RoomInfoSection.styled.ts index d1b0c68d..de1792a3 100644 --- a/src/components/creategroup/RoomInfoSection.styled.ts +++ b/src/components/creategroup/RoomInfoSection.styled.ts @@ -20,6 +20,7 @@ export const TextArea = styled.textarea` font-weight: ${typography.fontWeight.regular}; padding: 0; margin: 0; + caret-color: ${colors.neongreen}; &::placeholder { color: ${colors.grey[300]}; diff --git a/src/components/createpost/PostContentSection.styled.ts b/src/components/createpost/PostContentSection.styled.ts index a1ac59cf..746f66a9 100644 --- a/src/components/createpost/PostContentSection.styled.ts +++ b/src/components/createpost/PostContentSection.styled.ts @@ -1,5 +1,5 @@ import styled from '@emotion/styled'; -import { typography, semanticColors } from '../../styles/global/global'; +import { typography, semanticColors, colors } from '../../styles/global/global'; export const TextAreaBox = styled.div` position: relative; @@ -21,6 +21,7 @@ export const TextArea = styled.textarea<{ readOnly?: boolean }>` overflow: hidden; cursor: ${props => (props.readOnly ? 'not-allowed' : 'text')}; padding: 0; + caret-color: ${colors.neongreen}; &::placeholder { color: ${semanticColors.text.ghost}; diff --git a/src/pages/pollwrite/PollWrite.styled.ts b/src/pages/pollwrite/PollWrite.styled.ts index fb776ea5..59441edd 100644 --- a/src/pages/pollwrite/PollWrite.styled.ts +++ b/src/pages/pollwrite/PollWrite.styled.ts @@ -13,8 +13,4 @@ export const Container = styled.div` box-sizing: border-box; gap: 32px; - /* 투표작성 페이지에서는 기본 커서 색상 사용 */ - input, textarea { - caret-color: auto; - } `; diff --git a/src/pages/recordwrite/RecordWrite.styled.ts b/src/pages/recordwrite/RecordWrite.styled.ts index 5968504c..59441edd 100644 --- a/src/pages/recordwrite/RecordWrite.styled.ts +++ b/src/pages/recordwrite/RecordWrite.styled.ts @@ -13,8 +13,4 @@ export const Container = styled.div` box-sizing: border-box; gap: 32px; - /* 기록작성 페이지에서는 기본 커서 색상 사용 */ - input, textarea { - caret-color: auto; - } `; From 3dee8a42a01742d3962d467ef24fafc7096f49bf Mon Sep 17 00:00:00 2001 From: fr0gydev Date: Thu, 21 Aug 2025 14:28:38 +0900 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20width=20=EA=B3=84=EC=82=B0=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/recordwrite/PageRangeSection.styled.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/recordwrite/PageRangeSection.styled.ts b/src/components/recordwrite/PageRangeSection.styled.ts index 425a6aa4..f4191a1b 100644 --- a/src/components/recordwrite/PageRangeSection.styled.ts +++ b/src/components/recordwrite/PageRangeSection.styled.ts @@ -50,7 +50,10 @@ export const PageInput = styled.input<{ inputLength?: number }>` font-size: ${typography.fontSize.sm}; font-weight: ${typography.fontWeight.regular}; font-family: ${typography.fontFamily.primary}; - width: ${props => (props.inputLength ? `${Math.max(27, props.inputLength * 8)}px` : '27px')}; + width: ${props => { + if (!props.inputLength) return '12px'; + return `${Math.max(9, props.inputLength * 8)}px`; + }}; padding: 0; margin: 0; transition: width 0.2s ease; From f1c92c97b1c8161c92fc460ca80725a09e621cec Mon Sep 17 00:00:00 2001 From: fr0gydev Date: Thu, 21 Aug 2025 14:32:45 +0900 Subject: [PATCH 5/7] =?UTF-8?q?fix:=20=ED=94=BC=EB=93=9C=20=EA=B8=80=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EC=9E=91=EC=84=B1=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A1=A4=EB=B0=94=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../createpost/PostContentSection.styled.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/components/createpost/PostContentSection.styled.ts b/src/components/createpost/PostContentSection.styled.ts index 746f66a9..1fe62c17 100644 --- a/src/components/createpost/PostContentSection.styled.ts +++ b/src/components/createpost/PostContentSection.styled.ts @@ -18,11 +18,33 @@ export const TextArea = styled.textarea<{ readOnly?: boolean }>` resize: none; outline: none; border: none; - overflow: hidden; + overflow-y: auto; cursor: ${props => (props.readOnly ? 'not-allowed' : 'text')}; padding: 0; caret-color: ${colors.neongreen}; + /* 얇은 스크롤바 스타일 */ + &::-webkit-scrollbar { + width: 4px; + } + + &::-webkit-scrollbar-track { + background: transparent; + } + + &::-webkit-scrollbar-thumb { + background-color: ${semanticColors.text.ghost}; + border-radius: 2px; + } + + &::-webkit-scrollbar-thumb:hover { + background-color: ${semanticColors.text.tertiary}; + } + + /* Firefox 스크롤바 스타일 */ + scrollbar-width: thin; + scrollbar-color: ${semanticColors.text.ghost} transparent; + &::placeholder { color: ${semanticColors.text.ghost}; } From 3af6b4c3ab1e4b1bc7e2db49da492e51e85aaae5 Mon Sep 17 00:00:00 2001 From: fr0gydev Date: Thu, 21 Aug 2025 14:48:13 +0900 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20=EB=A9=94=EB=AA=A8=EB=A6=AC=20?= =?UTF-8?q?=EB=88=84=EC=88=98=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/createpost/PhotoSection.tsx | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/components/createpost/PhotoSection.tsx b/src/components/createpost/PhotoSection.tsx index d95911e1..79b7c9c8 100644 --- a/src/components/createpost/PhotoSection.tsx +++ b/src/components/createpost/PhotoSection.tsx @@ -1,4 +1,4 @@ -import { useRef } from 'react'; +import { useRef, useMemo, useEffect } from 'react'; import { Section, SectionTitle } from '../../pages/group/CommonSection.styled'; import { PhotoContainer, @@ -49,9 +49,17 @@ const PhotoSection = ({ e.target.value = ''; }; - const createImageUrl = (file: File) => { - return URL.createObjectURL(file); - }; + // 사진 파일들을 blob URL로 변환 (메모리 누수 방지) + const photoUrls = useMemo(() => { + return photos.map(file => URL.createObjectURL(file)); + }, [photos]); + + // 컴포넌트 언마운트 또는 photos 변경 시 기존 blob URL 해제 + useEffect(() => { + return () => { + photoUrls.forEach(url => URL.revokeObjectURL(url)); + }; + }, [photoUrls]); const totalImageCount = existingImageUrls.length + photos.length; const isDisabled = totalImageCount >= 3 || readOnly || isEditMode; @@ -81,12 +89,12 @@ const PhotoSection = ({ ))} - {photos.map((photo, index) => ( + {photos.map((_, index) => (
- + {!readOnly && ( onPhotoRemove(index)}> 삭제 From 656b32aec83e3635da0c968d924a08a57a64408e Mon Sep 17 00:00:00 2001 From: fr0gydev Date: Thu, 21 Aug 2025 14:55:11 +0900 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/rooms/getRoomMembers.ts | 3 +++ src/components/members/MemberList.tsx | 16 ++++++++++------ src/pages/groupMembers/GroupMembers.tsx | 10 ++++++++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/api/rooms/getRoomMembers.ts b/src/api/rooms/getRoomMembers.ts index 50f136be..513f2d0a 100644 --- a/src/api/rooms/getRoomMembers.ts +++ b/src/api/rooms/getRoomMembers.ts @@ -7,6 +7,7 @@ export interface RoomMember { imageUrl: string; aliasName: string; followerCount: number; + isMyself: boolean; } // 독서메이트 조회 응답 타입 @@ -26,6 +27,7 @@ export interface Member { role: string; followersCount?: number; profileImageUrl?: string; + isMyself?: boolean; } export const convertRoomMembersToMembers = (roomMembers: RoomMember[]): Member[] => { @@ -36,6 +38,7 @@ export const convertRoomMembersToMembers = (roomMembers: RoomMember[]): Member[] role: member.aliasName || '독서메이트', followersCount: member.followerCount || 0, profileImageUrl: member.imageUrl || undefined, + isMyself: member.isMyself, }; return convertedMember; diff --git a/src/components/members/MemberList.tsx b/src/components/members/MemberList.tsx index b50d4347..ffd7bb29 100644 --- a/src/components/members/MemberList.tsx +++ b/src/components/members/MemberList.tsx @@ -23,12 +23,16 @@ interface MemberListProps { const MemberList = ({ members, onMemberClick }: MemberListProps) => { const navigate = useNavigate(); - const handleMemberClick = (memberId: string) => { + const handleMemberClick = (member: Member) => { if (onMemberClick) { - onMemberClick(memberId); + onMemberClick(member.id); } else { - // 기본 동작: 개별 유저 페이지로 이동 - navigate(`/otherfeed/${memberId}`); + // isMyself가 true면 본인 프로필 페이지로, 아니면 다른 유저 페이지로 이동 + if (member.isMyself) { + navigate(`/myfeed/${member.id}`); + } else { + navigate(`/otherfeed/${member.id}`); + } } }; @@ -39,11 +43,11 @@ const MemberList = ({ members, onMemberClick }: MemberListProps) => { key={member.id} role="button" tabIndex={0} - onClick={() => handleMemberClick(member.id)} + onClick={() => handleMemberClick(member)} onKeyDown={(e: KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); - handleMemberClick(member.id); + handleMemberClick(member); } }} > diff --git a/src/pages/groupMembers/GroupMembers.tsx b/src/pages/groupMembers/GroupMembers.tsx index c429263a..17aba5d1 100644 --- a/src/pages/groupMembers/GroupMembers.tsx +++ b/src/pages/groupMembers/GroupMembers.tsx @@ -65,8 +65,14 @@ const GroupMembers = () => { }; const handleMemberClick = (memberId: string) => { - // 특정 사용자 페이지로 이동 - navigate(`/otherfeed/${memberId}`); + // MemberList 컴포넌트에서 isMyself에 따른 네비게이션 처리를 담당하므로 + // 여기서는 기본 동작을 유지 + const member = members.find(m => m.id === memberId); + if (member?.isMyself) { + navigate(`/myfeed/${memberId}`); + } else { + navigate(`/otherfeed/${memberId}`); + } }; // 로딩 상태