From 6f07351bdcc33ffca84cbc74c95e1531414a79e1 Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 16:22:49 +0900 Subject: [PATCH 01/10] =?UTF-8?q?[refactor]:=20import=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94=20=EB=B0=8F=20=ED=95=A8=EC=88=98=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/GroupMemberLimitPicker.kt | 6 ++---- .../component/GroupRoomDurationPicker.kt | 12 +++++++++-- .../makeroom/component/GroupSelectBook.kt | 11 +++++++--- .../makeroom/component/GroupWheelPicker.kt | 18 ++++++++++++++-- .../makeroom/screen/GroupMakeRoomScreen.kt | 20 ++++++++++++++---- .../component/GroupDeadlineRoomSection.kt | 21 ++++++++++++++++--- .../myroom/component/GroupEmptyResult.kt | 1 - .../component/GroupFilteredSearchResult.kt | 9 ++++++-- .../group/myroom/component/GroupMainCard.kt | 4 ---- .../myroom/component/GroupRecentSearch.kt | 7 +++---- .../myroom/component/GroupSearchTextField.kt | 13 ++++++++++-- 11 files changed, 91 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt index 09d9d1cc..7b6437c8 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt @@ -10,13 +10,11 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.texthip.thip.R @@ -25,7 +23,7 @@ import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography @Composable -fun MemberLimitPicker( +fun GroupMemberLimitPicker( modifier: Modifier = Modifier, selectedCount: Int = 30, onCountSelected: (Int) -> Unit = { } @@ -76,7 +74,7 @@ fun MemberLimitPickerPreview() { ThipTheme { var selectedCount by remember { mutableIntStateOf(30) } - MemberLimitPicker( + GroupMemberLimitPicker( selectedCount = selectedCount, onCountSelected = { selectedCount = it } ) diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt index 3b8acac4..c36d5f4b 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt @@ -1,10 +1,18 @@ package com.texthip.thip.ui.group.makeroom.component import androidx.compose.foundation.gestures.detectTapGestures -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt index 0b31c50b..d4769c33 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt @@ -4,12 +4,17 @@ import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.border import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +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.layout.width import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Button import androidx.compose.material3.Icon -import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt index b7d353c0..404b39ed 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt @@ -5,10 +5,24 @@ import androidx.compose.animation.core.exponentialDecay import androidx.compose.animation.core.spring import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectDragGestures -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt index 8211d6c4..41b31bd0 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt @@ -1,10 +1,22 @@ package com.texthip.thip.ui.group.makeroom.screen -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +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.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.blur @@ -21,7 +33,7 @@ import com.texthip.thip.ui.group.makeroom.component.GroupBookSearchBottomSheet import com.texthip.thip.ui.group.makeroom.component.GroupInputField import com.texthip.thip.ui.group.makeroom.component.GroupRoomDurationPicker import com.texthip.thip.ui.group.makeroom.component.GroupSelectBook -import com.texthip.thip.ui.group.makeroom.component.MemberLimitPicker +import com.texthip.thip.ui.group.makeroom.component.GroupMemberLimitPicker import com.texthip.thip.ui.group.makeroom.component.SectionDivider import com.texthip.thip.ui.group.makeroom.mock.BookData import com.texthip.thip.ui.group.makeroom.mock.GroupMakeRoomRequest @@ -143,7 +155,7 @@ fun GroupMakeRoomScreen( SectionDivider() - MemberLimitPicker( + GroupMemberLimitPicker( selectedCount = uiState.memberLimit, onCountSelected = viewModel::setMemberLimit ) diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt index 9526b611..bf956155 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt @@ -2,12 +2,27 @@ package com.texthip.thip.ui.group.myroom.component import android.annotation.SuppressLint import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +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.layout.width import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush @@ -19,8 +34,8 @@ import androidx.compose.ui.unit.dp import com.texthip.thip.R import com.texthip.thip.ui.common.buttons.GenreChipRow import com.texthip.thip.ui.common.cards.CardItemRoom -import com.texthip.thip.ui.group.myroom.mock.GroupRoomSectionData import com.texthip.thip.ui.group.myroom.mock.GroupCardItemRoomData +import com.texthip.thip.ui.group.myroom.mock.GroupRoomSectionData import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt index 52fbb14f..8383df2c 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt @@ -9,7 +9,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt index 27eec17a..ba3b6ac1 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt @@ -1,7 +1,13 @@ package com.texthip.thip.ui.group.myroom.component import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.material3.Text @@ -14,7 +20,6 @@ import com.texthip.thip.R import com.texthip.thip.ui.common.buttons.GenreChipRow import com.texthip.thip.ui.common.cards.CardItemRoomSmall import com.texthip.thip.ui.group.myroom.mock.GroupCardItemRoomData -import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt index 9b5a2d6b..c7eaf26c 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt @@ -18,12 +18,8 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults -import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableFloatStateOf -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt index 373e868a..a5273ee9 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt @@ -1,6 +1,9 @@ package com.texthip.thip.ui.group.myroom.component import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -8,10 +11,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.texthip.thip.R import com.texthip.thip.ui.common.buttons.GenreChipButton -import com.texthip.thip.ui.theme.ThipTheme -import androidx.compose.foundation.layout.FlowRow -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.height import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt index 0aa99d1a..0b2f9ab5 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt @@ -1,12 +1,21 @@ package com.texthip.thip.ui.group.myroom.component import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +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.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.material3.Icon import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip From 22d9dbd29f6af81c08bb944204debc03209d8860 Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 16:48:56 +0900 Subject: [PATCH 02/10] =?UTF-8?q?[refactor]:=20Picker=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=95=88=EC=A0=95=ED=99=94=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/group/makeroom/component/GroupDatePicker.kt | 14 +++++++++----- .../group/makeroom/component/GroupWheelPicker.kt | 7 ++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt index 9b5655e0..b933856d 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt @@ -39,10 +39,14 @@ fun GroupDatePicker( val month = selectedDate.monthValue val day = selectedDate.dayOfMonth - // 유효한 범위 계산 - val years = (minDate.year..maxDate.year).toList() - val months = (1..12).toList() - val days = (1..selectedDate.lengthOfMonth()).toList() + // 유효한 범위 계산 - 날짜 변경 시 안정성을 위해 remember 사용 + val years = remember(minDate.year, maxDate.year) { + (minDate.year..maxDate.year).toList() + } + val months = remember { (1..12).toList() } + val days = remember(year, month) { + (1..LocalDate.of(year, month, 1).lengthOfMonth()).toList() + } Row( modifier = modifier.fillMaxWidth(), @@ -105,7 +109,7 @@ fun GroupDatePicker( GroupWheelPicker( modifier = Modifier.width(32.dp), items = days, - selectedItem = day, + selectedItem = day.coerceAtMost(days.max()), onItemSelected = { newDay -> val newDate = LocalDate.of(year, month, newDay) onDateSelected(newDate) diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt index 404b39ed..18e8469d 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt @@ -90,11 +90,12 @@ fun GroupWheelPicker( } } - // 오프셋이 바뀔 때 마다 선택 아이템을 갱신 - LaunchedEffect(animatableOffset.value) { + // 드래그 상태가 변경될 때만 선택 아이템 업데이트 + LaunchedEffect(isDragging) { if (!isDragging && isScrollEnabled) { + // 드래그가 끝났을 때만 최종 값 업데이트 val newSelectedIndex = offsetToIndex(animatableOffset.value) - if (items[newSelectedIndex] != selectedItem) { + if (newSelectedIndex in items.indices && items[newSelectedIndex] != selectedItem) { onItemSelected(items[newSelectedIndex]) } } From 8c0e02f2a730f7adada03b28c19e8015960fee9d Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 16:55:41 +0900 Subject: [PATCH 03/10] =?UTF-8?q?[refactor]:=20Picker=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=B5=9C=EC=A0=81=ED=99=94=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../makeroom/component/GroupWheelPicker.kt | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt index 18e8469d..cca7af26 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt @@ -17,6 +17,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf @@ -56,28 +57,28 @@ fun GroupWheelPicker( val isScrollEnabled = items.size > 1 val circular = isCircular && items.size > 2 - val selectedIndex = items.indexOf(selectedItem) + val selectedIndex = remember(items, selectedItem) { items.indexOf(selectedItem) } val animatableOffset = remember { Animatable(0f) } val coroutineScope = rememberCoroutineScope() var isDragging by remember { mutableStateOf(false) } var velocity by remember { mutableFloatStateOf(0f) } val density = LocalDensity.current - val itemHeightPx = with(density) { itemHeight.dp.toPx() } - val spacingPx = with(density) { 9.dp.toPx() } - val itemSpacing = itemHeightPx + spacingPx + val itemHeightPx = remember(density, itemHeight) { with(density) { itemHeight.dp.toPx() } } + val spacingPx = remember(density) { with(density) { 9.dp.toPx() } } + val itemSpacing = remember(itemHeightPx, spacingPx) { itemHeightPx + spacingPx } - fun getCircularIndex(index: Int): Int { - return WheelPickerUtils.getCircularIndex(index, items.size) - } + val getCircularIndex = remember(items.size) { { index: Int -> + WheelPickerUtils.getCircularIndex(index, items.size) + } } - fun normalizeOffset(offset: Float): Float { - return WheelPickerUtils.normalizeOffset(offset, itemSpacing, items.size, circular) - } + val normalizeOffset = remember(itemSpacing, items.size, circular) { { offset: Float -> + WheelPickerUtils.normalizeOffset(offset, itemSpacing, items.size, circular) + } } - fun offsetToIndex(offset: Float): Int { - return WheelPickerUtils.offsetToIndex(offset, itemSpacing, items.size, circular) - } + val offsetToIndex = remember(itemSpacing, items.size, circular) { { offset: Float -> + WheelPickerUtils.offsetToIndex(offset, itemSpacing, items.size, circular) + } } // 선택 아이템이 바뀌면 중앙에 오도록 offset 이동 LaunchedEffect(selectedItem) { @@ -101,9 +102,11 @@ fun GroupWheelPicker( } } + val containerHeight = remember(itemHeight) { (itemHeight * 3 + 36).dp } + val textStyle = typography.info_r400_s12 + Box( - modifier = modifier - .height((itemHeight * 3 + 36).dp) + modifier = modifier.height(containerHeight) ) { // 중앙 고정 박스 Box( @@ -117,7 +120,7 @@ fun GroupWheelPicker( ) { Text( text = displayText(selectedItem), - style = typography.info_r400_s12, + style = textStyle, color = Color.Transparent, textAlign = TextAlign.Center ) @@ -189,12 +192,19 @@ fun GroupWheelPicker( } ) ) { - val currOffset = - if (circular && isScrollEnabled) normalizeOffset(animatableOffset.value) else animatableOffset.value - val centerIndex = if (isScrollEnabled) (-currOffset / itemSpacing).roundToInt() else 0 + val currOffset by remember { + derivedStateOf { + if (circular && isScrollEnabled) normalizeOffset(animatableOffset.value) else animatableOffset.value + } + } + val centerIndex by remember { + derivedStateOf { + if (isScrollEnabled) (-currOffset / itemSpacing).roundToInt() else 0 + } + } // 중앙 + 위 아래 한 개만 보이도록! - val visibleRange = if (isScrollEnabled) -1..1 else 0..0 + val visibleRange = remember(isScrollEnabled) { if (isScrollEnabled) -1..1 else 0..0 } visibleRange.forEach { relIdx -> val displayIndex = centerIndex + relIdx @@ -216,7 +226,7 @@ fun GroupWheelPicker( ) { Text( text = displayText(item), - style = typography.info_r400_s12, + style = textStyle, color = colors.White, textAlign = TextAlign.Center ) From 96b9220917d7e9ab7b7e980524a46ed908a6f7b4 Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 17:26:18 +0900 Subject: [PATCH 04/10] =?UTF-8?q?[ui]:=20=EC=B9=B4=EB=93=9C=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=ED=85=9C=20=ED=8C=A8=EB=94=A9=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/texthip/thip/ui/common/cards/CardItemRoom.kt | 6 ++---- .../com/texthip/thip/ui/group/screen/GroupDoneScreen.kt | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt b/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt index a58d94da..c319d0d1 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt @@ -61,7 +61,7 @@ fun CardItemRoom( ) .clickable { onClick() }, colors = CardDefaults.cardColors( - containerColor = colors.DarkGrey50 + containerColor = colors.DarkGrey ), shape = RoundedCornerShape(12.dp) ) { @@ -88,7 +88,7 @@ fun CardItemRoom( } } - Spacer(modifier = Modifier.width(16.dp)) + Spacer(modifier = Modifier.width(12.dp)) Column( modifier = Modifier @@ -148,8 +148,6 @@ fun CardItemRoom( style = typography.menu_sb600_s12, color = colors.White ) - Spacer(modifier = Modifier.width(2.dp)) - Text( text = stringResource(R.string.card_item_participant_string), style = typography.info_m500_s12, diff --git a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt index 68a6483f..e55b4d51 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt @@ -54,6 +54,7 @@ fun GroupDoneScreen( contentPadding = PaddingValues(bottom = 20.dp), modifier = Modifier .fillMaxSize() + .padding(top = 16.dp) ) { item { From 658e813bcb49dc84946d7b016ffc475af232ed50 Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 17:26:36 +0900 Subject: [PATCH 05/10] =?UTF-8?q?[refactor]:=20preview=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myroom/component/GroupEmptyResult.kt | 21 +++ .../component/GroupFilteredSearchResult.kt | 171 +++++++++++++----- .../myroom/component/GroupLiveSearchResult.kt | 52 ++++++ .../myroom/component/GroupMyRoomFilterRow.kt | 27 ++- .../myroom/component/GroupRecentSearch.kt | 96 ++++++++-- .../myroom/component/SimplePagerIndicator.kt | 19 ++ 6 files changed, 316 insertions(+), 70 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt index 8383df2c..53ffe8eb 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt @@ -1,6 +1,8 @@ package com.texthip.thip.ui.group.myroom.component +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding @@ -8,7 +10,9 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography @@ -35,3 +39,20 @@ fun GroupEmptyResult( ) } } + +@Preview(showBackground = true) +@Composable +fun GroupEmptyResultPreview() { + ThipTheme { + Box( + modifier = Modifier + .fillMaxSize() + .background(colors.Black) + ) { + GroupEmptyResult( + mainText = "검색 결과가 없습니다", + subText = "다른 키워드로 검색해보세요" + ) + } + } +} diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt index ba3b6ac1..065fbd21 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt @@ -2,6 +2,8 @@ package com.texthip.thip.ui.group.myroom.component import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth @@ -12,14 +14,20 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.texthip.thip.R import com.texthip.thip.ui.common.buttons.GenreChipRow import com.texthip.thip.ui.common.cards.CardItemRoomSmall import com.texthip.thip.ui.group.myroom.mock.GroupCardItemRoomData +import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography @@ -31,61 +39,128 @@ fun GroupFilteredSearchResult( resultCount: Int, roomList: List ) { - GenreChipRow( - modifier = Modifier.width(20.dp), - genres = genres, - selectedIndex = selectedGenreIndex, - onSelect = onGenreSelect - ) - Spacer(modifier = Modifier.height(20.dp)) - - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = stringResource(R.string.group_searched_room_size, resultCount), - color = colors.Grey, - style = typography.menu_m500_s14_h24 + Column { + GenreChipRow( + modifier = Modifier.width(20.dp), + genres = genres, + selectedIndex = selectedGenreIndex, + onSelect = onGenreSelect ) - } - Spacer( - modifier = Modifier - .padding(top = 4.dp, bottom = 8.dp) - .fillMaxWidth() - .height(1.dp) - .background(colors.DarkGrey02) - ) + Spacer(modifier = Modifier.height(20.dp)) - if (roomList.isEmpty()) { - GroupEmptyResult( - mainText = stringResource(R.string.group_no_search_result1), - subText = stringResource(R.string.group_no_search_result2) - ) - } else { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(16.dp) + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically ) { - itemsIndexed(roomList) { index, room -> - CardItemRoomSmall( - title = room.title, - participants = room.participants, - maxParticipants = room.maxParticipants, - endDate = room.endDate, - imageRes = room.imageRes, - isWide = true, - isSecret = room.isSecret - ) - if (index < roomList.size - 1) { - Spacer( - modifier = Modifier - .fillMaxWidth() - .height(1.dp) - .background(colors.DarkGrey02) + Text( + text = stringResource(R.string.group_searched_room_size, resultCount), + color = colors.Grey, + style = typography.menu_m500_s14_h24 + ) + } + Spacer( + modifier = Modifier + .padding(top = 4.dp, bottom = 8.dp) + .fillMaxWidth() + .height(1.dp) + .background(colors.DarkGrey02) + ) + + if (roomList.isEmpty()) { + GroupEmptyResult( + mainText = stringResource(R.string.group_no_search_result1), + subText = stringResource(R.string.group_no_search_result2) + ) + } else { + LazyColumn( + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + itemsIndexed(roomList) { index, room -> + CardItemRoomSmall( + title = room.title, + participants = room.participants, + maxParticipants = room.maxParticipants, + endDate = room.endDate, + imageRes = room.imageRes, + isWide = true, + isSecret = room.isSecret ) + if (index < roomList.size - 1) { + Spacer( + modifier = Modifier + .fillMaxWidth() + .height(1.dp) + .background(colors.DarkGrey02) + ) + } } } } } } +@Preview(showBackground = true) +@Composable +fun GroupFilteredSearchResultPreview() { + ThipTheme { + Box( + modifier = Modifier + .background(colors.Black) + .padding(16.dp) + ) { + var selectedGenre by remember { mutableIntStateOf(0) } + + GroupFilteredSearchResult( + genres = listOf("전체", "소설", "에세이", "자기계발", "경제/경영", "과학"), + selectedGenreIndex = selectedGenre, + onGenreSelect = { selectedGenre = it }, + resultCount = 3, + roomList = listOf( + GroupCardItemRoomData( + title = "해리포터 독서모임", + participants = 5, + maxParticipants = 10, + isRecruiting = true, + endDate = 7, + imageRes = R.drawable.bookcover_sample, + genreIndex = 1, + isSecret = false + ), + GroupCardItemRoomData( + title = "소설 읽기 모임", + participants = 8, + maxParticipants = 12, + isRecruiting = false, + endDate = 3, + imageRes = R.drawable.bookcover_sample, + genreIndex = 1, + isSecret = true + ) + ) + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun GroupFilteredSearchResultEmptyPreview() { + ThipTheme { + Box( + modifier = Modifier + .background(colors.Black) + .padding(16.dp) + ) { + var selectedGenre by remember { mutableIntStateOf(0) } + + GroupFilteredSearchResult( + genres = listOf("전체", "소설", "에세이", "자기계발", "경제/경영", "과학"), + selectedGenreIndex = selectedGenre, + onGenreSelect = { selectedGenre = it }, + resultCount = 0, + roomList = emptyList() + ) + } + } +} + diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt index 33a56139..6b4c0dbd 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt @@ -2,16 +2,21 @@ package com.texthip.thip.ui.group.myroom.component import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer 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.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.texthip.thip.R import com.texthip.thip.ui.common.cards.CardItemRoomSmall import com.texthip.thip.ui.group.myroom.mock.GroupCardItemRoomData +import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors @Composable @@ -42,3 +47,50 @@ fun GroupLiveSearchResult( } } } + +@Preview(showBackground = true) +@Composable +fun GroupLiveSearchResultPreview() { + ThipTheme { + Box( + modifier = Modifier + .background(colors.Black) + .padding(16.dp) + ) { + GroupLiveSearchResult( + roomList = listOf( + GroupCardItemRoomData( + title = "해리포터 독서모임", + participants = 5, + maxParticipants = 10, + isRecruiting = true, + endDate = 7, + imageRes = R.drawable.bookcover_sample, + genreIndex = 0, + isSecret = false + ), + GroupCardItemRoomData( + title = "소설 읽기 모임", + participants = 8, + maxParticipants = 12, + isRecruiting = false, + endDate = 3, + imageRes = R.drawable.bookcover_sample, + genreIndex = 1, + isSecret = true + ), + GroupCardItemRoomData( + title = "비즈니스 서적 스터디", + participants = 3, + maxParticipants = 8, + isRecruiting = true, + endDate = null, + imageRes = R.drawable.bookcover_sample, + genreIndex = 2, + isSecret = false + ) + ) + ) + } + } +} diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt index dfa8e3d6..b4ef095f 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt @@ -3,10 +3,16 @@ package com.texthip.thip.ui.group.myroom.component import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.texthip.thip.R import com.texthip.thip.ui.common.buttons.OptionChipButton +import com.texthip.thip.ui.theme.ThipTheme @Composable fun GroupMyRoomFilterRow( @@ -18,14 +24,31 @@ fun GroupMyRoomFilterRow( ) { OptionChipButton( text = stringResource(R.string.on_going), - isFilled = true, + isFilled = selectedStates[0], onClick = { onToggle(0) } ) OptionChipButton( text = stringResource(R.string.recruiting), - isFilled = true, + isFilled = selectedStates[1], onClick = { onToggle(1) } ) } } +@Preview(showBackground = true) +@Composable +fun GroupMyRoomFilterRowPreview() { + ThipTheme { + var selectedStates by remember { mutableStateOf(booleanArrayOf(true, false)) } + + GroupMyRoomFilterRow( + selectedStates = selectedStates, + onToggle = { index -> + selectedStates = selectedStates.copyOf().apply { + this[index] = !this[index] + } + } + ) + } +} + diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt index a5273ee9..797f84e7 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt @@ -1,16 +1,26 @@ package com.texthip.thip.ui.group.myroom.component +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding 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.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.texthip.thip.R import com.texthip.thip.ui.common.buttons.GenreChipButton +import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography @@ -20,31 +30,77 @@ fun GroupRecentSearch( onSearchClick: (String) -> Unit, onRemove: (String) -> Unit ) { - Text( - text = stringResource(R.string.group_recent_search), - color = colors.White, - style = typography.menu_r400_s14_h24 - ) - Spacer(modifier = Modifier.height(16.dp)) - if (recentSearches.isEmpty()) { + Column { Text( - text = stringResource(R.string.group_no_recent_search), - color = colors.Grey01, + text = stringResource(R.string.group_recent_search), + color = colors.White, style = typography.menu_r400_s14_h24 ) - } else { - FlowRow( - verticalArrangement = Arrangement.spacedBy(12.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp), - maxLines = 2, + Spacer(modifier = Modifier.height(16.dp)) + if (recentSearches.isEmpty()) { + Text( + text = stringResource(R.string.group_no_recent_search), + color = colors.Grey01, + style = typography.menu_r400_s14_h24 + ) + } else { + FlowRow( + verticalArrangement = Arrangement.spacedBy(12.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + maxLines = 2, + ) { + recentSearches.take(9).forEach { keyword -> + GenreChipButton( + text = keyword, + onClick = { onSearchClick(keyword) }, + onCloseClick = { onRemove(keyword) } + ) + } + } + } + } +} + +@Preview(showBackground = true) +@Composable +fun GroupRecentSearchPreview() { + ThipTheme { + Box( + modifier = Modifier + .background(colors.Black) + .padding(16.dp) ) { - recentSearches.take(9).forEach { keyword -> - GenreChipButton( - text = keyword, - onClick = { onSearchClick(keyword) }, - onCloseClick = { onRemove(keyword) } - ) + var searches by remember { + mutableStateOf(listOf("해리포터", "소설", "추리소설", "로맨스", "SF", "판타지")) } + + GroupRecentSearch( + recentSearches = searches, + onSearchClick = { keyword -> + // 검색 동작 시뮬레이션 + }, + onRemove = { keyword -> + searches = searches.filter { it != keyword } + } + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun GroupRecentSearchEmptyPreview() { + ThipTheme { + Box( + modifier = Modifier + .background(colors.Black) + .padding(16.dp) + ) { + GroupRecentSearch( + recentSearches = emptyList(), + onSearchClick = { }, + onRemove = { } + ) } } } diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt index 983c8fe1..f32b717c 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt @@ -10,7 +10,9 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors @Composable @@ -36,4 +38,21 @@ fun SimplePagerIndicator( ) } } +} + +@Preview(showBackground = true) +@Composable +fun SimplePagerIndicatorPreview() { + ThipTheme { + Box( + modifier = Modifier + .background(colors.Black) + .padding(16.dp) + ) { + SimplePagerIndicator( + pageCount = 5, + currentPage = 2 + ) + } + } } \ No newline at end of file From 57b539df26fac010878789028530b901a46305ce Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 18:50:48 +0900 Subject: [PATCH 06/10] =?UTF-8?q?[refactor]:=20=EB=AA=A8=EC=9E=84=EB=B0=A9?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20=EB=B0=8F=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=EC=9D=98=20=ED=8C=A8=EB=94=A9=20=EB=B0=8F=20ui=20?= =?UTF-8?q?=EB=94=94=EC=9E=90=EC=9D=B8=EC=97=90=20=EB=A7=9E=EA=B2=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/common/cards/CardItemRoomSmall.kt | 7 +- .../thip/ui/common/cards/CardRoomBook.kt | 2 +- .../ui/common/forms/SearchBookTextField.kt | 2 +- .../myroom/component/GroupEmptyResult.kt | 1 - .../component/GroupFilteredSearchResult.kt | 18 ++--- .../myroom/component/GroupLiveSearchResult.kt | 6 +- .../group/myroom/component/GroupMainCard.kt | 12 +++- .../myroom/component/GroupMyRoomFilterRow.kt | 4 +- .../myroom/component/GroupRecentSearch.kt | 3 +- .../myroom/component/GroupSearchTextField.kt | 3 +- .../myroom/component/SimplePagerIndicator.kt | 1 - .../ui/group/myroom/screen/GroupMyScreen.kt | 10 +-- .../ui/group/myroom/screen/GroupRoomScreen.kt | 69 ++++++++++--------- .../myroom/screen/GroupRoomSecretScreen.kt | 3 +- .../thip/ui/group/screen/GroupScreen.kt | 8 +-- app/src/main/res/values/strings.xml | 4 +- 16 files changed, 72 insertions(+), 81 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt b/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt index eafaf728..e4599b5e 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt @@ -52,7 +52,7 @@ fun CardItemRoomSmall( modifier .width(232.dp) } - val bgColor = if (isWide) colors.Black else colors.DarkGrey50 + val bgColor = if (isWide) colors.Black else colors.DarkGrey Card( modifier = cardModifier @@ -100,8 +100,9 @@ fun CardItemRoomSmall( Column( modifier = Modifier.fillMaxWidth() ) { - Spacer(modifier = Modifier.height(4.dp)) + Text( + modifier = Modifier.padding(top = 4.dp), text = title, color = colors.White, style = if (isWide) typography.smalltitle_sb600_s18_h24 else typography.menu_sb600_s14_h24, @@ -142,7 +143,7 @@ fun CardItemRoomSmall( ) } } - Spacer(modifier = Modifier.height(4.dp)) + Spacer(modifier = Modifier.height(7.dp)) endDate?.let { Text( diff --git a/app/src/main/java/com/texthip/thip/ui/common/cards/CardRoomBook.kt b/app/src/main/java/com/texthip/thip/ui/common/cards/CardRoomBook.kt index 80c68feb..b298e218 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/cards/CardRoomBook.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/cards/CardRoomBook.kt @@ -134,9 +134,9 @@ fun CardRoomBook( ) } - Spacer(modifier = Modifier.height(21.dp)) Text( + modifier = Modifier.padding(top = 21.dp), text = stringResource(R.string.card_book_explain), color = colors.White, style = typography.info_m500_s12, diff --git a/app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt b/app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt index cb253672..02f85f11 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt @@ -53,7 +53,7 @@ fun SearchBookTextField( .fillMaxWidth() .height(40.dp) .clip(shape) - .background(colors.DarkGrey02), + .background(colors.DarkGrey), contentAlignment = Alignment.CenterStart ) { Row( diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt index 53ffe8eb..2b45da10 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt @@ -47,7 +47,6 @@ fun GroupEmptyResultPreview() { Box( modifier = Modifier .fillMaxSize() - .background(colors.Black) ) { GroupEmptyResult( mainText = "검색 결과가 없습니다", diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt index 065fbd21..9f9c5226 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt @@ -49,8 +49,7 @@ fun GroupFilteredSearchResult( Spacer(modifier = Modifier.height(20.dp)) Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically + modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically ) { Text( text = stringResource(R.string.group_searched_room_size, resultCount), @@ -72,9 +71,7 @@ fun GroupFilteredSearchResult( subText = stringResource(R.string.group_no_search_result2) ) } else { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(16.dp) - ) { + LazyColumn { itemsIndexed(roomList) { index, room -> CardItemRoomSmall( title = room.title, @@ -88,6 +85,7 @@ fun GroupFilteredSearchResult( if (index < roomList.size - 1) { Spacer( modifier = Modifier + .padding(top = 12.dp, bottom = 12.dp) .fillMaxWidth() .height(1.dp) .background(colors.DarkGrey02) @@ -105,13 +103,12 @@ fun GroupFilteredSearchResultPreview() { ThipTheme { Box( modifier = Modifier - .background(colors.Black) .padding(16.dp) ) { var selectedGenre by remember { mutableIntStateOf(0) } - + GroupFilteredSearchResult( - genres = listOf("전체", "소설", "에세이", "자기계발", "경제/경영", "과학"), + genres = listOf("문학", "과학•IT", "사회과학", "인문학", "예술"), selectedGenreIndex = selectedGenre, onGenreSelect = { selectedGenre = it }, resultCount = 3, @@ -125,8 +122,7 @@ fun GroupFilteredSearchResultPreview() { imageRes = R.drawable.bookcover_sample, genreIndex = 1, isSecret = false - ), - GroupCardItemRoomData( + ), GroupCardItemRoomData( title = "소설 읽기 모임", participants = 8, maxParticipants = 12, @@ -152,7 +148,7 @@ fun GroupFilteredSearchResultEmptyPreview() { .padding(16.dp) ) { var selectedGenre by remember { mutableIntStateOf(0) } - + GroupFilteredSearchResult( genres = listOf("전체", "소설", "에세이", "자기계발", "경제/경영", "과학"), selectedGenreIndex = selectedGenre, diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt index 6b4c0dbd..53a682f1 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt @@ -23,9 +23,7 @@ import com.texthip.thip.ui.theme.ThipTheme.colors fun GroupLiveSearchResult( roomList: List ) { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(16.dp) - ) { + LazyColumn { itemsIndexed(roomList) { index, room -> CardItemRoomSmall( title = room.title, @@ -39,6 +37,7 @@ fun GroupLiveSearchResult( if (index < roomList.size - 1) { Spacer( modifier = Modifier + .padding(top = 12.dp, bottom = 12.dp) .fillMaxWidth() .height(1.dp) .background(colors.DarkGrey02) @@ -54,7 +53,6 @@ fun GroupLiveSearchResultPreview() { ThipTheme { Box( modifier = Modifier - .background(colors.Black) .padding(16.dp) ) { GroupLiveSearchResult( diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt index c7eaf26c..2feb3c94 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt @@ -27,8 +27,10 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import com.texthip.thip.R import com.texthip.thip.ui.group.myroom.mock.GroupCardData import com.texthip.thip.ui.theme.ThipTheme @@ -109,7 +111,6 @@ fun GroupMainCard( color = colors.Grey02, style = typography.menu_sb600_s12, ) - Spacer(Modifier.width(2.dp)) Text( text = stringResource(R.string.group_participant_string), color = colors.Grey02, @@ -127,9 +128,14 @@ fun GroupMainCard( ) Spacer(Modifier.width(4.dp)) Text( - text = "${data.progress}%", + text = "${data.progress}", color = colors.Purple, - style = typography.view_m500_s14, + style = typography.smalltitle_sb600_s16_h20 + ) + Text( + text = "%", + color = colors.Purple, + style = typography.menu_sb600_s12, ) } Spacer(Modifier.height(10.dp)) diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt index b4ef095f..ab7067fe 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt @@ -24,12 +24,12 @@ fun GroupMyRoomFilterRow( ) { OptionChipButton( text = stringResource(R.string.on_going), - isFilled = selectedStates[0], + isFilled = true, onClick = { onToggle(0) } ) OptionChipButton( text = stringResource(R.string.recruiting), - isFilled = selectedStates[1], + isFilled = true, onClick = { onToggle(1) } ) } diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt index 797f84e7..158fe4bb 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt @@ -34,7 +34,7 @@ fun GroupRecentSearch( Text( text = stringResource(R.string.group_recent_search), color = colors.White, - style = typography.menu_r400_s14_h24 + style = typography.smalltitle_sb600_s18_h24 ) Spacer(modifier = Modifier.height(16.dp)) if (recentSearches.isEmpty()) { @@ -67,7 +67,6 @@ fun GroupRecentSearchPreview() { ThipTheme { Box( modifier = Modifier - .background(colors.Black) .padding(16.dp) ) { var searches by remember { diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt index 0b2f9ab5..22b2d107 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt @@ -38,12 +38,11 @@ fun GroupSearchTextField( onClick: (() -> Unit)? = null ) { val textStyle = typography.menu_r400_s14_h24.copy( - fontSize = 14.sp, lineHeight = 16.sp, color = colors.White ) val shape = RoundedCornerShape(12.dp) - val backgroundColor = colors.DarkGrey50 + val backgroundColor = colors.DarkGrey val cursorColor = colors.NeonGreen Box( diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt index f32b717c..5589d37d 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt @@ -46,7 +46,6 @@ fun SimplePagerIndicatorPreview() { ThipTheme { Box( modifier = Modifier - .background(colors.Black) .padding(16.dp) ) { SimplePagerIndicator( diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt index 589f9198..4df8b8fb 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt @@ -75,12 +75,12 @@ fun GroupMyScreen( } ) - Spacer(modifier = Modifier.height(10.dp)) + Spacer(modifier = Modifier.height(20.dp)) if (filteredList.isNotEmpty()) { LazyColumn( verticalArrangement = Arrangement.spacedBy(20.dp), - contentPadding = PaddingValues(top = 10.dp, bottom = 20.dp), + contentPadding = PaddingValues(bottom = 20.dp), modifier = Modifier.fillMaxSize() ) { items(filteredList) { item -> @@ -102,12 +102,6 @@ fun GroupMyScreen( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { - Icon( - painter = painterResource(R.drawable.ic_notification), - contentDescription = null, - tint = colors.Grey02, - modifier = Modifier.padding(bottom = 12.dp) - ) Text( text = stringResource(R.string.group_myroom_error_comment1), color = colors.White, diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt index c80d9329..426b1f96 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt @@ -113,11 +113,8 @@ fun GroupRoomScreen( Column( Modifier .fillMaxSize() - .padding(start = 20.dp, end = 20.dp) + .padding(start = 20.dp, end = 20.dp, bottom = 20.dp) ) { - Spacer(modifier = Modifier.height(20.dp)) - - //타이틀 Row( verticalAlignment = Alignment.CenterVertically ) { @@ -142,10 +139,9 @@ fun GroupRoomScreen( ) } } - Spacer(modifier = Modifier.height(32.dp)) - //소개글 Text( + modifier = Modifier.padding(top = 40.dp), text = stringResource(R.string.group_room_desc), style = typography.menu_sb600_s14_h24, color = colors.White, @@ -181,8 +177,9 @@ fun GroupRoomScreen( color = colors.White ) } - Spacer(Modifier.height(12.dp)) + Text( + modifier = Modifier.padding(top = 12.dp), text = stringResource( R.string.group_room_period, detail.startDate, @@ -213,8 +210,8 @@ fun GroupRoomScreen( color = colors.White ) } - Spacer(Modifier.height(12.dp)) Row( + modifier = Modifier.padding(top = 12.dp), verticalAlignment = Alignment.CenterVertically ) { Text( @@ -238,11 +235,12 @@ fun GroupRoomScreen( } } - Spacer(Modifier.height(16.dp)) Row( + Modifier + .fillMaxWidth() + .padding(top = 22.dp, bottom = 30.dp), verticalAlignment = Alignment.CenterVertically ) { - // 모집 마감/장르 Box( Modifier .background(colors.Grey03, shape = RoundedCornerShape(14.dp)) @@ -287,8 +285,6 @@ fun GroupRoomScreen( } } - Spacer(Modifier.height(30.dp)) - //읽을 책 정보 CardRoomBook( title = detail.bookData.title, @@ -298,27 +294,32 @@ fun GroupRoomScreen( imageRes = detail.bookData.imageRes ) - Spacer(Modifier.height(40.dp)) - Text( - text = stringResource(R.string.group_recommend), - style = typography.smalltitle_sb600_s18_h24, - color = colors.White - ) - Spacer(Modifier.height(24.dp)) + // 추천 모임방이 있을 때만 표시 + if (detail.recommendations.isNotEmpty()) { + Text( + modifier = Modifier.padding(top = 40.dp), + text = stringResource(R.string.group_recommend), + style = typography.smalltitle_sb600_s18_h24, + color = colors.White + ) - //추천 모임방 - LazyRow( - horizontalArrangement = Arrangement.spacedBy(20.dp) - ) { - items(detail.recommendations) { rec -> - CardItemRoomSmall( - title = rec.title, - participants = rec.participants, - maxParticipants = rec.maxParticipants, - endDate = rec.endDate, - imageRes = rec.imageRes, - onClick = { onRecommendationClick(rec) } - ) + //추천 모임방 + LazyRow( + modifier = Modifier + .padding(top = 24.dp) + .fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(20.dp) + ) { + items(detail.recommendations) { rec -> + CardItemRoomSmall( + title = rec.title, + participants = rec.participants, + maxParticipants = rec.maxParticipants, + endDate = rec.endDate, + imageRes = rec.imageRes, + onClick = { onRecommendationClick(rec) } + ) + } } } } @@ -493,7 +494,7 @@ fun GroupRoomScreenPreview_Join() { members = 22, maxMembers = 30, daysLeft = 4, - genre = "고전 문학", + genre = "문학", bookData = bookData, recommendations = recommendations ) @@ -623,7 +624,7 @@ fun GroupRoomScreenPreview_Close() { members = 15, // 적절한 인원 maxMembers = 30, daysLeft = 7, // 마감일이 조금 더 남음 - genre = "고전 문학", + genre = "문학", bookData = bookData, recommendations = recommendations ) diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt index b96caccb..6f8c8d81 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt @@ -89,14 +89,13 @@ fun GroupRoomSecretScreen( Spacer(modifier = Modifier.height(160.dp)) Text( + modifier = Modifier.padding(bottom = 32.dp), text = stringResource(R.string.group_secret_screen_comment), style = typography.smalltitle_sb600_s18_h24, color = colors.White, textAlign = TextAlign.Center ) - Spacer(modifier = Modifier.height(32.dp)) - Row( horizontalArrangement = Arrangement.spacedBy(16.dp), verticalAlignment = Alignment.CenterVertically diff --git a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt index a7a97c9f..20fe2f5f 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.Spacer 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.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable @@ -59,15 +60,14 @@ fun GroupScreen( onLeftClick = { }, onRightClick = { } ) - Spacer(Modifier.height(16.dp)) // 검색창 GroupSearchTextField( + modifier = Modifier.padding(top = 16.dp, bottom = 32.dp), value = searchText, onValueChange = {}, onClick = {} ) - Spacer(Modifier.height(32.dp)) // 내 모임방 헤더 + 카드 GroupMySectionHeader( @@ -83,11 +83,11 @@ fun GroupScreen( Spacer( Modifier + .padding(bottom = 32.dp) .height(10.dp) .fillMaxWidth() .background(color = colors.DarkGrey02) ) - Spacer(Modifier.height(32.dp)) // 마감 임박한 독서 모임방 GroupRoomDeadlineSection( @@ -105,7 +105,7 @@ fun GroupScreen( } -@Preview() +@Preview @Composable fun PreviewGroupScreen() { ThipTheme { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d1ca9807..5107a79a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -175,8 +175,8 @@ 비밀번호를 입력해주세요. 비밀번호가 일치하지 않습니다. 모임방 참여가 완료되었어요! - 참여를 취소하시겠어요? - 참여 취소 후 다시 참여할 수 있어요. + 모임방 참여를 취소하시겠어요? + 지금 취소해도, 활동 시작 전에 다시 참여 가능해요. 모임방 참여가 취소되었어요! 다른 방을 찾아보세요. 기록할 페이지 총평 From 4526b808dd1e35e53160a770a1464de79e6acdd3 Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 19:22:25 +0900 Subject: [PATCH 07/10] =?UTF-8?q?[ui]:=20=EB=AA=A8=EC=9E=84=EB=B0=A9=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=ED=8E=98=EC=9D=B4=EC=A7=80=20ui=20?= =?UTF-8?q?=EC=84=B8=EB=B6=80=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/common/forms/SearchBookTextField.kt | 4 ++-- .../thip/ui/common/forms/WarningTextField.kt | 22 ++++++------------- .../component/GroupBookListWithScrollbar.kt | 20 +++++++++-------- .../component/GroupEmptyBookSheetContent.kt | 17 +++++++------- .../makeroom/component/GroupSelectBook.kt | 2 +- .../ui/group/makeroom/mock/GroupBookData.kt | 16 +++++++------- .../makeroom/screen/GroupMakeRoomScreen.kt | 5 ++++- app/src/main/res/values/strings.xml | 5 +++-- 8 files changed, 45 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt b/app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt index 02f85f11..11233ceb 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt @@ -53,7 +53,7 @@ fun SearchBookTextField( .fillMaxWidth() .height(40.dp) .clip(shape) - .background(colors.DarkGrey), + .background(colors.DarkGrey02), contentAlignment = Alignment.CenterStart ) { Row( @@ -89,7 +89,7 @@ fun SearchBookTextField( if (text.isNotEmpty()) { Icon( - painter = painterResource(id = R.drawable.ic_x_circle_grey), + painter = painterResource(id = R.drawable.ic_x_circle_grey02), contentDescription = "Clear text", modifier = Modifier .clickable { onValueChange("") }, diff --git a/app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt b/app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt index 02e0a799..d5f433d2 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt @@ -82,19 +82,12 @@ fun WarningTextField( ), trailingIcon = { if (showIcon) { - if (value.isNotEmpty()) { - Icon( - painter = painterResource(id = R.drawable.ic_x_circle_white), - contentDescription = "Clear text", - modifier = Modifier.clickable { onValueChange("")}, - tint = Color.Unspecified - ) - } else { - Icon( - painter = painterResource(id = R.drawable.ic_x_circle), - contentDescription = "Clear text" - ) - } + Icon( + painter = painterResource(id = R.drawable.ic_x_circle_grey), + contentDescription = "Clear text", + modifier = Modifier.clickable { onValueChange("") }, + tint = Color.Unspecified + ) } }, singleLine = true, @@ -159,9 +152,8 @@ fun WarningTextFieldPreviewNormal() { contentAlignment = Alignment.Center ) { WarningTextField( - value = text, - onValueChange = { text = it }, + onValueChange = { text = it }, hint = "인풋 텍스트", showWarning = false, showIcon = true, diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt index 9d8965e6..db9fc7fb 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt @@ -39,21 +39,23 @@ fun GroupBookListWithScrollbar( .verticalScroll(scrollState) .drawVerticalScrollbar(scrollState) ) { - books.forEach { book -> + books.forEachIndexed { index, book -> CardBookSearch( title = book.title, imageRes = book.imageRes, onClick = { onBookClick(book) } ) - Spacer(modifier = Modifier.height(12.dp)) - Spacer(modifier = Modifier - .fillMaxWidth() - .padding(end = 6.dp) - .height(1.dp) - .background(color = colors.Grey02) - ) - Spacer(modifier = Modifier.height(12.dp)) + if (index < books.size - 1) { + Spacer(modifier = Modifier.height(12.dp)) + Spacer(modifier = Modifier + .fillMaxWidth() + .padding(end = 6.dp) + .height(1.dp) + .background(color = colors.Grey02) + ) + Spacer(modifier = Modifier.height(12.dp)) + } } } } diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupEmptyBookSheetContent.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupEmptyBookSheetContent.kt index d0d1028b..2f36b707 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupEmptyBookSheetContent.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupEmptyBookSheetContent.kt @@ -19,6 +19,7 @@ import com.texthip.thip.R import com.texthip.thip.ui.common.buttons.ActionMediumButton import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors +import com.texthip.thip.ui.theme.ThipTheme.typography @Composable fun EmptyBookSheetContent( @@ -30,16 +31,16 @@ fun EmptyBookSheetContent( .padding(bottom = 30.dp), horizontalAlignment = Alignment.CenterHorizontally ) { - Icon( - painter = painterResource(id = R.drawable.ic_notification), - contentDescription = null, - tint = colors.Grey02 + Text( + text = stringResource(R.string.group_register_book_comment_1), + color = colors.Grey, + style = typography.copy_m500_s14_h20 ) - Spacer(Modifier.height(12.dp)) + Text( - text = stringResource(R.string.group_register_book_comment), - color = ThipTheme.colors.Grey02, - style = ThipTheme.typography.copy_m500_s14_h20 + text = stringResource(R.string.group_register_book_comment_2), + color = colors.Grey, + style = typography.copy_m500_s14_h20 ) Spacer(Modifier.height(24.dp)) diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt index d4769c33..dc9864fd 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt @@ -118,7 +118,7 @@ fun GroupSelectBook( OptionChipButton( text = stringResource(R.string.change), onClick = onChangeBookClick, - isSelected = true + isSelected = false ) } } diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/mock/GroupBookData.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/mock/GroupBookData.kt index 7d3366ff..e80bd652 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/mock/GroupBookData.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/mock/GroupBookData.kt @@ -9,14 +9,14 @@ data class BookData( ) val dummySavedBooks = listOf( - BookData("토마토 컬러면", R.drawable.bookcover_sample), - BookData("사슴", R.drawable.bookcover_sample), - BookData("토마토 컬러면", R.drawable.bookcover_sample), - BookData("사슴", R.drawable.bookcover_sample), - BookData("토마토 컬러면", R.drawable.bookcover_sample), - BookData("사슴", R.drawable.bookcover_sample), - BookData("토마토 컬러면", R.drawable.bookcover_sample), - BookData("사슴", R.drawable.bookcover_sample) + BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"), + BookData("사슴", R.drawable.bookcover_sample, "최정화"), + BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"), + BookData("사슴", R.drawable.bookcover_sample, "최정화"), + BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"), + BookData("사슴", R.drawable.bookcover_sample, "최정화"), + BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"), + BookData("사슴", R.drawable.bookcover_sample, "최정화") ) val dummyGroupBooks = listOf( BookData("명작 읽기방", R.drawable.bookcover_sample), diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt index 41b31bd0..429408b0 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt @@ -194,7 +194,10 @@ fun GroupMakeRoomScreen( warningMessage = stringResource(R.string.group_private_warning_message), maxLength = 4, isNumberOnly = true, - keyboardType = KeyboardType.NumberPassword + keyboardType = KeyboardType.NumberPassword, + showIcon = true, + showLimit = false, + containerColor = colors.DarkGrey02 ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5107a79a..8e2099e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -199,8 +199,9 @@ 저장한 책 모임 책 책 제목을 검색해보세요. - 책 등록하기 - 현재 등록된 책이 아닙니다.\n원하시는 책을 신청해주세요. + 책 신청하기 + 현재 등록된 책이 아닙니다. + 원하시는 책을 신청해주세요. 책 신청 이메일로 책 제목, 출판사를 보내주시면 빠른 시일내로 책을 추가해드릴게요! From 7d9d8ae6d0244d8b2eb3c8ab1acf6fb01d6d7a99 Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 19:27:22 +0900 Subject: [PATCH 08/10] =?UTF-8?q?[ui]:=20=EB=B0=94=ED=85=80=20=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=EC=9D=98=20=EA=B2=80=EC=83=89=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/GroupBookSearchBottomSheet.kt | 61 +++++++++++++++---- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt index 68682685..829e1701 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf @@ -33,15 +34,29 @@ fun GroupBookSearchBottomSheet( savedBooks: List = emptyList(), groupBooks: List = emptyList() ) { - // 책이 있는지 여부 체크 val hasBooks = savedBooks.isNotEmpty() || groupBooks.isNotEmpty() var selectedTab by rememberSaveable { mutableIntStateOf(0) } val tabs = listOf( stringResource(R.string.group_saved_book), stringResource(R.string.group_book) ) - val books = if (selectedTab == 0) savedBooks else groupBooks + var searchText by rememberSaveable { mutableStateOf("") } + val currentBooks = if (selectedTab == 0) savedBooks else groupBooks + + val filteredBooks by remember(currentBooks, searchText) { + derivedStateOf { + if (searchText.isEmpty()) { + currentBooks + } else { + currentBooks.filter { book -> + book.title.contains(searchText, ignoreCase = true) || + (book.author?.contains(searchText, ignoreCase = true) == true) + } + } + } + } + CustomBottomSheet( onDismiss = onDismiss ) { @@ -55,7 +70,7 @@ fun GroupBookSearchBottomSheet( hint = stringResource(R.string.group_book_search_hint), text = searchText, onValueChange = { searchText = it }, - onSearch = { /* 검색 구현 */ }, + onSearch = { /* 이미 실시간으로 필터링됨 */ }, ) Spacer(Modifier.height(20.dp)) } @@ -64,7 +79,10 @@ fun GroupBookSearchBottomSheet( HeaderMenuBarTab( titles = tabs, selectedTabIndex = selectedTab, - onTabSelected = { selectedTab = it }, + onTabSelected = { + selectedTab = it + // searchText = "" + }, indicatorColor = ThipTheme.colors.White, modifier = Modifier.fillMaxWidth() ) @@ -75,13 +93,23 @@ fun GroupBookSearchBottomSheet( .padding(start = 20.dp, end = 20.dp, bottom = 20.dp) ) { Spacer(Modifier.height(20.dp)) - if (books.isEmpty()) { - EmptyBookSheetContent(onRequestBook = onRequestBook) - } else { - GroupBookListWithScrollbar( - books = books, - onBookClick = onBookSelect - ) + + when { + currentBooks.isEmpty() -> { + EmptyBookSheetContent(onRequestBook = onRequestBook) + } + filteredBooks.isEmpty() && searchText.isNotEmpty() -> { + SearchEmptyContent( + searchText = searchText, + onRequestBook = onRequestBook + ) + } + else -> { + GroupBookListWithScrollbar( + books = filteredBooks, + onBookClick = onBookSelect + ) + } } } } else { @@ -97,7 +125,16 @@ fun GroupBookSearchBottomSheet( } } - +// 검색 결과가 없을 때 표시할 컴포넌트 (필요시 구현) +@Composable +private fun SearchEmptyContent( + searchText: String, + onRequestBook: () -> Unit +) { + // 검색 결과가 없을 때의 UI + // 예: "'{searchText}'에 대한 검색 결과가 없습니다" 메시지와 책 요청 버튼 + EmptyBookSheetContent(onRequestBook = onRequestBook) +} @Preview(showBackground = true) @Composable From 6988ee74763d61981b60c850dad8e91516a3af8f Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 19:38:58 +0900 Subject: [PATCH 09/10] =?UTF-8?q?[ui]:=20=EC=B1=85=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20ui=20=EC=88=98=EC=A0=95=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/booksearch/component/BookRecentSearch.kt | 13 +++++++------ .../ui/booksearch/screen/BookDetailScreen.kt | 10 ++++------ .../ui/booksearch/screen/BookRecruitingScreen.kt | 1 + app/src/main/res/drawable/ic_x_circle_grey02.xml | 16 ++++++++++++++++ 4 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 app/src/main/res/drawable/ic_x_circle_grey02.xml diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookRecentSearch.kt b/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookRecentSearch.kt index 27743bc9..6a92cd10 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookRecentSearch.kt +++ b/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookRecentSearch.kt @@ -40,7 +40,7 @@ fun BookRecentSearch( Text( text = stringResource(R.string.group_recent_search), color = colors.White, - style = typography.menu_r400_s14_h24 + style = typography.smalltitle_sb600_s18_h24 ) Spacer(modifier = Modifier.height(16.dp)) @@ -65,17 +65,18 @@ fun BookRecentSearch( } } } - Spacer(modifier = Modifier.height(32.dp)) Row( - modifier = Modifier.fillMaxWidth(), + modifier = Modifier + .padding(top = 32.dp) + .fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.SpaceBetween ) { Text( text = stringResource(R.string.book_popular_search), color = colors.White, - style = typography.menu_r400_s14_h24 + style = typography.smalltitle_sb600_s18_h24 ) Text( text = stringResource(R.string.book_search_date, popularBookDate), @@ -87,7 +88,7 @@ fun BookRecentSearch( Box(modifier = Modifier .fillMaxWidth() - .weight(1f, fill = true) + .weight(1f) ) { if (popularBooks.isEmpty()) { Column( @@ -178,7 +179,7 @@ fun PreviewBookRecentSearch_EmptyPopular() { BookRecentSearch( recentSearches = emptyList(), popularBooks = emptyList(), - popularBookDate = "01.12.", + popularBookDate = "01.12", onSearchClick = {}, onRemove = {}, onBookClick = {} diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookDetailScreen.kt b/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookDetailScreen.kt index 142c447c..45bbbdae 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookDetailScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookDetailScreen.kt @@ -139,8 +139,6 @@ fun BookDetailScreen( ) } - Spacer(modifier = Modifier.height(8.dp)) - // 상세 정보 영역 Column( modifier = Modifier @@ -162,21 +160,21 @@ fun BookDetailScreen( book.publisher ), color = colors.Grey, - style = typography.copy_r400_s12_h20 + style = typography.menu_sb600_s12_h20 ) - Spacer(modifier = Modifier.height(32.dp)) Column( modifier = Modifier + .padding(top = 33.dp) .fillMaxWidth() .clickable { isIntroductionPopupVisible = true } ) { Text( text = stringResource(R.string.search_book_comment), color = colors.White, - style = typography.menu_r400_s14_h24, + style = typography.menu_sb600_s14_h24, ) - Spacer(modifier = Modifier.height(4.dp)) + Spacer(modifier = Modifier.height(5.dp)) Text( text = book.description, diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookRecruitingScreen.kt b/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookRecruitingScreen.kt index 9a2afca7..66163435 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookRecruitingScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookRecruitingScreen.kt @@ -55,6 +55,7 @@ fun BookRecruitingScreen( .background(colors.Black) .fillMaxSize() .padding(horizontal = 20.dp) + .padding(top = 16.dp) ) { Row( modifier = Modifier.fillMaxWidth(), diff --git a/app/src/main/res/drawable/ic_x_circle_grey02.xml b/app/src/main/res/drawable/ic_x_circle_grey02.xml new file mode 100644 index 00000000..173c712d --- /dev/null +++ b/app/src/main/res/drawable/ic_x_circle_grey02.xml @@ -0,0 +1,16 @@ + + + + From a55f7c1bf5f36a30fb65ec9107f413bbcf373a0c Mon Sep 17 00:00:00 2001 From: rbqks529 Date: Wed, 23 Jul 2025 19:46:58 +0900 Subject: [PATCH 10/10] =?UTF-8?q?[refactor]:=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B2=BD=EB=A1=9C=20=EC=9D=B4=EB=A6=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EC=99=84=EB=A3=8C=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../texthip/thip/ui/navigator/MainNavHost.kt | 4 +-- .../component/SearchActiveField.kt} | 6 ++--- .../component/SearchBookFilteredResult.kt} | 18 ++++++++----- .../component/SearchEmptyResult.kt} | 4 +-- .../component/SearchRecentBook.kt} | 10 +++---- .../{booksearch => search}/mock/BookData.kt | 2 +- .../mock/DetailBookData.kt | 2 +- .../screen/SearchBookDetailScreen.kt} | 8 +++--- .../screen/SearchBookGroupScreen.kt} | 9 +++---- .../screen/SearchBookScreen.kt} | 26 +++++++++---------- 10 files changed, 47 insertions(+), 42 deletions(-) rename app/src/main/java/com/texthip/thip/ui/{booksearch/component/BookLiveSearchResult.kt => search/component/SearchActiveField.kt} (91%) rename app/src/main/java/com/texthip/thip/ui/{booksearch/component/BookFilteredSearchResult.kt => search/component/SearchBookFilteredResult.kt} (85%) rename app/src/main/java/com/texthip/thip/ui/{booksearch/component/BookEmptyResult.kt => search/component/SearchEmptyResult.kt} (96%) rename app/src/main/java/com/texthip/thip/ui/{booksearch/component/BookRecentSearch.kt => search/component/SearchRecentBook.kt} (97%) rename app/src/main/java/com/texthip/thip/ui/{booksearch => search}/mock/BookData.kt (80%) rename app/src/main/java/com/texthip/thip/ui/{booksearch => search}/mock/DetailBookData.kt (86%) rename app/src/main/java/com/texthip/thip/ui/{booksearch/screen/BookDetailScreen.kt => search/screen/SearchBookDetailScreen.kt} (98%) rename app/src/main/java/com/texthip/thip/ui/{booksearch/screen/BookRecruitingScreen.kt => search/screen/SearchBookGroupScreen.kt} (97%) rename app/src/main/java/com/texthip/thip/ui/{booksearch/screen/BookSearchScreen.kt => search/screen/SearchBookScreen.kt} (92%) diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt b/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt index c2eed097..c0061dcc 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt @@ -4,7 +4,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.compose.runtime.Composable import androidx.navigation.NavHostController -import com.texthip.thip.ui.booksearch.screen.BookSearchScreen +import com.texthip.thip.ui.search.screen.SearchBookScreen import com.texthip.thip.ui.feed.screen.FeedScreen import com.texthip.thip.ui.group.screen.GroupScreen import com.texthip.thip.ui.mypage.screen.MyPageScreen @@ -14,7 +14,7 @@ fun MainNavHost(navController: NavHostController) { NavHost(navController = navController, startDestination = Routes.Feed.route) { composable(Routes.Feed.route) { FeedScreen(navController) } composable(Routes.Group.route) { GroupScreen(navController) } - composable(Routes.BookSearch.route) { BookSearchScreen(navController = navController) } + composable(Routes.BookSearch.route) { SearchBookScreen(navController = navController) } composable(Routes.MyPage.route) { MyPageScreen( navController, diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookLiveSearchResult.kt b/app/src/main/java/com/texthip/thip/ui/search/component/SearchActiveField.kt similarity index 91% rename from app/src/main/java/com/texthip/thip/ui/booksearch/component/BookLiveSearchResult.kt rename to app/src/main/java/com/texthip/thip/ui/search/component/SearchActiveField.kt index 06213f48..088b582b 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookLiveSearchResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/component/SearchActiveField.kt @@ -1,4 +1,4 @@ -package com.texthip.thip.ui.booksearch.component +package com.texthip.thip.ui.search.component import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -11,12 +11,12 @@ import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import com.texthip.thip.ui.booksearch.mock.BookData +import com.texthip.thip.ui.search.mock.BookData import com.texthip.thip.ui.common.cards.CardBookList import com.texthip.thip.ui.theme.ThipTheme.colors @Composable -fun BookLiveSearchResult( +fun SearchActiveField( bookList: List ) { LazyColumn( diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookFilteredSearchResult.kt b/app/src/main/java/com/texthip/thip/ui/search/component/SearchBookFilteredResult.kt similarity index 85% rename from app/src/main/java/com/texthip/thip/ui/booksearch/component/BookFilteredSearchResult.kt rename to app/src/main/java/com/texthip/thip/ui/search/component/SearchBookFilteredResult.kt index da4743ef..d3b130d0 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookFilteredSearchResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/component/SearchBookFilteredResult.kt @@ -1,7 +1,13 @@ -package com.texthip.thip.ui.booksearch.component +package com.texthip.thip.ui.search.component import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +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.itemsIndexed import androidx.compose.material3.Text @@ -12,14 +18,14 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.texthip.thip.R -import com.texthip.thip.ui.booksearch.mock.BookData +import com.texthip.thip.ui.search.mock.BookData import com.texthip.thip.ui.common.cards.CardBookList import com.texthip.thip.ui.theme.ThipTheme import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography @Composable -fun BookFilteredSearchResult( +fun SearchBookFilteredResult( resultCount: Int, bookList: List ) { @@ -43,7 +49,7 @@ fun BookFilteredSearchResult( ) if (bookList.isEmpty()) { - BookEmptyResult( + SearchEmptyResult( mainText = stringResource(R.string.book_no_search_result1), subText = stringResource(R.string.book_no_search_result2), onRequestBook = { /*책 요청 처리*/ } @@ -78,7 +84,7 @@ fun BookFilteredSearchResult( @Composable fun PreviewBookFilteredSearchResult() { ThipTheme { - BookFilteredSearchResult( + SearchBookFilteredResult( resultCount = 3, bookList = listOf( BookData( diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookEmptyResult.kt b/app/src/main/java/com/texthip/thip/ui/search/component/SearchEmptyResult.kt similarity index 96% rename from app/src/main/java/com/texthip/thip/ui/booksearch/component/BookEmptyResult.kt rename to app/src/main/java/com/texthip/thip/ui/search/component/SearchEmptyResult.kt index 4d65d476..4687d6dd 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookEmptyResult.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/component/SearchEmptyResult.kt @@ -1,4 +1,4 @@ -package com.texthip.thip.ui.booksearch.component +package com.texthip.thip.ui.search.component import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -19,7 +19,7 @@ import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography @Composable -fun BookEmptyResult( +fun SearchEmptyResult( mainText: String, subText: String, onRequestBook: () -> Unit diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookRecentSearch.kt b/app/src/main/java/com/texthip/thip/ui/search/component/SearchRecentBook.kt similarity index 97% rename from app/src/main/java/com/texthip/thip/ui/booksearch/component/BookRecentSearch.kt rename to app/src/main/java/com/texthip/thip/ui/search/component/SearchRecentBook.kt index 6a92cd10..18db248c 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/component/BookRecentSearch.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/component/SearchRecentBook.kt @@ -1,4 +1,4 @@ -package com.texthip.thip.ui.booksearch.component +package com.texthip.thip.ui.search.component import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -20,7 +20,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.texthip.thip.R -import com.texthip.thip.ui.booksearch.mock.BookData +import com.texthip.thip.ui.search.mock.BookData import com.texthip.thip.ui.common.buttons.GenreChipButton import com.texthip.thip.ui.common.cards.CardBookSearch import com.texthip.thip.ui.theme.ThipTheme @@ -28,7 +28,7 @@ import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography @Composable -fun BookRecentSearch( +fun SearchRecentBook( recentSearches: List, popularBooks: List, popularBookDate: String, @@ -142,7 +142,7 @@ fun BookRecentSearch( @Composable fun PreviewBookRecentSearch() { ThipTheme { - BookRecentSearch( + SearchRecentBook( recentSearches = listOf("소설", "심리학", "철학", "역사", "과학", "에세이"), popularBooks = listOf( BookData( @@ -176,7 +176,7 @@ fun PreviewBookRecentSearch() { @Composable fun PreviewBookRecentSearch_EmptyPopular() { ThipTheme { - BookRecentSearch( + SearchRecentBook( recentSearches = emptyList(), popularBooks = emptyList(), popularBookDate = "01.12", diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/mock/BookData.kt b/app/src/main/java/com/texthip/thip/ui/search/mock/BookData.kt similarity index 80% rename from app/src/main/java/com/texthip/thip/ui/booksearch/mock/BookData.kt rename to app/src/main/java/com/texthip/thip/ui/search/mock/BookData.kt index ae839da1..0534fc31 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/mock/BookData.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/mock/BookData.kt @@ -1,4 +1,4 @@ -package com.texthip.thip.ui.booksearch.mock +package com.texthip.thip.ui.search.mock import com.texthip.thip.R diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/mock/DetailBookData.kt b/app/src/main/java/com/texthip/thip/ui/search/mock/DetailBookData.kt similarity index 86% rename from app/src/main/java/com/texthip/thip/ui/booksearch/mock/DetailBookData.kt rename to app/src/main/java/com/texthip/thip/ui/search/mock/DetailBookData.kt index 1de6ad7b..b30df944 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/mock/DetailBookData.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/mock/DetailBookData.kt @@ -1,4 +1,4 @@ -package com.texthip.thip.ui.booksearch.mock +package com.texthip.thip.ui.search.mock import com.texthip.thip.R diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookDetailScreen.kt b/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookDetailScreen.kt similarity index 98% rename from app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookDetailScreen.kt rename to app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookDetailScreen.kt index 45bbbdae..29bf101c 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookDetailScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookDetailScreen.kt @@ -1,4 +1,4 @@ -package com.texthip.thip.ui.booksearch.screen +package com.texthip.thip.ui.search.screen import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.Image @@ -37,7 +37,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.texthip.thip.R -import com.texthip.thip.ui.booksearch.mock.DetailBookData +import com.texthip.thip.ui.search.mock.DetailBookData import com.texthip.thip.ui.common.buttons.ActionMediumButton import com.texthip.thip.ui.common.buttons.FilterButton import com.texthip.thip.ui.common.modal.InfoPopup @@ -49,7 +49,7 @@ import com.texthip.thip.ui.theme.ThipTheme.typography import kotlinx.coroutines.delay @Composable -fun BookDetailScreen( +fun SearchBookDetailScreen( modifier: Modifier = Modifier, book: DetailBookData, feedList: List = emptyList(), @@ -325,7 +325,7 @@ fun BookDetailScreen( @Composable fun PreviewBookDetailScreen() { ThipTheme { - BookDetailScreen( + SearchBookDetailScreen( book = DetailBookData( title = "채식주의자", author = "한강", diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookRecruitingScreen.kt b/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookGroupScreen.kt similarity index 97% rename from app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookRecruitingScreen.kt rename to app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookGroupScreen.kt index 66163435..f21c0ff3 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookRecruitingScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookGroupScreen.kt @@ -1,4 +1,4 @@ -package com.texthip.thip.ui.booksearch.screen +package com.texthip.thip.ui.search.screen import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -18,7 +18,6 @@ import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -34,7 +33,7 @@ import com.texthip.thip.ui.theme.ThipTheme.colors import com.texthip.thip.ui.theme.ThipTheme.typography @Composable -fun BookRecruitingScreen( +fun SearchBookGroupScreen( recruitingList: List, onCardClick: (GroupCardItemRoomData) -> Unit = {}, onCreateRoomClick: () -> Unit = {} @@ -211,7 +210,7 @@ fun GroupRecruitingScreenPreview() { ) ) - BookRecruitingScreen( + SearchBookGroupScreen( recruitingList = dataList ) } @@ -221,7 +220,7 @@ fun GroupRecruitingScreenPreview() { @Composable fun GroupRecruitingScreenEmptyPreview() { ThipTheme { - BookRecruitingScreen( + SearchBookGroupScreen( recruitingList = emptyList() ) } diff --git a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookSearchScreen.kt b/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt similarity index 92% rename from app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookSearchScreen.kt rename to app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt index 80923550..efa3f02d 100644 --- a/app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookSearchScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt @@ -1,4 +1,4 @@ -package com.texthip.thip.ui.booksearch.screen +package com.texthip.thip.ui.search.screen import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -24,17 +24,17 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.navigation.NavHostController import com.texthip.thip.R -import com.texthip.thip.ui.booksearch.component.BookEmptyResult -import com.texthip.thip.ui.booksearch.component.BookFilteredSearchResult -import com.texthip.thip.ui.booksearch.component.BookLiveSearchResult -import com.texthip.thip.ui.booksearch.component.BookRecentSearch -import com.texthip.thip.ui.booksearch.mock.BookData +import com.texthip.thip.ui.search.component.SearchEmptyResult +import com.texthip.thip.ui.search.component.SearchBookFilteredResult +import com.texthip.thip.ui.search.component.SearchActiveField +import com.texthip.thip.ui.search.component.SearchRecentBook +import com.texthip.thip.ui.search.mock.BookData import com.texthip.thip.ui.common.forms.SearchBookTextField import com.texthip.thip.ui.common.topappbar.LeftNameTopAppBar import com.texthip.thip.ui.theme.ThipTheme @Composable -fun BookSearchScreen( +fun SearchBookScreen( modifier: Modifier = Modifier, navController: NavHostController? = null, bookList: List = emptyList(), @@ -116,7 +116,7 @@ fun BookSearchScreen( when { searchText.isBlank() && !isSearched -> { - BookRecentSearch( + SearchRecentBook( recentSearches = recentSearches, popularBooks = popularBooks, popularBookDate = "01.12", // TODO: 서버로 날짜를 받아 오게 수정 @@ -135,20 +135,20 @@ fun BookSearchScreen( searchText.isNotBlank() && !isSearched -> { if (liveFilteredBookList.isEmpty()) { - BookEmptyResult( + SearchEmptyResult( mainText = stringResource(R.string.book_no_search_result1), subText = stringResource(R.string.book_no_search_result2), onRequestBook = { /*책 요청 처리*/ } ) } else { - BookLiveSearchResult( + SearchActiveField( bookList = liveFilteredBookList ) } } isSearched -> { - BookFilteredSearchResult( + SearchBookFilteredResult( resultCount = filteredBookList.size, bookList = filteredBookList, ) @@ -164,7 +164,7 @@ fun BookSearchScreen( @Composable fun PreviewBookSearchScreen_Default() { ThipTheme { - BookSearchScreen( + SearchBookScreen( bookList = listOf( BookData("aaa", "리처드 도킨스", "을유문화사", R.drawable.bookcover_sample), BookData("abc", "마틴 셀리그만", "물푸레", R.drawable.bookcover_sample), @@ -189,7 +189,7 @@ fun PreviewBookSearchScreen_Default() { @Composable fun PreviewBookSearchScreen_EmptyPopular() { ThipTheme { - BookSearchScreen( + SearchBookScreen( bookList = listOf( BookData("aaa", "리처드 도킨스", "을유문화사", R.drawable.bookcover_sample), BookData("abc", "마틴 셀리그만", "물푸레", R.drawable.bookcover_sample),