Skip to content

Commit c6bef99

Browse files
committed
[refactor]: 피드 작성 및, 모임 생성 페이지의 책 선택 로직 및 UI 수정 (#127)
1 parent 14d345e commit c6bef99

File tree

6 files changed

+66
-80
lines changed

6 files changed

+66
-80
lines changed

app/src/main/java/com/texthip/thip/ui/common/cards/CardInputBook.kt

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import androidx.compose.ui.res.stringResource
2424
import androidx.compose.ui.text.style.TextOverflow
2525
import androidx.compose.ui.tooling.preview.Preview
2626
import androidx.compose.ui.unit.dp
27+
import coil.compose.AsyncImage
2728
import com.texthip.thip.R
2829
import com.texthip.thip.ui.common.buttons.OutlinedButton
2930
import com.texthip.thip.ui.theme.ThipTheme.colors
@@ -34,7 +35,9 @@ fun CardInputBook(
3435
modifier: Modifier = Modifier,
3536
title: String,
3637
author: String,
37-
imageRes: Int? = R.drawable.img_book_cover_sample, // 기본 이미지 리소스
38+
imageUrl: String? = null, // 이미지 URL (AsyncImage 사용)
39+
imageRes: Int? = R.drawable.img_book_cover_sample, // 기본 이미지 리소스 (fallback)
40+
showChangeButton: Boolean = true, // 변경 버튼 표시 여부
3841
onChangeClick: () -> Unit = {}
3942
) {
4043
Row(
@@ -47,14 +50,26 @@ fun CardInputBook(
4750
modifier = Modifier
4851
.size(width = 60.dp, height = 80.dp)
4952
) {
50-
51-
imageRes?.let {
52-
Image(
53-
painter = painterResource(id = it),
53+
if (!imageUrl.isNullOrBlank()) {
54+
// URL 이미지가 있는 경우 AsyncImage 사용
55+
AsyncImage(
56+
model = imageUrl,
5457
contentDescription = null,
5558
modifier = Modifier.fillMaxSize(),
56-
contentScale = ContentScale.Crop
59+
contentScale = ContentScale.Crop,
60+
fallback = imageRes?.let { painterResource(id = it) },
61+
error = imageRes?.let { painterResource(id = it) }
5762
)
63+
} else {
64+
// URL이 없는 경우 기본 이미지 리소스 사용
65+
imageRes?.let {
66+
Image(
67+
painter = painterResource(id = it),
68+
contentDescription = null,
69+
modifier = Modifier.fillMaxSize(),
70+
contentScale = ContentScale.Crop
71+
)
72+
}
5873
}
5974
}
6075

@@ -76,20 +91,24 @@ fun CardInputBook(
7691
Text(
7792
text = stringResource(R.string.card_input_author, author),
7893
style = typography.view_m500_s12_h20,
79-
color = colors.Grey01
94+
color = colors.Grey01,
95+
maxLines = 1,
96+
overflow = TextOverflow.Ellipsis
8097
)
8198
}
82-
// 텍스트 정보와 버튼 사이 19dp 고정 간격
83-
Spacer(modifier = Modifier.width(19.dp))
8499

85-
OutlinedButton(
86-
modifier = Modifier
87-
.size(width = 49.dp, height = 33.dp)
88-
.align(Alignment.Bottom),
89-
text = stringResource(R.string.change),
90-
textStyle = typography.view_m500_s14,
91-
onClick = onChangeClick
92-
)
100+
if (showChangeButton) {
101+
Spacer(modifier = Modifier.width(19.dp))
102+
103+
OutlinedButton(
104+
modifier = Modifier
105+
.size(width = 49.dp, height = 33.dp)
106+
.align(Alignment.Bottom),
107+
text = stringResource(R.string.change),
108+
textStyle = typography.view_m500_s14,
109+
onClick = onChangeClick
110+
)
111+
}
93112
}
94113
}
95114

@@ -105,6 +124,7 @@ fun CardInputBookPreview() {
105124
CardInputBook(
106125
title = "책제목입니다.책제목입니다.책제목입니다.책제목입니다.책제목입니다.",
107126
author = "리처드 도킨스",
127+
imageUrl = null, // 기본 이미지 사용
108128
onChangeClick = {}
109129
)
110130
}

app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedWriteViewModel.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,21 @@ class FeedWriteViewModel @Inject constructor(
189189
updateState { it.copy(selectedBook = book) }
190190
}
191191

192+
fun setPreselectedBookForFeed(isbn: String, bookTitle: String, bookAuthor: String, bookImageUrl: String) {
193+
val preselectedBook = BookData(
194+
title = bookTitle,
195+
imageUrl = bookImageUrl,
196+
author = bookAuthor,
197+
isbn = isbn
198+
)
199+
updateState {
200+
it.copy(
201+
selectedBook = preselectedBook,
202+
isBookPreselected = true
203+
)
204+
}
205+
}
206+
192207
fun toggleBookSearchSheet(show: Boolean) {
193208
updateState { it.copy(showBookSearchSheet = show) }
194209
if (show) {

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.Arrangement
77
import androidx.compose.foundation.layout.Column
88
import androidx.compose.foundation.layout.Row
99
import androidx.compose.foundation.layout.Spacer
10-
import androidx.compose.foundation.layout.fillMaxSize
1110
import androidx.compose.foundation.layout.fillMaxWidth
1211
import androidx.compose.foundation.layout.height
1312
import androidx.compose.foundation.layout.padding
@@ -18,14 +17,12 @@ import androidx.compose.material3.Text
1817
import androidx.compose.runtime.Composable
1918
import androidx.compose.ui.Alignment
2019
import androidx.compose.ui.Modifier
21-
import androidx.compose.ui.layout.ContentScale
2220
import androidx.compose.ui.res.painterResource
2321
import androidx.compose.ui.res.stringResource
2422
import androidx.compose.ui.tooling.preview.Preview
2523
import androidx.compose.ui.unit.dp
26-
import coil.compose.AsyncImage
2724
import com.texthip.thip.R
28-
import com.texthip.thip.ui.common.buttons.OptionChipButton
25+
import com.texthip.thip.ui.common.cards.CardInputBook
2926
import com.texthip.thip.ui.group.makeroom.mock.BookData
3027
import com.texthip.thip.ui.theme.ThipTheme
3128
import com.texthip.thip.ui.theme.ThipTheme.colors
@@ -78,54 +75,14 @@ fun GroupSelectBook(
7875
)
7976
}
8077
} else {
81-
// 선택된 상태: 커버, 제목, 저자, 변경 버튼
82-
Row(
83-
modifier = Modifier
84-
.fillMaxWidth()
85-
.height(80.dp),
86-
verticalAlignment = Alignment.Bottom
87-
) {
88-
AsyncImage(
89-
model = selectedBook.imageUrl ?: R.drawable.img_book_cover_sample,
90-
contentDescription = selectedBook.title,
91-
modifier = Modifier
92-
.height(80.dp)
93-
.width(60.dp),
94-
contentScale = ContentScale.Crop
95-
)
96-
Spacer(modifier = Modifier.width(12.dp))
97-
Column(
98-
modifier = Modifier
99-
.fillMaxSize()
100-
.weight(1f),
101-
verticalArrangement = Arrangement.Top
102-
) {
103-
Text(
104-
text = selectedBook.title,
105-
color = colors.White,
106-
style = typography.menu_sb600_s14_h24
107-
)
108-
Spacer(modifier = Modifier.height(8.dp))
109-
selectedBook.author?.let {
110-
Text(
111-
text = stringResource(
112-
R.string.group_selected_book_author,
113-
selectedBook.author
114-
),
115-
color = colors.Grey01,
116-
style = typography.info_r400_s12,
117-
maxLines = 1
118-
)
119-
}
120-
}
121-
if (!isBookPreselected) {
122-
OptionChipButton(
123-
text = stringResource(R.string.change),
124-
onClick = onChangeBookClick,
125-
isSelected = false
126-
)
127-
}
128-
}
78+
CardInputBook(
79+
title = selectedBook.title,
80+
author = selectedBook.author ?: "",
81+
imageUrl = selectedBook.imageUrl,
82+
imageRes = R.drawable.img_book_cover_sample,
83+
showChangeButton = !isBookPreselected, // 사전 선택된 책인 경우 변경 버튼 숨김
84+
onChangeClick = onChangeBookClick
85+
)
12986
}
13087
}
13188
}

app/src/main/java/com/texthip/thip/ui/navigator/navigations/FeedNavigation.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,11 @@ fun NavGraphBuilder.feedNavigation(
151151
route.bookAuthor != null
152152
) {
153153
// 새 글 작성 모드: 책 정보만 있는 경우 (책 상세 페이지에서 온 경우)
154-
viewModel.selectBook(
155-
com.texthip.thip.ui.group.makeroom.mock.BookData(
156-
title = route.bookTitle,
157-
imageUrl = route.bookImageUrl ?: "",
158-
author = route.bookAuthor,
159-
isbn = route.isbn
160-
)
154+
viewModel.setPreselectedBookForFeed(
155+
isbn = route.isbn,
156+
bookTitle = route.bookTitle,
157+
bookAuthor = route.bookAuthor,
158+
bookImageUrl = route.bookImageUrl ?: ""
161159
)
162160
}
163161
}

app/src/main/java/com/texthip/thip/ui/navigator/navigations/SearchNavigation.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ fun NavGraphBuilder.searchNavigation(navController: NavHostController) {
3838
onLeftClick = {
3939
navController.popBackStack()
4040
},
41-
onRightClick = {
42-
// TODO: 우측 버튼 액션 구현
43-
},
4441
onRecruitingGroupClick = {
4542
navController.navigateToBookGroup(isbn)
4643
},

app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookDetailScreen.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ fun SearchBookDetailScreen(
6868
modifier: Modifier = Modifier,
6969
isbn: String,
7070
onLeftClick: () -> Unit = {},
71-
onRightClick: () -> Unit = {},
7271
onRecruitingGroupClick: () -> Unit = {},
7372
onWriteFeedClick: (BookDetailResponse) -> Unit = {},
7473
onFeedClick: (Long) -> Unit = {},

0 commit comments

Comments
 (0)