Skip to content

Commit a8af0d4

Browse files
committed
[ui]: 책 상세페이지 모집중인 모임방 구현 완료 (#47)
1 parent 0f16607 commit a8af0d4

3 files changed

Lines changed: 235 additions & 1 deletion

File tree

app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookDetailScreen.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import androidx.compose.runtime.remember
2626
import androidx.compose.runtime.setValue
2727
import androidx.compose.ui.Alignment
2828
import androidx.compose.ui.Modifier
29-
import androidx.compose.ui.draw.alpha
3029
import androidx.compose.ui.draw.blur
3130
import androidx.compose.ui.graphics.Brush
3231
import androidx.compose.ui.graphics.Color
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
package com.texthip.thip.ui.booksearch.screen
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Box
6+
import androidx.compose.foundation.layout.Column
7+
import androidx.compose.foundation.layout.PaddingValues
8+
import androidx.compose.foundation.layout.Row
9+
import androidx.compose.foundation.layout.Spacer
10+
import androidx.compose.foundation.layout.fillMaxSize
11+
import androidx.compose.foundation.layout.fillMaxWidth
12+
import androidx.compose.foundation.layout.height
13+
import androidx.compose.foundation.layout.padding
14+
import androidx.compose.foundation.lazy.LazyColumn
15+
import androidx.compose.foundation.lazy.items
16+
import androidx.compose.foundation.shape.RoundedCornerShape
17+
import androidx.compose.material3.Button
18+
import androidx.compose.material3.ButtonDefaults
19+
import androidx.compose.material3.Text
20+
import androidx.compose.runtime.Composable
21+
import androidx.compose.runtime.remember
22+
import androidx.compose.ui.Alignment
23+
import androidx.compose.ui.Modifier
24+
import androidx.compose.ui.res.stringResource
25+
import androidx.compose.ui.text.style.TextAlign
26+
import androidx.compose.ui.tooling.preview.Preview
27+
import androidx.compose.ui.unit.dp
28+
import com.texthip.thip.R
29+
import com.texthip.thip.ui.common.cards.CardItemRoom
30+
import com.texthip.thip.ui.common.topappbar.DefaultTopAppBar
31+
import com.texthip.thip.ui.group.myroom.mock.GroupCardItemRoomData
32+
import com.texthip.thip.ui.theme.ThipTheme
33+
import com.texthip.thip.ui.theme.ThipTheme.colors
34+
import com.texthip.thip.ui.theme.ThipTheme.typography
35+
36+
@Composable
37+
fun BookRecruitingScreen(
38+
allDataList: List<GroupCardItemRoomData>,
39+
onCardClick: (GroupCardItemRoomData) -> Unit = {},
40+
onCreateRoomClick: () -> Unit = {}
41+
) {
42+
val recruitingList = remember(allDataList) {
43+
allDataList.filter { it.isRecruiting }
44+
}
45+
46+
Box(
47+
modifier = Modifier.fillMaxSize()
48+
) {
49+
Column(
50+
Modifier.fillMaxSize()
51+
) {
52+
DefaultTopAppBar(
53+
title = stringResource(R.string.group_recruiting_title),
54+
onLeftClick = {},
55+
)
56+
57+
Column(
58+
Modifier
59+
.background(colors.Black)
60+
.fillMaxSize()
61+
.padding(horizontal = 20.dp)
62+
) {
63+
Row(
64+
modifier = Modifier.fillMaxWidth(),
65+
verticalAlignment = Alignment.CenterVertically
66+
) {
67+
Text(
68+
text = stringResource(R.string.group_searched_room_size, allDataList.size),
69+
color = colors.Grey,
70+
style = typography.menu_m500_s14_h24
71+
)
72+
}
73+
Spacer(
74+
modifier = Modifier
75+
.padding(top = 4.dp, bottom = 20.dp)
76+
.fillMaxWidth()
77+
.height(1.dp)
78+
.background(colors.DarkGrey02)
79+
)
80+
81+
if (recruitingList.isEmpty()) {
82+
Column(
83+
modifier = Modifier
84+
.fillMaxSize()
85+
.padding(bottom = 50.dp),
86+
horizontalAlignment = Alignment.CenterHorizontally,
87+
verticalArrangement = Arrangement.Center
88+
) {
89+
Text(
90+
text = stringResource(R.string.book_recruiting_empty_message),
91+
color = colors.White,
92+
style = typography.smalltitle_sb600_s18_h24,
93+
textAlign = TextAlign.Center
94+
)
95+
Text(
96+
text = stringResource(R.string.book_recruiting_empty_sub_message),
97+
color = colors.Grey,
98+
style = typography.feedcopy_r400_s14_h20,
99+
textAlign = TextAlign.Center,
100+
modifier = Modifier.padding(top = 8.dp)
101+
)
102+
}
103+
} else {
104+
LazyColumn(
105+
verticalArrangement = Arrangement.spacedBy(20.dp),
106+
contentPadding = PaddingValues(bottom = 70.dp),
107+
modifier = Modifier.fillMaxSize()
108+
) {
109+
items(recruitingList) { item ->
110+
CardItemRoom(
111+
title = item.title,
112+
participants = item.participants,
113+
maxParticipants = item.maxParticipants,
114+
isRecruiting = item.isRecruiting,
115+
endDate = item.endDate,
116+
imageRes = item.imageRes,
117+
onClick = { onCardClick(item) }
118+
)
119+
}
120+
}
121+
}
122+
}
123+
}
124+
125+
// 하단 버튼
126+
Button(
127+
colors = ButtonDefaults.buttonColors(
128+
containerColor = colors.Purple
129+
),
130+
modifier = Modifier
131+
.align(Alignment.BottomCenter)
132+
.fillMaxWidth()
133+
.height(50.dp),
134+
shape = RoundedCornerShape(0.dp),
135+
onClick = onCreateRoomClick
136+
) {
137+
Text(
138+
text = stringResource(R.string.group_recruiting_create_button),
139+
style = typography.smalltitle_sb600_s18_h24,
140+
color = colors.White
141+
)
142+
}
143+
}
144+
}
145+
146+
@Preview()
147+
@Composable
148+
fun GroupRecruitingScreenPreview() {
149+
ThipTheme {
150+
val dataList = listOf(
151+
GroupCardItemRoomData(
152+
title = "모임방 이름입니다. 모임방...",
153+
participants = 22,
154+
maxParticipants = 30,
155+
endDate = 3,
156+
isRecruiting = true,
157+
genreIndex = 0
158+
),
159+
GroupCardItemRoomData(
160+
title = "모임방 이름입니다. 모임방...",
161+
participants = 22,
162+
maxParticipants = 30,
163+
endDate = 3,
164+
isRecruiting = true,
165+
genreIndex = 0
166+
),
167+
GroupCardItemRoomData(
168+
title = "모임방 이름입니다. 모임방...",
169+
participants = 22,
170+
maxParticipants = 30,
171+
endDate = 3,
172+
isRecruiting = true,
173+
genreIndex = 0
174+
),
175+
GroupCardItemRoomData(
176+
title = "모임방 이름입니다. 모임방...",
177+
participants = 22,
178+
maxParticipants = 30,
179+
endDate = 3,
180+
isRecruiting = true,
181+
genreIndex = 0
182+
),
183+
GroupCardItemRoomData(
184+
title = "모임방 이름입니다. 모임방...",
185+
participants = 22,
186+
maxParticipants = 30,
187+
endDate = 3,
188+
isRecruiting = true,
189+
genreIndex = 0
190+
),
191+
GroupCardItemRoomData(
192+
title = "모임방 이름입니다. 모임방...",
193+
participants = 22,
194+
maxParticipants = 30,
195+
endDate = 3,
196+
isRecruiting = true,
197+
genreIndex = 0
198+
),
199+
GroupCardItemRoomData(
200+
title = "모임방 이름입니다. 모임방...",
201+
participants = 22,
202+
maxParticipants = 30,
203+
endDate = 3,
204+
isRecruiting = true,
205+
genreIndex = 0
206+
),
207+
GroupCardItemRoomData(
208+
title = "모임방 이름입니다. 모임방...",
209+
participants = 22,
210+
maxParticipants = 30,
211+
endDate = 3,
212+
isRecruiting = true,
213+
genreIndex = 0
214+
)
215+
)
216+
217+
BookRecruitingScreen(
218+
allDataList = dataList
219+
)
220+
}
221+
}
222+
223+
@Preview()
224+
@Composable
225+
fun GroupRecruitingScreenEmptyPreview() {
226+
ThipTheme {
227+
BookRecruitingScreen(
228+
allDataList = emptyList()
229+
)
230+
}
231+
}

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,5 +275,9 @@
275275
<string name="search_book_author">%1$s 저 · %2$s</string>
276276
<string name="group_filter_popular">인기순</string>
277277
<string name="group_filter_deadline">마감임박순</string>
278+
<string name="group_recruiting_title">모집중인 모임방</string>
279+
<string name="book_recruiting_empty_message">이 책으로 모집중인 모임방이 없어요.</string>
280+
<string name="book_recruiting_empty_sub_message">직접 모임방을 만들어보세요!</string>
281+
<string name="group_recruiting_create_button">모임방 만들기\n</string>
278282

279283
</resources>

0 commit comments

Comments
 (0)