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+ }
0 commit comments