From 1ab0db0c935a37185dfd27bdd5afa03864de2a8a Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 21:21:15 +0900 Subject: [PATCH 01/15] =?UTF-8?q?[refactor]:=20=ED=94=BC=EB=93=9C=20?= =?UTF-8?q?=EB=8C=93=EA=B8=80=EC=97=90=EC=84=9C=20=EB=8C=93=EA=B8=80?= =?UTF-8?q?=EC=B0=BD=20=EC=95=88=EC=98=AC=EB=9D=BC=EC=98=A4=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/feed/screen/FeedCommentScreen.kt | 345 +++++++++--------- 1 file changed, 175 insertions(+), 170 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt index c2ba0c71..67e04356 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt @@ -58,6 +58,7 @@ import com.texthip.thip.ui.group.room.mock.MenuBottomSheetItem import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography +import com.texthip.thip.utils.rooms.advancedImePadding import kotlinx.coroutines.delay @Composable @@ -132,202 +133,206 @@ fun FeedCommentScreen( val focusManager = LocalFocusManager.current - Box(modifier = Modifier.fillMaxSize()) { + Box( + modifier = Modifier + .fillMaxSize() + .advancedImePadding() + ) { Box( - modifier = if (isBottomSheetVisible || showDialog) { - Modifier - .fillMaxSize() - .blur(5.dp) - } else { - Modifier.fillMaxSize() - } - // 바깥 터치 시 키보드 숨기기 - .pointerInput(Unit) { - detectTapGestures(onTap = { - focusManager.clearFocus() - selectedCommentId = null - }) + modifier = if (isBottomSheetVisible || showDialog) { + Modifier + .fillMaxSize() + .blur(5.dp) + } else { + Modifier.fillMaxSize() } - ) { - DefaultTopAppBar( - isRightIconVisible = true, - isTitleVisible = false, - onLeftClick = onNavigateBack, - onRightClick = { isBottomSheetVisible = true }, - ) - - LazyColumn( - modifier = modifier - .fillMaxWidth() - .padding(top = 56.dp), - contentPadding = PaddingValues(bottom = 20.dp) + // 바깥 터치 시 키보드 숨기기 + .pointerInput(Unit) { + detectTapGestures(onTap = { + focusManager.clearFocus() + selectedCommentId = null + }) + } ) { - // 상단 피드 - item { - Column { - ProfileBar( - modifier = Modifier.padding(20.dp), - profileImage = feedDetail.creatorProfileImageUrl ?: "", - topText = feedDetail.creatorNickname, - bottomText = feedDetail.aliasName, - showSubscriberInfo = false, - hoursAgo = feedDetail.postDate - ) - Column( - Modifier - .fillMaxWidth() - .padding(vertical = 16.dp, horizontal = 20.dp) - ) { - ActionBookButton( - bookTitle = feedDetail.bookTitle, - bookAuthor = feedDetail.bookAuthor, - onClick = {} + DefaultTopAppBar( + isRightIconVisible = true, + isTitleVisible = false, + onLeftClick = onNavigateBack, + onRightClick = { isBottomSheetVisible = true }, + ) + + LazyColumn( + modifier = modifier + .fillMaxWidth() + .padding(top = 56.dp), + contentPadding = PaddingValues(bottom = 20.dp) + ) { + // 상단 피드 + item { + Column { + ProfileBar( + modifier = Modifier.padding(20.dp), + profileImage = feedDetail.creatorProfileImageUrl ?: "", + topText = feedDetail.creatorNickname, + bottomText = feedDetail.aliasName, + showSubscriberInfo = false, + hoursAgo = feedDetail.postDate ) - } - Text( - text = feedDetail.contentBody, - style = typography.feedcopy_r400_s14_h20, - color = colors.White, - modifier = Modifier - .fillMaxWidth() - .padding(bottom = 16.dp, start = 20.dp, end = 20.dp) - ) - if (images.isNotEmpty()) { - LazyRow( + Column( Modifier .fillMaxWidth() - .padding(start = 20.dp, bottom = 16.dp), - verticalAlignment = Alignment.CenterVertically + .padding(vertical = 16.dp, horizontal = 20.dp) ) { - itemsIndexed(images.take(3)) { index, imageUrl -> - AsyncImage( - model = imageUrl, - contentDescription = null, - modifier = Modifier - .padding(end = 16.dp) - .size(200.dp) - .clickable { - selectedImageIndex = index - showImageViewer = true - }, - contentScale = ContentScale.Crop - ) - } + ActionBookButton( + bookTitle = feedDetail.bookTitle, + bookAuthor = feedDetail.bookAuthor, + onClick = {} + ) } - } - if (feedDetail.tagList.isNotEmpty()) { - Row( - Modifier + Text( + text = feedDetail.contentBody, + style = typography.feedcopy_r400_s14_h20, + color = colors.White, + modifier = Modifier .fillMaxWidth() - .padding(bottom = 16.dp, start = 20.dp, end = 20.dp), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - feedDetail.tagList.forEach { tag -> - OptionChipButton( - text = "#$tag", - isFilled = false, - isSelected = false, - onClick = {}) + .padding(bottom = 16.dp, start = 20.dp, end = 20.dp) + ) + if (images.isNotEmpty()) { + LazyRow( + Modifier + .fillMaxWidth() + .padding(start = 20.dp, bottom = 16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + itemsIndexed(images.take(3)) { index, imageUrl -> + AsyncImage( + model = imageUrl, + contentDescription = null, + modifier = Modifier + .padding(end = 16.dp) + .size(200.dp) + .clickable { + selectedImageIndex = index + showImageViewer = true + }, + contentScale = ContentScale.Crop + ) + } + } + } + if (feedDetail.tagList.isNotEmpty()) { + Row( + Modifier + .fillMaxWidth() + .padding(bottom = 16.dp, start = 20.dp, end = 20.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + feedDetail.tagList.forEach { tag -> + OptionChipButton( + text = "#$tag", + isFilled = false, + isSelected = false, + onClick = {}) + } } } + HorizontalDivider(color = colors.DarkGrey03, thickness = 10.dp) } - HorizontalDivider(color = colors.DarkGrey03, thickness = 10.dp) } - } - when { - commentsUiState.isLoading -> { - item { - Box( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 40.dp), - contentAlignment = Alignment.Center - ) { - CircularProgressIndicator(color = colors.White) + when { + commentsUiState.isLoading -> { + item { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 40.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator(color = colors.White) + } } } - } - // 댓글 없음 - commentsUiState.comments.isEmpty() -> { - item { - Column( - modifier = Modifier - .fillMaxWidth() - .height(400.dp), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text( - text = stringResource(R.string.no_comments_yet), - style = typography.smalltitle_sb600_s18_h24, - color = colors.White - ) - Spacer(modifier = Modifier.height(8.dp)) - Text( - text = stringResource(R.string.no_comment_subtext), - style = typography.copy_r400_s14, - color = colors.Grey - ) + // 댓글 없음 + commentsUiState.comments.isEmpty() -> { + item { + Column( + modifier = Modifier + .fillMaxWidth() + .height(400.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.no_comments_yet), + style = typography.smalltitle_sb600_s18_h24, + color = colors.White + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.no_comment_subtext), + style = typography.copy_r400_s14, + color = colors.Grey + ) + } } } - } - else -> { - items( - items = commentsUiState.comments, - key = { comment -> comment.commentId ?: comment.hashCode() } - ) { commentItem -> - CommentSection( - commentItem = commentItem, - actionMode = CommentActionMode.POPUP, - selectedCommentId = selectedCommentId, - onEvent = commentsViewModel::onEvent, - onReplyClick = { commentId, nickname -> - replyingToCommentId = commentId - replyingToNickname = nickname - selectedCommentId = null - }, - onCommentLongPress = { comment -> - selectedCommentId = comment.commentId - }, - onReplyLongPress = { reply -> - selectedCommentId = reply.commentId - }, - onDismissPopup = { - selectedCommentId = null - } - ) + else -> { + items( + items = commentsUiState.comments, + key = { comment -> comment.commentId ?: comment.hashCode() } + ) { commentItem -> + CommentSection( + commentItem = commentItem, + actionMode = CommentActionMode.POPUP, + selectedCommentId = selectedCommentId, + onEvent = commentsViewModel::onEvent, + onReplyClick = { commentId, nickname -> + replyingToCommentId = commentId + replyingToNickname = nickname + selectedCommentId = null + }, + onCommentLongPress = { comment -> + selectedCommentId = comment.commentId + }, + onReplyLongPress = { reply -> + selectedCommentId = reply.commentId + }, + onDismissPopup = { + selectedCommentId = null + } + ) + } } } } - } - // 댓글 입력창 - CommentTextField( - modifier = Modifier.align(Alignment.BottomCenter), - input = commentInput, - hint = stringResource(R.string.reply_to), - onInputChange = { commentInput = it }, - onSendClick = { - if (commentInput.isNotBlank()) { - commentsViewModel.onEvent( - CommentsEvent.CreateComment( - content = commentInput, - parentId = replyingToCommentId + // 댓글 입력창 + CommentTextField( + modifier = Modifier.align(Alignment.BottomCenter), + input = commentInput, + hint = stringResource(R.string.reply_to), + onInputChange = { commentInput = it }, + onSendClick = { + if (commentInput.isNotBlank()) { + commentsViewModel.onEvent( + CommentsEvent.CreateComment( + content = commentInput, + parentId = replyingToCommentId + ) ) - ) - commentInput = "" + commentInput = "" + replyingToCommentId = null + replyingToNickname = null + focusManager.clearFocus() + } + }, + replyTo = replyingToNickname, + onCancelReply = { replyingToCommentId = null replyingToNickname = null - focusManager.clearFocus() } - }, - replyTo = replyingToNickname, - onCancelReply = { - replyingToCommentId = null - replyingToNickname = null - } - ) + ) } // 신고 완료 토스트 From 81ed88963f92906136d3c5bc8b204219513102f2 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 21:38:00 +0900 Subject: [PATCH 02/15] =?UTF-8?q?[refactor]:=20=ED=94=BC=EB=93=9C=20?= =?UTF-8?q?=EB=8C=93=EA=B8=80=20=ED=95=98=EB=8B=A8=EB=B6=80=20=EC=9E=98?= =?UTF-8?q?=EB=A6=AC=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20?= =?UTF-8?q?(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/feed/screen/FeedCommentScreen.kt | 470 +++++++++--------- 1 file changed, 236 insertions(+), 234 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt index 67e04356..7e36ecb2 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt @@ -154,277 +154,279 @@ fun FeedCommentScreen( }) } ) { - DefaultTopAppBar( - isRightIconVisible = true, - isTitleVisible = false, - onLeftClick = onNavigateBack, - onRightClick = { isBottomSheetVisible = true }, - ) + Column(modifier = Modifier.fillMaxSize()) { + DefaultTopAppBar( + isRightIconVisible = true, + isTitleVisible = false, + onLeftClick = onNavigateBack, + onRightClick = { isBottomSheetVisible = true }, + ) - LazyColumn( - modifier = modifier - .fillMaxWidth() - .padding(top = 56.dp), - contentPadding = PaddingValues(bottom = 20.dp) - ) { - // 상단 피드 - item { - Column { - ProfileBar( - modifier = Modifier.padding(20.dp), - profileImage = feedDetail.creatorProfileImageUrl ?: "", - topText = feedDetail.creatorNickname, - bottomText = feedDetail.aliasName, - showSubscriberInfo = false, - hoursAgo = feedDetail.postDate - ) - Column( - Modifier - .fillMaxWidth() - .padding(vertical = 16.dp, horizontal = 20.dp) - ) { - ActionBookButton( - bookTitle = feedDetail.bookTitle, - bookAuthor = feedDetail.bookAuthor, - onClick = {} + LazyColumn( + modifier = modifier + .fillMaxWidth() + .weight(1f), + contentPadding = PaddingValues(bottom = 20.dp) + ) { + // 상단 피드 + item { + Column { + ProfileBar( + modifier = Modifier.padding(20.dp), + profileImage = feedDetail.creatorProfileImageUrl ?: "", + topText = feedDetail.creatorNickname, + bottomText = feedDetail.aliasName, + showSubscriberInfo = false, + hoursAgo = feedDetail.postDate ) - } - Text( - text = feedDetail.contentBody, - style = typography.feedcopy_r400_s14_h20, - color = colors.White, - modifier = Modifier - .fillMaxWidth() - .padding(bottom = 16.dp, start = 20.dp, end = 20.dp) - ) - if (images.isNotEmpty()) { - LazyRow( + Column( Modifier .fillMaxWidth() - .padding(start = 20.dp, bottom = 16.dp), - verticalAlignment = Alignment.CenterVertically + .padding(vertical = 16.dp, horizontal = 20.dp) ) { - itemsIndexed(images.take(3)) { index, imageUrl -> - AsyncImage( - model = imageUrl, - contentDescription = null, - modifier = Modifier - .padding(end = 16.dp) - .size(200.dp) - .clickable { - selectedImageIndex = index - showImageViewer = true - }, - contentScale = ContentScale.Crop - ) - } + ActionBookButton( + bookTitle = feedDetail.bookTitle, + bookAuthor = feedDetail.bookAuthor, + onClick = {} + ) } - } - if (feedDetail.tagList.isNotEmpty()) { - Row( - Modifier + Text( + text = feedDetail.contentBody, + style = typography.feedcopy_r400_s14_h20, + color = colors.White, + modifier = Modifier .fillMaxWidth() - .padding(bottom = 16.dp, start = 20.dp, end = 20.dp), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - feedDetail.tagList.forEach { tag -> - OptionChipButton( - text = "#$tag", - isFilled = false, - isSelected = false, - onClick = {}) + .padding(bottom = 16.dp, start = 20.dp, end = 20.dp) + ) + if (images.isNotEmpty()) { + LazyRow( + Modifier + .fillMaxWidth() + .padding(start = 20.dp, bottom = 16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + itemsIndexed(images.take(3)) { index, imageUrl -> + AsyncImage( + model = imageUrl, + contentDescription = null, + modifier = Modifier + .padding(end = 16.dp) + .size(200.dp) + .clickable { + selectedImageIndex = index + showImageViewer = true + }, + contentScale = ContentScale.Crop + ) + } } } + if (feedDetail.tagList.isNotEmpty()) { + Row( + Modifier + .fillMaxWidth() + .padding(bottom = 16.dp, start = 20.dp, end = 20.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + feedDetail.tagList.forEach { tag -> + OptionChipButton( + text = "#$tag", + isFilled = false, + isSelected = false, + onClick = {}) + } + } + } + HorizontalDivider(color = colors.DarkGrey03, thickness = 10.dp) } - HorizontalDivider(color = colors.DarkGrey03, thickness = 10.dp) } - } - when { - commentsUiState.isLoading -> { - item { - Box( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 40.dp), - contentAlignment = Alignment.Center - ) { - CircularProgressIndicator(color = colors.White) + when { + commentsUiState.isLoading -> { + item { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 40.dp), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator(color = colors.White) + } } } - } - // 댓글 없음 - commentsUiState.comments.isEmpty() -> { - item { - Column( - modifier = Modifier - .fillMaxWidth() - .height(400.dp), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text( - text = stringResource(R.string.no_comments_yet), - style = typography.smalltitle_sb600_s18_h24, - color = colors.White - ) - Spacer(modifier = Modifier.height(8.dp)) - Text( - text = stringResource(R.string.no_comment_subtext), - style = typography.copy_r400_s14, - color = colors.Grey - ) + // 댓글 없음 + commentsUiState.comments.isEmpty() -> { + item { + Column( + modifier = Modifier + .fillMaxWidth() + .height(400.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.no_comments_yet), + style = typography.smalltitle_sb600_s18_h24, + color = colors.White + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = stringResource(R.string.no_comment_subtext), + style = typography.copy_r400_s14, + color = colors.Grey + ) + } } } - } - else -> { - items( - items = commentsUiState.comments, - key = { comment -> comment.commentId ?: comment.hashCode() } - ) { commentItem -> - CommentSection( - commentItem = commentItem, - actionMode = CommentActionMode.POPUP, - selectedCommentId = selectedCommentId, - onEvent = commentsViewModel::onEvent, - onReplyClick = { commentId, nickname -> - replyingToCommentId = commentId - replyingToNickname = nickname - selectedCommentId = null - }, - onCommentLongPress = { comment -> - selectedCommentId = comment.commentId - }, - onReplyLongPress = { reply -> - selectedCommentId = reply.commentId - }, - onDismissPopup = { - selectedCommentId = null - } - ) + else -> { + items( + items = commentsUiState.comments, + key = { comment -> comment.commentId ?: comment.hashCode() } + ) { commentItem -> + CommentSection( + commentItem = commentItem, + actionMode = CommentActionMode.POPUP, + selectedCommentId = selectedCommentId, + onEvent = commentsViewModel::onEvent, + onReplyClick = { commentId, nickname -> + replyingToCommentId = commentId + replyingToNickname = nickname + selectedCommentId = null + }, + onCommentLongPress = { comment -> + selectedCommentId = comment.commentId + }, + onReplyLongPress = { reply -> + selectedCommentId = reply.commentId + }, + onDismissPopup = { + selectedCommentId = null + } + ) + } } } } - } - // 댓글 입력창 - CommentTextField( - modifier = Modifier.align(Alignment.BottomCenter), - input = commentInput, - hint = stringResource(R.string.reply_to), - onInputChange = { commentInput = it }, - onSendClick = { - if (commentInput.isNotBlank()) { - commentsViewModel.onEvent( - CommentsEvent.CreateComment( - content = commentInput, - parentId = replyingToCommentId + // 댓글 입력창 + CommentTextField( +// modifier = Modifier.align(Alignment.BottomCenter), + input = commentInput, + hint = stringResource(R.string.reply_to), + onInputChange = { commentInput = it }, + onSendClick = { + if (commentInput.isNotBlank()) { + commentsViewModel.onEvent( + CommentsEvent.CreateComment( + content = commentInput, + parentId = replyingToCommentId + ) ) - ) - commentInput = "" + commentInput = "" + replyingToCommentId = null + replyingToNickname = null + focusManager.clearFocus() + } + }, + replyTo = replyingToNickname, + onCancelReply = { replyingToCommentId = null replyingToNickname = null - focusManager.clearFocus() } - }, - replyTo = replyingToNickname, - onCancelReply = { - replyingToCommentId = null - replyingToNickname = null - } - ) - } + ) + } - // 신고 완료 토스트 - if (showToast) { - ToastWithDate( - message = "게시글 신고를 완료했어요.", - modifier = Modifier - .align(Alignment.TopCenter) - .padding(horizontal = 20.dp, vertical = 16.dp) - .zIndex(2f) - ) + // 신고 완료 토스트 + if (showToast) { + ToastWithDate( + message = "게시글 신고를 완료했어요.", + modifier = Modifier + .align(Alignment.TopCenter) + .padding(horizontal = 20.dp, vertical = 16.dp) + .zIndex(2f) + ) + } } - } - if (isBottomSheetVisible) { - val menuItems = if (feedDetail.isWriter) { - // 내 피드인 경우: 수정, 삭제 - listOf( - MenuBottomSheetItem( - text = stringResource(R.string.edit_feed), - color = colors.White, - onClick = { - isBottomSheetVisible = false - onNavigateToFeedEdit(feedDetail.feedId) - } - ), - MenuBottomSheetItem( - text = stringResource(R.string.delete_feed), - color = colors.Red, - onClick = { - isBottomSheetVisible = false - showDialog = true - } + if (isBottomSheetVisible) { + val menuItems = if (feedDetail.isWriter) { + // 내 피드인 경우: 수정, 삭제 + listOf( + MenuBottomSheetItem( + text = stringResource(R.string.edit_feed), + color = colors.White, + onClick = { + isBottomSheetVisible = false + onNavigateToFeedEdit(feedDetail.feedId) + } + ), + MenuBottomSheetItem( + text = stringResource(R.string.delete_feed), + color = colors.Red, + onClick = { + isBottomSheetVisible = false + showDialog = true + } + ) ) - ) - } else { - // 다른 사람 피드인 경우: 신고만 - listOf( - MenuBottomSheetItem( - text = stringResource(R.string.report), - color = colors.Red, - onClick = { - isBottomSheetVisible = false - // TODO: 피드 신고 API 호출 - showToast = true - } + } else { + // 다른 사람 피드인 경우: 신고만 + listOf( + MenuBottomSheetItem( + text = stringResource(R.string.report), + color = colors.Red, + onClick = { + isBottomSheetVisible = false + // TODO: 피드 신고 API 호출 + showToast = true + } + ) ) + } + + MenuBottomSheet( + items = menuItems, + onDismiss = { isBottomSheetVisible = false } ) } - MenuBottomSheet( - items = menuItems, - onDismiss = { isBottomSheetVisible = false } - ) - } - - if (showDialog) { - Box( - Modifier - .fillMaxSize() - .clickable { showDialog = false }) { - Box(Modifier.align(Alignment.Center)) { - DialogPopup( - title = stringResource(R.string.delete_feed_dialog_title), - description = stringResource(R.string.delete_feed_dialog_description), - onConfirm = { - showDialog = false - isBottomSheetVisible = false - // TODO: 피드 삭제 API 호출 - }, - onCancel = { - showDialog = false - isBottomSheetVisible = false - } - ) + if (showDialog) { + Box( + Modifier + .fillMaxSize() + .clickable { showDialog = false }) { + Box(Modifier.align(Alignment.Center)) { + DialogPopup( + title = stringResource(R.string.delete_feed_dialog_title), + description = stringResource(R.string.delete_feed_dialog_description), + onConfirm = { + showDialog = false + isBottomSheetVisible = false + // TODO: 피드 삭제 API 호출 + }, + onCancel = { + showDialog = false + isBottomSheetVisible = false + } + ) + } } } - } - LaunchedEffect(showToast) { - if (showToast) { - delay(3000) - showToast = false + LaunchedEffect(showToast) { + if (showToast) { + delay(3000) + showToast = false + } } - } - if (showImageViewer && images.isNotEmpty()) { - ImageViewerModal( - imageUrls = images.take(3), - initialIndex = selectedImageIndex, - onDismiss = { showImageViewer = false } - ) + if (showImageViewer && images.isNotEmpty()) { + ImageViewerModal( + imageUrls = images.take(3), + initialIndex = selectedImageIndex, + onDismiss = { showImageViewer = false } + ) + } } } From 0c876158cf868b699abbe486a3df76ce2d0fce22 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 22:09:38 +0900 Subject: [PATCH 03/15] =?UTF-8?q?[refactor]:=20=EA=B8=B0=EB=A1=9D=EC=9E=A5?= =?UTF-8?q?=20=ED=95=84=ED=84=B0=20ui=20=EA=B9=A8=EC=A7=80=EB=8A=94?= =?UTF-8?q?=EA=B1=B0=20=EC=88=98=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../texthip/thip/ui/group/note/screen/GroupNoteScreen.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt index 379b9fd8..802d1c04 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt @@ -256,7 +256,6 @@ fun GroupNoteContent( onTabSelected = { onEvent(GroupNoteEvent.OnTabSelected(it)) }, modifier = Modifier .fillMaxWidth() - .padding(top = 20.dp) ) if (uiState.isLoading) { @@ -432,19 +431,19 @@ fun GroupNoteContent( Box( modifier = Modifier .fillMaxWidth() - .padding(top = 118.dp) + .padding(top = 120.dp) ) { Box( modifier = Modifier .fillMaxWidth() - .height(56.dp) + .height(76.dp) .background(color = colors.Black) ) FilterButton( modifier = Modifier .align(Alignment.CenterEnd) - .padding(top = 20.dp, end = 20.dp), + .padding(top = 20.dp, end = 20.dp, bottom = 20.dp), selectedOption = stringResource(uiState.selectedSort.displayNameRes), options = sortDisplayStrings, onOptionSelected = { selectedString -> From ba4211d74297210ed414e649ea667d3b5f752d42 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 22:13:47 +0900 Subject: [PATCH 04/15] =?UTF-8?q?[refactor]:=20=EA=B8=B0=EB=A1=9D=EC=9E=A5?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EB=B0=9B=EC=95=84=EC=98=A4=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/texthip/thip/ui/common/header/ProfileBar.kt | 2 +- .../com/texthip/thip/ui/group/note/component/TextCommentCard.kt | 2 +- .../com/texthip/thip/ui/group/note/component/VoteCommentCard.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt b/app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt index ee49681d..0b856f83 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt @@ -29,7 +29,7 @@ import com.texthip.thip.ui.theme.ThipTheme.typography @Composable fun ProfileBar( modifier: Modifier = Modifier, - profileImage: String, + profileImage: String?, topText: String, bottomText: String, bottomTextColor: Color = colors.NeonGreen, diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt index 3dc8208a..9429f13e 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt @@ -50,7 +50,7 @@ fun TextCommentCard( ) { ProfileBar( modifier = Modifier.padding(0.dp), - profileImage = "https://example.com/image1.jpg", + profileImage = data.profileImageUrl, topText = data.nickName, bottomText = pageText, bottomTextColor = colors.Purple, diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt index 04405d8c..d6f2f8e9 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt @@ -53,7 +53,7 @@ fun VoteCommentCard( verticalArrangement = Arrangement.spacedBy(8.dp) ) { ProfileBar( - profileImage = "https://example.com/image1.jpg", + profileImage = data.profileImageUrl, topText = data.nickName, bottomText = pageText, bottomTextColor = colors.Purple, From 280fea4d8b473531b65b573575131e88d9d92d07 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 22:18:01 +0900 Subject: [PATCH 05/15] =?UTF-8?q?[refactor]:=20=EC=98=A4=EB=8A=98=EC=9D=98?= =?UTF-8?q?=20=ED=95=9C=EB=A7=88=EB=94=94=20=EC=88=98=EC=A0=95=20=EC=97=86?= =?UTF-8?q?=EC=95=A0=EA=B8=B0=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/group/room/screen/GroupRoomChatScreen.kt | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomChatScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomChatScreen.kt index bc7d026c..f31bc1eb 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomChatScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomChatScreen.kt @@ -278,14 +278,6 @@ fun GroupRoomChatContent( if (isBottomSheetVisible && selectedMessage != null) { val menuItems = if (selectedMessage!!.isWriter) { listOf( - MenuBottomSheetItem( - text = stringResource(R.string.modify), - color = colors.White, - onClick = { - // TODO: 수정 처리 - isBottomSheetVisible = false - } - ), MenuBottomSheetItem( text = stringResource(R.string.delete), color = colors.Red, From 58a58a1901d70140920f7f9de6f70fea06c2cc7e Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 22:27:38 +0900 Subject: [PATCH 06/15] =?UTF-8?q?[refactor]:=20=EB=8F=85=EC=84=9C=EB=A9=94?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EC=B5=9C=EB=8C=80=20=EA=B0=84=EA=B2=A9=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/group/room/component/GroupRoomHeader.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt b/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt index 195ff46a..bdb29909 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -86,7 +87,9 @@ fun GroupRoomHeader( horizontalArrangement = Arrangement.spacedBy(40.dp, Alignment.Start), verticalAlignment = Alignment.CenterVertically, ) { - Column { + Column( + modifier = Modifier.widthIn(max = 180.dp) + ) { Row { Icon( painter = painterResource(R.drawable.ic_calendar), @@ -114,7 +117,9 @@ fun GroupRoomHeader( } Column( - modifier = Modifier.clickable { onNavigateToMates() } + modifier = Modifier + .widthIn(max = 180.dp) + .clickable { onNavigateToMates() } ) { Row( modifier = Modifier.fillMaxWidth(), From 975556566d1f66eab8758455df0dc08caed1fe81 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 22:39:10 +0900 Subject: [PATCH 07/15] =?UTF-8?q?[refactor]:=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=EB=B0=94=ED=85=80=EC=8B=9C=ED=8A=B8=20=EB=86=92=EC=9D=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../texthip/thip/ui/group/note/component/CommentBottomSheet.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentBottomSheet.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentBottomSheet.kt index f50adfeb..5531cc9b 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentBottomSheet.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentBottomSheet.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items @@ -70,7 +69,7 @@ fun CommentBottomSheet( Column( modifier = Modifier .fillMaxWidth() - .height(600.dp) + .fillMaxHeight(0.8f) .advancedImePadding() ) { Column( From 8053bb4586f9ed67ba364a93b641be5c37a6c7b3 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 22:40:03 +0900 Subject: [PATCH 08/15] =?UTF-8?q?[refactor]:=20=EA=B8=B0=EB=A1=9D=EC=9E=A5?= =?UTF-8?q?=20=EA=B8=B0=EB=A1=9D=20=EA=B0=84=EA=B2=A9=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/texthip/thip/ui/group/note/component/TextCommentCard.kt | 2 +- .../com/texthip/thip/ui/group/note/component/VoteCommentCard.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt index 9429f13e..e3c2106d 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt @@ -45,7 +45,7 @@ fun TextCommentCard( detectTapGestures(onLongPress = { onLongPress() }) } } - .padding(start = 20.dp, end = 20.dp, top = 32.dp), + .padding(start = 20.dp, end = 20.dp, top = 40.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { ProfileBar( diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt index d6f2f8e9..1d576372 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt @@ -49,7 +49,7 @@ fun VoteCommentCard( detectTapGestures(onLongPress = { onLongPress() }) } } - .padding(start = 20.dp, end = 20.dp, top = 32.dp), + .padding(start = 20.dp, end = 20.dp, top = 40.dp), verticalArrangement = Arrangement.spacedBy(8.dp) ) { ProfileBar( From 2d368886435bd71c7ff1f49e1cb194a0b2291621 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 22:48:38 +0900 Subject: [PATCH 09/15] =?UTF-8?q?[refactor]:=20=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=98=A4=EB=A5=98=20=EC=9E=98?= =?UTF-8?q?=EB=A6=AC=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20?= =?UTF-8?q?(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/texthip/thip/ui/common/forms/BookPageTextField.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt b/app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt index 3061c3f9..17723639 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt @@ -120,7 +120,7 @@ fun BookPageTextField( } ) - Box(modifier = Modifier.height(22.dp)) { + Box(modifier = Modifier.height(24.dp)) { if (isError && errorMessageRes != null) { Text( modifier = Modifier.padding(start = 4.dp, top = 8.dp), From cc276a56b87d7d1bb0a539d85f365a4ac8bbeee2 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 22:54:07 +0900 Subject: [PATCH 10/15] =?UTF-8?q?[refactor]:=20=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EB=82=98=EA=B3=A0=20=EC=B4=9D=ED=8F=89?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B0=94=EA=BF=A8=EC=9D=84=20=EB=95=8C=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EB=82=A8=EC=95=84=EC=9E=88=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/common/forms/BookPageTextField.kt | 24 ++++--------------- .../group/note/component/PageInputSection.kt | 11 ++++++++- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt b/app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt index 17723639..972b9d86 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/forms/BookPageTextField.kt @@ -45,30 +45,15 @@ fun BookPageTextField( bookTotalPage: Int, enabled: Boolean = true, text: String, + isError: Boolean, onValueChange: (String) -> Unit, ) { - var isError by rememberSaveable { mutableStateOf(false) } - var errorMessageRes by rememberSaveable { mutableStateOf(null) } - Column { OutlinedTextField( value = text, onValueChange = { newText: String -> if (newText.isEmpty() || newText.all { it.isDigit() }) { onValueChange(newText) - - if (newText.isNotEmpty()) { - val pageNum = newText.toInt() - isError = pageNum > bookTotalPage - errorMessageRes = if (isError) { - R.string.error_page_over - } else { - null - } - } else { - isError = false - errorMessageRes = null - } } }, enabled = enabled, @@ -111,8 +96,6 @@ fun BookPageTextField( modifier = Modifier.clickable { if (text.isNotEmpty()) { onValueChange("") - isError = false - errorMessageRes = null } }, tint = Color.Unspecified @@ -121,10 +104,10 @@ fun BookPageTextField( ) Box(modifier = Modifier.height(24.dp)) { - if (isError && errorMessageRes != null) { + if (isError) { Text( modifier = Modifier.padding(start = 4.dp, top = 8.dp), - text = stringResource(id = errorMessageRes!!), + text = stringResource(id = R.string.error_page_over), color = colors.Red, style = typography.menu_r400_s14_h24.copy(lineHeight = 12.sp) ) @@ -172,6 +155,7 @@ fun BookPageTextFieldPreviewEmpty() { BookPageTextField( bookTotalPage = 456, text = text, + isError = false, onValueChange = { text = it } diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/PageInputSection.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/PageInputSection.kt index 752580fb..8322e281 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/PageInputSection.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/PageInputSection.kt @@ -13,6 +13,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -42,6 +43,13 @@ fun PageInputSection( onInfoPositionCaptured: (LayoutCoordinates) -> Unit ) { val allRangeText = stringResource(R.string.all_range) + val isError = remember(pageText, bookTotalPage, isGeneralReview) { + if (isGeneralReview) { + false + } else { + pageText.toIntOrNull()?.let { it > bookTotalPage } ?: false + } + } Column( modifier = Modifier, @@ -63,7 +71,8 @@ fun PageInputSection( onValueChange = { if (!isGeneralReview) onPageTextChange(it) }, - enabled = !isGeneralReview + enabled = !isGeneralReview, + isError = isError ) Row( From 52982b8ae4cf91710c33fcbafc2b1882f0870f01 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 23:01:38 +0900 Subject: [PATCH 11/15] =?UTF-8?q?[refactor]:=20=EC=A7=84=ED=96=89=EC=A4=91?= =?UTF-8?q?=EC=9D=B8=20=EB=AA=A8=EC=A7=91=EB=B0=A9=20=EB=8F=85=EC=84=9C?= =?UTF-8?q?=EB=A9=94=EC=9D=B4=ED=8A=B8=20=ED=81=B4=EB=A6=AD=20=EB=B2=94?= =?UTF-8?q?=EC=9C=84=20=EC=88=98=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/group/room/component/GroupRoomHeader.kt | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt b/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt index bdb29909..b132c44a 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomHeader.kt @@ -141,16 +141,11 @@ fun GroupRoomHeader( ) } - IconButton( - onClick = { /* TODO: Navigate to participant list */ }, - modifier = Modifier.size(24.dp) - ) { - Icon( - painter = painterResource(R.drawable.ic_chevron), - contentDescription = "Participant Icon", - tint = colors.White - ) - } + Icon( + painter = painterResource(R.drawable.ic_chevron), + contentDescription = "Participant Icon", + tint = colors.White + ) } Spacer(Modifier.height(12.dp)) Text( From b97c81137650adefb1950518cdf3137dfa39c2a9 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 23:23:24 +0900 Subject: [PATCH 12/15] =?UTF-8?q?[refactor]:=20=EB=8F=85=EC=84=9C=EB=A9=94?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=ED=94=BC=EB=93=9C=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EC=88=98=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/data/model/rooms/response/RoomsPostsResponse.kt | 2 +- .../thip/data/model/rooms/response/RoomsUsersResponse.kt | 2 +- .../thip/ui/group/room/component/GroupRoomMatesList.kt | 2 +- .../thip/ui/group/room/screen/GroupRoomMatesScreen.kt | 4 ++-- .../texthip/thip/ui/navigator/navigations/GroupNavigation.kt | 5 +++-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsPostsResponse.kt b/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsPostsResponse.kt index 8df0be26..f32f41ea 100644 --- a/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsPostsResponse.kt +++ b/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsPostsResponse.kt @@ -18,7 +18,7 @@ data class PostList( val postDate: String, val postType: String, val page: Int, - val userId: Int, + val userId: Long, val nickName: String, val profileImageUrl: String?, val content: String, diff --git a/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsUsersResponse.kt b/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsUsersResponse.kt index 92d6a0d1..0c24c461 100644 --- a/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsUsersResponse.kt +++ b/app/src/main/java/com/texthip/thip/data/model/rooms/response/RoomsUsersResponse.kt @@ -9,7 +9,7 @@ data class RoomsUsersResponse( @Serializable data class UserList( - val userId: Int, + val userId: Long, val nickname: String, val imageUrl: String, val aliasColor: String, diff --git a/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomMatesList.kt b/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomMatesList.kt index 158b31b6..9307aaec 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomMatesList.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/room/component/GroupRoomMatesList.kt @@ -18,7 +18,7 @@ import com.texthip.thip.utils.color.hexToColor @Composable fun GroupRoomMatesList( members: RoomsUsersResponse, - onUserClick: (Int) -> Unit = {} + onUserClick: (Long) -> Unit = {} ) { Column( verticalArrangement = Arrangement.spacedBy(16.dp), diff --git a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomMatesScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomMatesScreen.kt index 3748aff7..2b7487fc 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomMatesScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/room/screen/GroupRoomMatesScreen.kt @@ -30,7 +30,7 @@ import com.texthip.thip.ui.theme.ThipTheme.colors fun GroupRoomMatesScreen( roomId: Int, onBackClick: () -> Unit = {}, - onUserClick: (Int) -> Unit = {}, + onUserClick: (Long) -> Unit = {}, viewModel: GroupRoomMatesViewModel = hiltViewModel() ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -69,7 +69,7 @@ fun GroupRoomMatesScreen( fun GroupRoomMatesContent( data: RoomsUsersResponse, onBackClick: () -> Unit = {}, - onUserClick: (Int) -> Unit = {}, + onUserClick: (Long) -> Unit = {}, ) { val scrollState = rememberScrollState() diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt index 28320fff..20f36478 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt @@ -45,6 +45,7 @@ import com.texthip.thip.ui.navigator.extensions.navigateToGroupRoomUnlock import com.texthip.thip.ui.navigator.extensions.navigateToGroupSearch import com.texthip.thip.ui.navigator.extensions.navigateToGroupVoteCreate import com.texthip.thip.ui.navigator.extensions.navigateToRecommendedGroupRecruit +import com.texthip.thip.ui.navigator.extensions.navigateToUserProfile import com.texthip.thip.ui.navigator.routes.GroupRoutes import com.texthip.thip.ui.navigator.routes.MainTabRoutes @@ -296,8 +297,8 @@ fun NavGraphBuilder.groupNavigation( onBackClick = { navigateBack() }, - onUserClick = { - // 네비게이션 로직 (예: 유저 프로필로 이동) + onUserClick = { userId -> + navController.navigateToUserProfile(userId) } ) } From e61223aad0cb33cf94bdf3b0980cee1d7fb53dca Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Mon, 18 Aug 2025 23:41:24 +0900 Subject: [PATCH 13/15] =?UTF-8?q?[refactor]:=20=ED=94=BC=EB=93=9C=20?= =?UTF-8?q?=EB=8C=93=EA=B8=80=20=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EB=88=84=EB=A5=B4=EB=A9=B4=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=ED=94=BC=EB=93=9C=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=ED=95=98=EA=B2=8C=20=EC=88=98=EC=A0=95=20(#1?= =?UTF-8?q?01)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../comments/response/CommentsCreateResponse.kt | 2 +- .../data/model/comments/response/CommentsResponse.kt | 4 ++-- .../data/model/feed/response/FeedDetailResponse.kt | 2 +- .../texthip/thip/ui/common/header/ProfileBarFeed.kt | 5 ++++- .../texthip/thip/ui/feed/screen/FeedCommentScreen.kt | 7 +++++-- .../thip/ui/group/note/component/CommentItem.kt | 4 +++- .../thip/ui/group/note/component/CommentSection.kt | 8 +++++++- .../thip/ui/group/note/component/ReplyItem.kt | 4 +++- .../thip/ui/navigator/navigations/FeedNavigation.kt | 12 ++++++++---- 9 files changed, 34 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/data/model/comments/response/CommentsCreateResponse.kt b/app/src/main/java/com/texthip/thip/data/model/comments/response/CommentsCreateResponse.kt index 3700cd2a..fdaaec4f 100644 --- a/app/src/main/java/com/texthip/thip/data/model/comments/response/CommentsCreateResponse.kt +++ b/app/src/main/java/com/texthip/thip/data/model/comments/response/CommentsCreateResponse.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable @Serializable data class CommentsCreateResponse( val commentId: Int?, - val creatorId: Int?, + val creatorId: Long?, val creatorProfileImageUrl: String?, val creatorNickname: String?, val aliasName: String?, diff --git a/app/src/main/java/com/texthip/thip/data/model/comments/response/CommentsResponse.kt b/app/src/main/java/com/texthip/thip/data/model/comments/response/CommentsResponse.kt index 3e35e956..73a70059 100644 --- a/app/src/main/java/com/texthip/thip/data/model/comments/response/CommentsResponse.kt +++ b/app/src/main/java/com/texthip/thip/data/model/comments/response/CommentsResponse.kt @@ -12,7 +12,7 @@ data class CommentsResponse( @Serializable data class CommentList( val commentId: Int?, - val creatorId: Int?, + val creatorId: Long?, val creatorProfileImageUrl: String?, val creatorNickname: String?, val aliasName: String?, @@ -30,7 +30,7 @@ data class CommentList( data class ReplyList( val commentId: Int, val parentCommentCreatorNickname: String, - val creatorId: Int, + val creatorId: Long, val creatorProfileImageUrl: String, val creatorNickname: String, val aliasName: String, diff --git a/app/src/main/java/com/texthip/thip/data/model/feed/response/FeedDetailResponse.kt b/app/src/main/java/com/texthip/thip/data/model/feed/response/FeedDetailResponse.kt index 360dd988..886d2238 100644 --- a/app/src/main/java/com/texthip/thip/data/model/feed/response/FeedDetailResponse.kt +++ b/app/src/main/java/com/texthip/thip/data/model/feed/response/FeedDetailResponse.kt @@ -6,7 +6,7 @@ import kotlinx.serialization.Serializable @Serializable data class FeedDetailResponse( @SerialName("feedId") val feedId: Int, - @SerialName("creatorId") val creatorId: Int, + @SerialName("creatorId") val creatorId: Long, @SerialName("creatorNickname") val creatorNickname: String, @SerialName("creatorProfileImageUrl") val creatorProfileImageUrl: String?, @SerialName("aliasName") val aliasName: String, diff --git a/app/src/main/java/com/texthip/thip/ui/common/header/ProfileBarFeed.kt b/app/src/main/java/com/texthip/thip/ui/common/header/ProfileBarFeed.kt index bc5f842f..9d4ff041 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/header/ProfileBarFeed.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/header/ProfileBarFeed.kt @@ -1,6 +1,7 @@ package com.texthip.thip.ui.common.header import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -31,10 +32,12 @@ fun ProfileBarFeed( genreName: String, genreColor: Color = colors.NeonGreen, date: String, + onClick: () -> Unit = {} ) { Row( modifier = Modifier - .fillMaxWidth(), + .fillMaxWidth() + .clickable { onClick() }, verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween ) { diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt index 7e36ecb2..ab0e5498 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedCommentScreen.kt @@ -67,6 +67,7 @@ fun FeedCommentScreen( feedId: Int, onNavigateBack: () -> Unit = {}, onNavigateToFeedEdit: (Int) -> Unit = {}, + onNavigateToUserProfile: (userId: Long) -> Unit = {}, feedDetailViewModel: FeedDetailViewModel = hiltViewModel(), commentsViewModel: CommentsViewModel = hiltViewModel() ) { @@ -177,7 +178,8 @@ fun FeedCommentScreen( topText = feedDetail.creatorNickname, bottomText = feedDetail.aliasName, showSubscriberInfo = false, - hoursAgo = feedDetail.postDate + hoursAgo = feedDetail.postDate, + onClick = { onNavigateToUserProfile(feedDetail.creatorId) } ) Column( Modifier @@ -301,7 +303,8 @@ fun FeedCommentScreen( }, onDismissPopup = { selectedCommentId = null - } + }, + onProfileClick = onNavigateToUserProfile ) } } diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentItem.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentItem.kt index 658f789d..66ee8e9f 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentItem.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentItem.kt @@ -36,6 +36,7 @@ fun CommentItem( onReplyClick: (String?) -> Unit = { }, onLikeClick: () -> Unit = {}, onLongPress: () -> Unit = {}, + onProfileClick: () -> Unit = {}, actionMode: CommentActionMode, isSelected: Boolean = false, onDismissPopup: () -> Unit = {}, @@ -61,7 +62,8 @@ fun CommentItem( nickname = data.creatorNickname ?: "", genreName = data.aliasName ?: "", genreColor = hexToColor(data.aliasColor ?: "#FFFFFF"), - date = data.postDate ?: "" + date = data.postDate ?: "", + onClick = onProfileClick ) Row( diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentSection.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentSection.kt index cd4b6ef6..8d8c339c 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentSection.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentSection.kt @@ -23,9 +23,10 @@ fun CommentSection( onEvent: (CommentsEvent) -> Unit = { _ -> }, onCommentLongPress: (CommentList) -> Unit = { _ -> }, onReplyLongPress: (ReplyList) -> Unit = { _ -> }, + onProfileClick: (userId: Long) -> Unit = {}, actionMode: CommentActionMode, selectedCommentId: Int? = null, - onDismissPopup: () -> Unit = {} + onDismissPopup: () -> Unit = {}, ) { Box { Column( @@ -52,6 +53,10 @@ fun CommentSection( } }, onLongPress = { onCommentLongPress(commentItem) }, + + onProfileClick = { + commentItem.creatorId?.let { id -> onProfileClick(id) } + }, actionMode = actionMode, isSelected = selectedCommentId != null && commentItem.commentId == selectedCommentId, onDismissPopup = onDismissPopup, @@ -70,6 +75,7 @@ fun CommentSection( onEvent(CommentsEvent.LikeReply(reply.commentId)) }, onLongPress = { onReplyLongPress(reply) }, + onProfileClick = { onProfileClick(reply.creatorId) }, actionMode = actionMode, isSelected = selectedCommentId != null && reply.commentId == selectedCommentId, onDismissPopup = onDismissPopup, diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/ReplyItem.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/ReplyItem.kt index 829ec33c..539e47e9 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/ReplyItem.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/ReplyItem.kt @@ -38,6 +38,7 @@ fun ReplyItem( onReplyClick: () -> Unit = { }, onLikeClick: () -> Unit = {}, onLongPress: () -> Unit = {}, + onProfileClick: () -> Unit = {}, actionMode: CommentActionMode, isSelected: Boolean = false, onDismissPopup: () -> Unit = {}, @@ -64,7 +65,8 @@ fun ReplyItem( nickname = data.creatorNickname, genreName = data.aliasName, genreColor = hexToColor(data.aliasColor), - date = data.postDate + date = data.postDate, + onClick = onProfileClick ) Row( diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt index d9013c37..23f355ad 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt @@ -5,17 +5,18 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable +import androidx.navigation.toRoute import com.texthip.thip.ui.feed.screen.FeedCommentScreen +import com.texthip.thip.ui.feed.screen.FeedOthersScreen import com.texthip.thip.ui.feed.screen.FeedScreen import com.texthip.thip.ui.feed.screen.FeedWriteScreen import com.texthip.thip.ui.feed.screen.MySubscriptionScreen -import com.texthip.thip.ui.navigator.extensions.navigateToFeedComment -import androidx.navigation.toRoute -import com.texthip.thip.ui.feed.screen.FeedOthersScreen import com.texthip.thip.ui.feed.viewmodel.FeedWriteViewModel +import com.texthip.thip.ui.navigator.extensions.navigateToBookDetail +import com.texthip.thip.ui.navigator.extensions.navigateToFeedComment import com.texthip.thip.ui.navigator.extensions.navigateToFeedWrite import com.texthip.thip.ui.navigator.extensions.navigateToMySubscription -import com.texthip.thip.ui.navigator.extensions.navigateToBookDetail +import com.texthip.thip.ui.navigator.extensions.navigateToUserProfile import com.texthip.thip.ui.navigator.routes.FeedRoutes import com.texthip.thip.ui.navigator.routes.MainTabRoutes @@ -126,6 +127,9 @@ fun NavGraphBuilder.feedNavigation(navController: NavHostController, navigateBac }, onNavigateToFeedEdit = { feedId -> navController.navigate(FeedRoutes.Write(feedId = feedId)) + }, + onNavigateToUserProfile = { userId -> + navController.navigateToUserProfile(userId) } ) } From 9f603445b115ab1797d90746a68bd4d913fdca0b Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Tue, 19 Aug 2025 01:53:32 +0900 Subject: [PATCH 14/15] =?UTF-8?q?[refactor]:=20=EA=B8=B0=EB=A1=9D=EC=9E=A5?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=ED=95=84=20=EB=88=84=EB=A5=B4=EB=A9=B4=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=9D=B4=EB=8F=99=ED=95=98=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../note/component/CommentBottomSheet.kt | 12 ++++-- .../group/note/component/TextCommentCard.kt | 6 ++- .../group/note/component/VoteCommentCard.kt | 5 ++- .../ui/group/note/screen/GroupNoteScreen.kt | 15 +++++-- .../navigator/navigations/GroupNavigation.kt | 40 +++++++++---------- 5 files changed, 46 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentBottomSheet.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentBottomSheet.kt index 5531cc9b..eae22f65 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentBottomSheet.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/CommentBottomSheet.kt @@ -45,7 +45,8 @@ fun CommentBottomSheet( uiState: CommentsUiState, onEvent: (CommentsEvent) -> Unit, onDismiss: () -> Unit, - onSendReply: (text: String, parentCommentId: Int?, replyToNickname: String?) -> Unit + onSendReply: (text: String, parentCommentId: Int?, replyToNickname: String?) -> Unit, + onProfileClick: (userId: Long) -> Unit = {} ) { var inputText by remember { mutableStateOf("") } var replyingToCommentId by remember { mutableStateOf(null) } @@ -109,7 +110,8 @@ fun CommentBottomSheet( onCommentLongPress = { comment -> selectedCommentForMenu = comment }, - onReplyLongPress = { reply -> selectedReplyForMenu = reply } + onReplyLongPress = { reply -> selectedReplyForMenu = reply }, + onProfileClick = onProfileClick ) } } @@ -197,7 +199,8 @@ private fun CommentLazyList( onReplyClick: (commentId: Int, nickname: String?) -> Unit, onEvent: (CommentsEvent) -> Unit, onCommentLongPress: (CommentList) -> Unit, - onReplyLongPress: (ReplyList) -> Unit + onReplyLongPress: (ReplyList) -> Unit, + onProfileClick: (userId: Long) -> Unit ) { val lazyListState = rememberLazyListState() @@ -234,7 +237,8 @@ private fun CommentLazyList( onReplyClick = onReplyClick, onEvent = onEvent, onCommentLongPress = onCommentLongPress, - onReplyLongPress = onReplyLongPress + onReplyLongPress = onReplyLongPress, + onProfileClick = onProfileClick ) } diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt index e3c2106d..a6269de5 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/TextCommentCard.kt @@ -26,7 +26,8 @@ fun TextCommentCard( onLikeClick: (postId: Int, postType: String) -> Unit = { _, _ -> }, onCommentClick: () -> Unit = {}, onLongPress: () -> Unit = {}, - onPinClick: () -> Unit = {} + onPinClick: () -> Unit = {}, + onProfileClick: () -> Unit = {} ) { val isLocked = data.isLocked val isWriter = data.isWriter @@ -55,7 +56,8 @@ fun TextCommentCard( bottomText = pageText, bottomTextColor = colors.Purple, showSubscriberInfo = false, - hoursAgo = data.postDate + hoursAgo = data.postDate, + onClick = onProfileClick ) Text( diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt b/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt index 1d576372..8f072d34 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/component/VoteCommentCard.kt @@ -28,12 +28,12 @@ fun VoteCommentCard( onVote: (postId: Int, voteItemId: Int, type: Boolean) -> Unit = { _, _, _ -> }, onCommentClick: () -> Unit = {}, onLongPress: () -> Unit = {}, + onProfileClick: () -> Unit = {} ) { val selectedIndex = data.voteItems.indexOfFirst { it.isVoted }.takeIf { it != -1 } val hasVoted = selectedIndex != null val isLocked = data.isLocked - val isWriter = data.isWriter val pageText = if (data.isOverview) { stringResource(id = R.string.general_review) @@ -58,7 +58,8 @@ fun VoteCommentCard( bottomText = pageText, bottomTextColor = colors.Purple, showSubscriberInfo = false, - hoursAgo = data.postDate + hoursAgo = data.postDate, + onClick = onProfileClick ) Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt index 802d1c04..9b39a3f5 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt @@ -79,6 +79,7 @@ fun GroupNoteScreen( onCreateNoteClick: (recentPage: Int, totalPage: Int, isOverviewPossible: Boolean) -> Unit, onCreateVoteClick: (recentPage: Int, totalPage: Int, isOverviewPossible: Boolean) -> Unit, onNavigateToFeedWrite: (pinInfo: RoomsRecordsPinResponse, recordContent: String) -> Unit, + onNavigateToUserProfile: (userId: Long) -> Unit = {}, resultTabIndex: Int? = null, onResultConsumed: () -> Unit = {}, initialPage: Int? = null, @@ -153,6 +154,7 @@ fun GroupNoteScreen( onCreateVoteClick(s.recentBookPage, s.totalBookPage, s.isOverviewPossible) } }, + onNavigateToUserProfile = onNavigateToUserProfile, showProgressBar = showProgressBar, progress = progress.value ) @@ -165,6 +167,7 @@ fun GroupNoteContent( onBackClick: () -> Unit, onCreateNoteClick: () -> Unit, onCreateVoteClick: () -> Unit, + onNavigateToUserProfile: (userId: Long) -> Unit, showProgressBar: Boolean, progress: Float ) { @@ -390,7 +393,8 @@ fun GroupNoteContent( }, onLikeClick = { postId, postType -> onEvent(GroupNoteEvent.OnLikeRecord(postId, postType)) - } + }, + onProfileClick = { onNavigateToUserProfile(post.userId) } ) "VOTE" -> VoteCommentCard( @@ -406,7 +410,8 @@ fun GroupNoteContent( }, onLikeClick = { postId, postType -> onEvent(GroupNoteEvent.OnLikeRecord(postId, postType)) - } + }, + onProfileClick = { onNavigateToUserProfile(post.userId) } ) } } @@ -514,7 +519,8 @@ fun GroupNoteContent( ) ) } - } + }, + onProfileClick = onNavigateToUserProfile ) } @@ -644,7 +650,8 @@ private fun GroupNoteScreenPreview() { onCreateNoteClick = {}, onCreateVoteClick = {}, showProgressBar = true, - progress = 0.5f + progress = 0.5f, + onNavigateToUserProfile = {} ) } } \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt index 20f36478..b4d4beb5 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt @@ -5,7 +5,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable @@ -59,17 +58,17 @@ fun NavGraphBuilder.groupNavigation( // 메인 Group 화면 composable { backStackEntry -> val groupViewModel: GroupViewModel = hiltViewModel() - + // 네비게이션 파라미터로 전달된 토스트 메시지가 있는지 확인 LaunchedEffect(backStackEntry) { val toastMessage = backStackEntry.savedStateHandle.get("toast_message") - + toastMessage?.let { message -> backStackEntry.savedStateHandle.remove("toast_message") groupViewModel.showToastMessage(message) } } - + GroupScreen( viewModel = groupViewModel, onNavigateToMakeRoom = { @@ -95,7 +94,7 @@ fun NavGraphBuilder.groupNavigation( } ) } - + // Group MakeRoom 화면 composable { val viewModel: GroupMakeRoomViewModel = hiltViewModel() @@ -111,12 +110,12 @@ fun NavGraphBuilder.groupNavigation( } ) } - + // Group MakeRoom 화면 (책 정보 미리 선택됨) composable { backStackEntry -> val route = backStackEntry.toRoute() val viewModel: GroupMakeRoomViewModel = hiltViewModel() - + // 책 정보를 ViewModel에 미리 설정 LaunchedEffect(route) { viewModel.setPreselectedBook( @@ -126,7 +125,7 @@ fun NavGraphBuilder.groupNavigation( author = route.author ) } - + GroupMakeRoomScreen( viewModel = viewModel, onNavigateBack = { @@ -140,7 +139,7 @@ fun NavGraphBuilder.groupNavigation( } ) } - + // Group Done 화면 composable { GroupDoneScreen( @@ -149,11 +148,11 @@ fun NavGraphBuilder.groupNavigation( } ) } - + // Group My 화면 composable { val groupMyViewModel: GroupMyViewModel = hiltViewModel() - + GroupMyScreen( viewModel = groupMyViewModel, onCardClick = { room -> @@ -169,12 +168,12 @@ fun NavGraphBuilder.groupNavigation( } ) } - + // Group Search 화면 composable { val groupViewModel: GroupViewModel = hiltViewModel() val uiState by groupViewModel.uiState.collectAsState() - + GroupSearchScreen( roomList = emptyList(), //TODO: RoomMainResponse -> GroupCardItemRoomData 변환 필요 onNavigateBack = { @@ -191,7 +190,7 @@ fun NavGraphBuilder.groupNavigation( } ) } - + // Group Recruit 화면 composable { backStackEntry -> val route = backStackEntry.toRoute() @@ -241,12 +240,12 @@ fun NavGraphBuilder.groupNavigation( } ) } - + // Group Room Unlock 화면 (비밀번호 입력) composable { backStackEntry -> val route = backStackEntry.toRoute() val roomId = route.roomId - + GroupRoomUnlockScreen( roomId = roomId, onBackClick = { @@ -261,7 +260,7 @@ fun NavGraphBuilder.groupNavigation( } ) } - + // Group Room 화면 composable { backStackEntry -> val route = backStackEntry.toRoute() @@ -319,7 +318,6 @@ fun NavGraphBuilder.groupNavigation( val result = backStackEntry.savedStateHandle.get("selected_tab_index") val viewModel: GroupNoteViewModel = hiltViewModel(backStackEntry) - val uiState by viewModel.uiState.collectAsStateWithLifecycle() GroupNoteScreen( roomId = roomId, @@ -338,7 +336,6 @@ fun NavGraphBuilder.groupNavigation( isOverviewPossible = isOverviewPossible ) }, - // [수정] '투표 생성' 클릭 시 페이지 정보와 함께 내비게이션 onCreateVoteClick = { recentPage, totalPage, isOverviewPossible -> navController.navigateToGroupVoteCreate( roomId = roomId, @@ -356,11 +353,14 @@ fun NavGraphBuilder.groupNavigation( recordContent = recordContent ) }, + onNavigateToUserProfile = { userId -> + navController.navigateToUserProfile(userId) + }, viewModel = viewModel ) } - // Group Note Create 화면 + // Group Note Create 화면 composable { backStackEntry -> val route = backStackEntry.toRoute() val roomId = route.roomId From 5a598ec7b7afea1d50033030e9a3ab190de5fb05 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Tue, 19 Aug 2025 02:08:14 +0900 Subject: [PATCH 15/15] =?UTF-8?q?[refactor]:=20=ED=94=BC=EB=93=9C=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EB=88=84=EB=A5=B4=EB=A9=B4=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=9D=B4=EB=8F=99=ED=95=98=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(#101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/data/model/feed/response/AllFeedResponse.kt | 2 +- .../main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt | 6 ++++-- .../com/texthip/thip/ui/mypage/component/SavedFeedCard.kt | 6 ++++-- .../texthip/thip/ui/navigator/navigations/FeedNavigation.kt | 3 +++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/data/model/feed/response/AllFeedResponse.kt b/app/src/main/java/com/texthip/thip/data/model/feed/response/AllFeedResponse.kt index b2f6ec70..31025630 100644 --- a/app/src/main/java/com/texthip/thip/data/model/feed/response/AllFeedResponse.kt +++ b/app/src/main/java/com/texthip/thip/data/model/feed/response/AllFeedResponse.kt @@ -14,7 +14,7 @@ data class AllFeedResponse( @Serializable data class AllFeedItem( @SerialName("feedId") val feedId: Int, - @SerialName("creatorId") val creatorId: Int, + @SerialName("creatorId") val creatorId: Long, @SerialName("creatorNickname") val creatorNickname: String, @SerialName("creatorProfileImageUrl") val creatorProfileImageUrl: String?, @SerialName("aliasName") val aliasName: String, diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt index 13e81322..e1ee0d57 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt @@ -50,7 +50,6 @@ import com.texthip.thip.ui.feed.component.FeedSubscribeBarlist import com.texthip.thip.ui.feed.component.MyFeedCard import com.texthip.thip.ui.feed.component.MySubscribeBarlist import com.texthip.thip.ui.feed.viewmodel.FeedViewModel -import com.texthip.thip.ui.feed.viewmodel.MySubscriptionViewModel import com.texthip.thip.ui.mypage.component.SavedFeedCard import com.texthip.thip.ui.mypage.mock.FeedItem import com.texthip.thip.ui.theme.ThipTheme @@ -68,10 +67,10 @@ fun FeedScreen( onNavigateToFeedWrite: () -> Unit = {}, onNavigateToFeedComment: (Int) -> Unit = {}, onNavigateToBookDetail: (String) -> Unit = {}, + onNavigateToUserProfile: (userId: Long) -> Unit = {}, resultFeedId: Int? = null, onResultConsumed: () -> Unit = {}, feedViewModel: FeedViewModel = hiltViewModel(), - mySubscriptionViewModel: MySubscriptionViewModel = hiltViewModel() ) { val feedUiState by feedViewModel.uiState.collectAsState() val scope = rememberCoroutineScope() @@ -351,6 +350,9 @@ fun FeedScreen( }, onBookClick = { onNavigateToBookDetail(allFeed.isbn) + }, + onProfileClick = { + onNavigateToUserProfile(allFeed.creatorId) } ) Spacer(modifier = Modifier.height(40.dp)) diff --git a/app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt b/app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt index d35d3103..ac5d937f 100644 --- a/app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt @@ -37,7 +37,8 @@ fun SavedFeedCard( onLikeClick: () -> Unit = {}, onContentClick: () -> Unit = {}, onCommentClick: () -> Unit = {}, - onBookClick: () -> Unit = {} + onBookClick: () -> Unit = {}, + onProfileClick: () -> Unit = {} ) { val hasImages = feedItem.imageUrls.isNotEmpty() val maxLines = if (hasImages) 3 else 8 @@ -53,7 +54,8 @@ fun SavedFeedCard( bottomText = feedItem.userRole, bottomTextColor = bottomTextColor, showSubscriberInfo = false, - hoursAgo = feedItem.timeAgo + hoursAgo = feedItem.timeAgo, + onClick = onProfileClick ) Column( modifier = Modifier diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt index 23f355ad..906166ca 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt @@ -41,6 +41,9 @@ fun NavGraphBuilder.feedNavigation(navController: NavHostController, navigateBac }, onNavigateToBookDetail = { isbn -> navController.navigateToBookDetail(isbn) + }, + onNavigateToUserProfile = { userId -> + navController.navigateToUserProfile(userId) } ) }