From 2ddd5c8410616e214aa4f93bc9a22206ed060b9e Mon Sep 17 00:00:00 2001 From: hsgo2430 Date: Fri, 24 Jan 2025 15:02:22 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feature:=20=EB=B2=84=ED=85=80=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=20UI=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InsertDetailInfoScreen.kt | 510 +++++++++++++----- .../selectcategory/SelectCategoryScreen.kt | 2 +- .../ui/component/SettingTimeComponent.kt | 247 +++++++++ .../ui/component/SettingTimeDayCheckBox.kt | 81 +++ .../in/koreatech/business/ui/theme/Color.kt | 3 + core/src/main/res/drawable/fi_plus.xml | 20 + 6 files changed, 725 insertions(+), 138 deletions(-) create mode 100644 business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt create mode 100644 business/src/main/java/in/koreatech/business/ui/component/SettingTimeDayCheckBox.kt create mode 100644 core/src/main/res/drawable/fi_plus.xml diff --git a/business/src/main/java/in/koreatech/business/feature/insertstore/insertdetailinfo/InsertDetailInfoScreen.kt b/business/src/main/java/in/koreatech/business/feature/insertstore/insertdetailinfo/InsertDetailInfoScreen.kt index 3a40d38bf..36d574d51 100644 --- a/business/src/main/java/in/koreatech/business/feature/insertstore/insertdetailinfo/InsertDetailInfoScreen.kt +++ b/business/src/main/java/in/koreatech/business/feature/insertstore/insertdetailinfo/InsertDetailInfoScreen.kt @@ -1,8 +1,8 @@ package `in`.koreatech.business.feature.insertstore.insertdetailinfo -import android.util.Log import androidx.compose.foundation.Image +import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -18,12 +18,18 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.Button import androidx.compose.material.ButtonDefaults +import androidx.compose.material.ModalBottomSheetLayout +import androidx.compose.material.ModalBottomSheetState +import androidx.compose.material.ModalBottomSheetValue import androidx.compose.material.Text +import androidx.compose.material.rememberModalBottomSheetState import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Modifier @@ -40,6 +46,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel +import `in`.koreatech.business.ui.component.SettingTimeDialog import `in`.koreatech.business.feature.insertstore.insertdetailinfo.operatingTime.OperatingTimeState import `in`.koreatech.business.feature.insertstore.insertmaininfo.InsertBasicInfoScreenState import `in`.koreatech.business.feature.insertstore.selectcategory.InsertStoreProgressBar @@ -50,6 +57,7 @@ import `in`.koreatech.business.ui.theme.ColorPrimary import `in`.koreatech.business.ui.theme.ColorSecondary import `in`.koreatech.koin.core.R import `in`.koreatech.koin.core.toast.ToastUtil +import kotlinx.coroutines.launch import org.orbitmvi.orbit.compose.collectAsState import org.orbitmvi.orbit.compose.collectSideEffect @@ -104,7 +112,6 @@ fun InsertDetailInfoScreen( HandleSideEffects(viewModel, navigateToCheckScreen) } - @Composable fun InsertDetailInfoScreenImpl( modifier: Modifier = Modifier, @@ -126,176 +133,405 @@ fun InsertDetailInfoScreenImpl( nextButtonClicked: () -> Unit = {}, onBackPressed: () -> Unit = {}, ) { - LazyColumn( - modifier = modifier + val sheetState: ModalBottomSheetState = + rememberModalBottomSheetState( + initialValue = ModalBottomSheetValue.Hidden, + skipHalfExpanded = true + ) + val coroutineScope = rememberCoroutineScope() + + ModalBottomSheetLayout( + modifier = Modifier .fillMaxSize() - ) { - item { - Box( + , + sheetState = sheetState, + sheetShape = RoundedCornerShape(topStart = 20.dp, topEnd = 20.dp), + sheetContent = { + Column( modifier = Modifier - .padding(top = 56.dp, start = 10.dp, bottom = 18.dp) - .size(40.dp) - .clickable { - onBackPressed() - } + .fillMaxWidth() + .height(520.dp) + .background(color = Color.White,), + horizontalAlignment = Alignment.CenterHorizontally, ) { - Image( - painter = painterResource(R.drawable.ic_arrow_left), - contentDescription = "backArrow", - modifier = modifier - .size(40.dp) + SettingTimeDialog( + sheetState = sheetState, + coroutineScope = coroutineScope ) } } + ){ + LazyColumn( + modifier = modifier + .fillMaxSize() + ) { + item { + Box( + modifier = Modifier + .padding(top = 56.dp, start = 10.dp, bottom = 18.dp) + .size(40.dp) + .clickable { + onBackPressed() + } + ) { + Image( + painter = painterResource(R.drawable.ic_arrow_left), + contentDescription = "backArrow", + modifier = modifier + .size(40.dp) + ) + } + } - item { - Text( - modifier = Modifier.padding(top = 35.dp, start = 40.dp), - text = stringResource(id = R.string.insert_store), - fontSize = 24.sp, - fontWeight = FontWeight.Bold - ) - } - - item { - Text( - modifier = Modifier.padding(top = 34.dp, start = 40.dp), - text = stringResource(id = R.string.insert_store_detail), - fontSize = 18.sp, - fontWeight = FontWeight.Bold - ) - } + item { + Text( + modifier = Modifier.padding(top = 35.dp, start = 40.dp), + text = stringResource(id = R.string.insert_store), + fontSize = 24.sp, + fontWeight = FontWeight.Bold + ) + } - item { - InsertStoreProgressBar(modifier, 0.75f, R.string.insert_store_detail_info, R.string.page_three) - } + item { + Text( + modifier = Modifier.padding(top = 34.dp, start = 40.dp), + text = stringResource(id = R.string.insert_store_detail), + fontSize = 18.sp, + fontWeight = FontWeight.Bold + ) + } - item { - NameTextField( - stringResource(id = R.string.calling_number), - storePhoneNumber, - onStorePhoneNumberChange, - 32.dp, - KeyboardOptions(keyboardType = KeyboardType.Number) - ) - } + item { + InsertStoreProgressBar(modifier, 0.75f, R.string.insert_store_detail_info, R.string.page_three) + } - item { - NameTextField( - stringResource(id = R.string.delivery_fee), - storeDeliveryFee, - onStoreDeliveryFeeChange, - 24.dp, - KeyboardOptions(keyboardType = KeyboardType.Number) - ) - } + item { + NameTextField( + stringResource(id = R.string.calling_number), + storePhoneNumber, + onStorePhoneNumberChange, + 32.dp, + KeyboardOptions(keyboardType = KeyboardType.Number) + ) + } - item { - Row( - modifier = Modifier - .padding(top = 24.dp) - .padding(horizontal = 32.dp) - .fillMaxWidth() - ) { - Text( - text = stringResource(id = R.string.operating_time), - fontSize = 14.sp, - color = ColorActiveButton, - fontWeight = FontWeight.Bold + item { + NameTextField( + stringResource(id = R.string.delivery_fee), + storeDeliveryFee, + onStoreDeliveryFeeChange, + 24.dp, + KeyboardOptions(keyboardType = KeyboardType.Number) ) + } - Column( + item { + Row( modifier = Modifier - .padding(start = 30.dp) + .padding(top = 24.dp) + .padding(horizontal = 32.dp) + .fillMaxWidth() ) { - storeOperatingTime.forEach { item -> + Text( + text = stringResource(id = R.string.operating_time), + fontSize = 14.sp, + color = ColorActiveButton, + fontWeight = FontWeight.Bold + ) + + Column( + modifier = Modifier + .padding(start = 30.dp) + ) { + storeOperatingTime.forEach { item -> + Text( + text = if (item.closed) stringResource(id = R.string.insert_store_closed_day, item.dayOfWeek) + else stringResource(id = R.string.insert_store_operating_time, item.dayOfWeek, item.openTime, item.closeTime) + ) + } + } + + Spacer(modifier = Modifier.weight(1f)) + + Button( + onClick = { + coroutineScope.launch { + if (sheetState.isVisible) { + sheetState.hide() + } else { + sheetState.show() + } + } + }, + colors = ButtonDefaults.buttonColors(ColorPrimary), + shape = RectangleShape, + modifier = Modifier + .height(29.dp) + .width(58.dp) + , + contentPadding = PaddingValues(vertical = 4.dp, horizontal = 13.dp) + ) { Text( - text = if (item.closed) stringResource(id = R.string.insert_store_closed_day, item.dayOfWeek) - else stringResource(id = R.string.insert_store_operating_time, item.dayOfWeek, item.openTime, item.closeTime) + modifier = Modifier + .fillMaxSize() + .wrapContentSize(align = Alignment.Center), + text = stringResource(id = R.string.revise), + fontSize = 14.sp, + fontWeight = FontWeight.Bold, + color = Color.White ) } } + } - Spacer(modifier = Modifier.weight(1f)) + item { + NameTextField(stringResource(id = R.string.other_info), storeOtherInfo, onStoreOtherInfoChange, 24.dp) + } + item { + Row( + modifier = Modifier + .padding(top = 40.dp) + .padding(horizontal = 32.dp) + ){ + CreateOptionCheckBox( + stringResource(id = R.string.delivery_available), + isDeliveryOk, + onIsDeliveryOkChange + ) + + Spacer(modifier = Modifier.weight(1f)) + + CreateOptionCheckBox( + stringResource(id = R.string.card_available), + isCardOk, + onIsCardOkChange + ) + + Spacer(modifier = Modifier.weight(1f)) + + CreateOptionCheckBox( + stringResource(id = R.string.account_transfer_avilable), + isBankOk, + onIsBankOkChange + ) + } + } + + item { Button( - onClick = reviseButtonClicked, - colors = ButtonDefaults.buttonColors(ColorPrimary), + onClick = nextButtonClicked, + colors = if(isDetailInfoValid)ButtonDefaults.buttonColors(ColorPrimary) else ButtonDefaults.buttonColors(ColorDisabledButton), shape = RectangleShape, modifier = Modifier - .height(29.dp) - .width(58.dp) - , - contentPadding = PaddingValues(vertical = 4.dp, horizontal = 13.dp) + .padding(top = 57.dp, start = 240.dp, end = 16.dp, bottom = 20.dp) + .height(38.dp) + .width(105.dp) ) { Text( - modifier = Modifier - .fillMaxSize() - .wrapContentSize(align = Alignment.Center), - text = stringResource(id = R.string.revise), - fontSize = 14.sp, + text = stringResource(id = R.string.next), + fontSize = 15.sp, fontWeight = FontWeight.Bold, color = Color.White ) } } } - - item { - NameTextField(stringResource(id = R.string.other_info), storeOtherInfo, onStoreOtherInfoChange, 24.dp) - } - - item { - Row( - modifier = Modifier - .padding(top = 40.dp) - .padding(horizontal = 32.dp) - ){ - CreateOptionCheckBox( - stringResource(id = R.string.delivery_available), - isDeliveryOk, - onIsDeliveryOkChange - ) - - Spacer(modifier = Modifier.weight(1f)) - - CreateOptionCheckBox( - stringResource(id = R.string.card_available), - isCardOk, - onIsCardOkChange - ) - - Spacer(modifier = Modifier.weight(1f)) - - CreateOptionCheckBox( - stringResource(id = R.string.account_transfer_avilable), - isBankOk, - onIsBankOkChange - ) - } - } - - item { - Button( - onClick = nextButtonClicked, - colors = if(isDetailInfoValid)ButtonDefaults.buttonColors(ColorPrimary) else ButtonDefaults.buttonColors(ColorDisabledButton), - shape = RectangleShape, - modifier = Modifier - .padding(top = 57.dp, start = 240.dp, end = 16.dp, bottom = 20.dp) - .height(38.dp) - .width(105.dp) - ) { - Text( - text = stringResource(id = R.string.next), - fontSize = 15.sp, - fontWeight = FontWeight.Bold, - color = Color.White - ) - } - } } } + +//@Composable +//fun InsertDetailInfoScreenImpl( +// modifier: Modifier = Modifier, +// storePhoneNumber: String = "", +// storeDeliveryFee: String = "", +// storeOperatingTime: List = emptyList(), +// storeOtherInfo: String = "", +// isDeliveryOk: Boolean = false, +// isCardOk: Boolean = false, +// isBankOk: Boolean = false, +// isDetailInfoValid: Boolean = false, +// onStorePhoneNumberChange: (String) -> Unit = {}, +// onStoreDeliveryFeeChange: (String) -> Unit = {}, +// onStoreOtherInfoChange: (String) -> Unit = {}, +// onIsDeliveryOkChange: () -> Unit = {}, +// onIsCardOkChange: () -> Unit = {}, +// onIsBankOkChange: () -> Unit = {}, +// reviseButtonClicked: () -> Unit = {}, +// nextButtonClicked: () -> Unit = {}, +// onBackPressed: () -> Unit = {}, +//) { +// LazyColumn( +// modifier = modifier +// .fillMaxSize() +// ) { +// item { +// Box( +// modifier = Modifier +// .padding(top = 56.dp, start = 10.dp, bottom = 18.dp) +// .size(40.dp) +// .clickable { +// onBackPressed() +// } +// ) { +// Image( +// painter = painterResource(R.drawable.ic_arrow_left), +// contentDescription = "backArrow", +// modifier = modifier +// .size(40.dp) +// ) +// } +// } +// +// item { +// Text( +// modifier = Modifier.padding(top = 35.dp, start = 40.dp), +// text = stringResource(id = R.string.insert_store), +// fontSize = 24.sp, +// fontWeight = FontWeight.Bold +// ) +// } +// +// item { +// Text( +// modifier = Modifier.padding(top = 34.dp, start = 40.dp), +// text = stringResource(id = R.string.insert_store_detail), +// fontSize = 18.sp, +// fontWeight = FontWeight.Bold +// ) +// } +// +// item { +// InsertStoreProgressBar(modifier, 0.75f, R.string.insert_store_detail_info, R.string.page_three) +// } +// +// item { +// NameTextField( +// stringResource(id = R.string.calling_number), +// storePhoneNumber, +// onStorePhoneNumberChange, +// 32.dp, +// KeyboardOptions(keyboardType = KeyboardType.Number) +// ) +// } +// +// item { +// NameTextField( +// stringResource(id = R.string.delivery_fee), +// storeDeliveryFee, +// onStoreDeliveryFeeChange, +// 24.dp, +// KeyboardOptions(keyboardType = KeyboardType.Number) +// ) +// } +// +// item { +// Row( +// modifier = Modifier +// .padding(top = 24.dp) +// .padding(horizontal = 32.dp) +// .fillMaxWidth() +// ) { +// Text( +// text = stringResource(id = R.string.operating_time), +// fontSize = 14.sp, +// color = ColorActiveButton, +// fontWeight = FontWeight.Bold +// ) +// +// Column( +// modifier = Modifier +// .padding(start = 30.dp) +// ) { +// storeOperatingTime.forEach { item -> +// Text( +// text = if (item.closed) stringResource(id = R.string.insert_store_closed_day, item.dayOfWeek) +// else stringResource(id = R.string.insert_store_operating_time, item.dayOfWeek, item.openTime, item.closeTime) +// ) +// } +// } +// +// Spacer(modifier = Modifier.weight(1f)) +// +// Button( +// onClick = reviseButtonClicked, +// colors = ButtonDefaults.buttonColors(ColorPrimary), +// shape = RectangleShape, +// modifier = Modifier +// .height(29.dp) +// .width(58.dp) +// , +// contentPadding = PaddingValues(vertical = 4.dp, horizontal = 13.dp) +// ) { +// Text( +// modifier = Modifier +// .fillMaxSize() +// .wrapContentSize(align = Alignment.Center), +// text = stringResource(id = R.string.revise), +// fontSize = 14.sp, +// fontWeight = FontWeight.Bold, +// color = Color.White +// ) +// } +// } +// } +// +// item { +// NameTextField(stringResource(id = R.string.other_info), storeOtherInfo, onStoreOtherInfoChange, 24.dp) +// } +// +// item { +// Row( +// modifier = Modifier +// .padding(top = 40.dp) +// .padding(horizontal = 32.dp) +// ){ +// CreateOptionCheckBox( +// stringResource(id = R.string.delivery_available), +// isDeliveryOk, +// onIsDeliveryOkChange +// ) +// +// Spacer(modifier = Modifier.weight(1f)) +// +// CreateOptionCheckBox( +// stringResource(id = R.string.card_available), +// isCardOk, +// onIsCardOkChange +// ) +// +// Spacer(modifier = Modifier.weight(1f)) +// +// CreateOptionCheckBox( +// stringResource(id = R.string.account_transfer_avilable), +// isBankOk, +// onIsBankOkChange +// ) +// } +// } +// +// item { +// Button( +// onClick = nextButtonClicked, +// colors = if(isDetailInfoValid)ButtonDefaults.buttonColors(ColorPrimary) else ButtonDefaults.buttonColors(ColorDisabledButton), +// shape = RectangleShape, +// modifier = Modifier +// .padding(top = 57.dp, start = 240.dp, end = 16.dp, bottom = 20.dp) +// .height(38.dp) +// .width(105.dp) +// ) { +// Text( +// text = stringResource(id = R.string.next), +// fontSize = 15.sp, +// fontWeight = FontWeight.Bold, +// color = Color.White +// ) +// } +// } +// } +//} + @Composable fun NameTextField( textString: String = "", diff --git a/business/src/main/java/in/koreatech/business/feature/insertstore/selectcategory/SelectCategoryScreen.kt b/business/src/main/java/in/koreatech/business/feature/insertstore/selectcategory/SelectCategoryScreen.kt index 6050d5870..28a709ba0 100644 --- a/business/src/main/java/in/koreatech/business/feature/insertstore/selectcategory/SelectCategoryScreen.kt +++ b/business/src/main/java/in/koreatech/business/feature/insertstore/selectcategory/SelectCategoryScreen.kt @@ -143,7 +143,7 @@ fun SelectCategoryScreenImpl( modifier = Modifier.clickable { chooseCategory(category.id) }, - imageUrl = category.imageUrl, + imageUrl = category.imageUrl.toString(), name = category.name, categoryId = category.id, choosedCategoryId = categoryId diff --git a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt new file mode 100644 index 000000000..d01a837e9 --- /dev/null +++ b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt @@ -0,0 +1,247 @@ +package `in`.koreatech.business.ui.component + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +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.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.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Divider +import androidx.compose.material.ModalBottomSheetState +import androidx.compose.material.ModalBottomSheetValue +import androidx.compose.material.Text +import androidx.compose.material.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import `in`.koreatech.business.R +import `in`.koreatech.business.feature.insertstore.insertdetailinfo.operatingTime.OperatingTimeState +import `in`.koreatech.business.ui.theme.ColorPrimary +import `in`.koreatech.business.ui.theme.Gray3 +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +@Composable +fun SettingTimeDialog( + modifier: Modifier = Modifier, + coroutineScope: CoroutineScope = rememberCoroutineScope(), + sheetState: ModalBottomSheetState = + rememberModalBottomSheetState( + initialValue = ModalBottomSheetValue.Hidden, + skipHalfExpanded = true + ) +) +{ + var isSettingScreen by remember { mutableStateOf(false) } + + Column( + modifier = Modifier + .fillMaxWidth() + .fillMaxHeight() + ){ + Text( + modifier = Modifier + .padding(vertical = 16.dp) + .fillMaxWidth() + , + text = "운영시간 설정", + style = TextStyle( + fontSize = 16.sp, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center + ) + ) + + NullSettingTime{isSettingScreen = it} + + Row( + modifier = Modifier + .padding(top = 24.dp, bottom = 36.dp) + .fillMaxWidth() + , + horizontalArrangement = Arrangement.Center + ){ + Button( + onClick = { + coroutineScope.launch { + sheetState.hide() + } + }, + colors = ButtonDefaults.buttonColors(Color.White), + shape = RoundedCornerShape(8.dp), + border = BorderStroke(1.dp, Gray3), + modifier = Modifier + .height(44.dp) + .width(128.dp) + + ) { + Text( + text = stringResource(id = R.string.cancel), + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center, + color = Gray3 + ) + ) + } + + Spacer(modifier = Modifier.width(32.dp)) + + Button( + onClick = {isSettingScreen = !isSettingScreen}, + colors = ButtonDefaults.buttonColors(ColorPrimary), + shape = RoundedCornerShape(8.dp), + border = BorderStroke(1.dp, ColorPrimary), + modifier = Modifier + .height(44.dp) + .width(128.dp) + ) { + Text( + text = if(isSettingScreen)"등록하기" else "추가하기", + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center, + color = Color.White + ) + ) + } + } + } +} + +@Composable +fun NullSettingTime( + modifier: Modifier = Modifier, + updateIsSettingScreenState: (Boolean) -> Unit = {}, +) { + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + Text( + modifier = Modifier + .padding(vertical = 135.dp) + .fillMaxWidth() + , + text = "등록한 운영시간이 없습니다.", + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center + ) + ) + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + Row( + modifier = Modifier + .padding(vertical = 16.dp) + .fillMaxWidth() + .clickable { + updateIsSettingScreenState(true) + } + , + horizontalArrangement = Arrangement.Center + ){ + Text( + text = "설정시간 추가", + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center + ) + ) + + Spacer(modifier = Modifier.width(8.dp)) + + Image( + painter = painterResource(R.drawable.fi_plus), + contentDescription = "플러스버튼" + ) + } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) +} + +@Composable +fun SettingTime( + modifier: Modifier = Modifier, + storeOperatingTime: List = emptyList(), +) { + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + LazyRow( + modifier = Modifier + .fillMaxWidth() + , + horizontalArrangement = Arrangement.Center + ){ + itemsIndexed(storeOperatingTime){ index, item -> + DayCheckBox( + modifier = Modifier.size(40.dp), + dayName = item.dayOfWeek, + isChecked = item.closed + ) + } + } +} + +@Preview +@Composable +fun PreviewSettingTimeDialog() { + SettingTime( + storeOperatingTime = operatingTime + ) +} + +val operatingTime: List = listOf( + OperatingTimeState("00:00", false, "일", "00:00"), + OperatingTimeState("00:00", false, "월", "00:00"), + OperatingTimeState("00:00", false, "화", "00:00"), + OperatingTimeState("00:00", false, "수", "00:00"), + OperatingTimeState("00:00", true, "목", "00:00"), + OperatingTimeState("00:00", true, "금", "00:00"), + OperatingTimeState("00:00", false, "토", "00:00"), +) \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeDayCheckBox.kt b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeDayCheckBox.kt new file mode 100644 index 000000000..1a34ab9a7 --- /dev/null +++ b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeDayCheckBox.kt @@ -0,0 +1,81 @@ +package `in`.koreatech.business.ui.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import `in`.koreatech.business.ui.theme.ColorCategory +import `in`.koreatech.business.ui.theme.ColorPrimary +import `in`.koreatech.business.ui.theme.Danger700 +import `in`.koreatech.business.ui.theme.Info700 + +@Composable +fun DayCheckBox( + modifier: Modifier = Modifier, + dayName: String = "월", + isChecked: Boolean +) { + + val textColor = when(dayName){ + "일" -> Danger700 + "토" -> Info700 + else -> Color.Black + } + + Box( + modifier = modifier + .shadow( + elevation = 4.dp, // 그림자의 높이 + shape = RoundedCornerShape(8.dp), // 모서리를 둥글게 설정 + clip = false) + .background( + color = if(isChecked) ColorCategory else Color.White, + shape = RoundedCornerShape(16.dp) + ) + .clickable { + //isChecked = !isChecked + } + , + contentAlignment = Alignment.TopCenter + ){ + Text( + modifier = Modifier.align(Alignment.Center), + text = dayName, + style = TextStyle( + color = if(isChecked) Color.White else textColor, + fontSize = 14.sp + ) + ) + } +} + +@Preview +@Composable +fun PreviewDayCheckBox(modifier: Modifier = Modifier) { + Row(){ + DayCheckBox( + isChecked = true + ) + Spacer(modifier = Modifier.width(20.dp)) + DayCheckBox( + isChecked = false + ) + } + +} \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/ui/theme/Color.kt b/business/src/main/java/in/koreatech/business/ui/theme/Color.kt index 8b6e88cb9..28c922be7 100644 --- a/business/src/main/java/in/koreatech/business/ui/theme/Color.kt +++ b/business/src/main/java/in/koreatech/business/ui/theme/Color.kt @@ -49,3 +49,6 @@ val ColorTransparency = Color(0x00FF0000) val ColorOnCardBackground = Color(0xFF4B4B4B) val ColorTextDescription = Color(0xFF8E8E8E) val ColorTextFieldDescription = Color(0xFFCACACA) + +val Danger700 = Color(0XFFEC2D30) +val Info700 = Color(0xFF3A70E2) diff --git a/core/src/main/res/drawable/fi_plus.xml b/core/src/main/res/drawable/fi_plus.xml new file mode 100644 index 000000000..4927a5a0e --- /dev/null +++ b/core/src/main/res/drawable/fi_plus.xml @@ -0,0 +1,20 @@ + + + + From ef9b76f3846963664c0a1e5834257ec98534d9f4 Mon Sep 17 00:00:00 2001 From: hsgo2430 Date: Fri, 31 Jan 2025 15:27:50 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feature:=20=EB=B0=94=ED=85=80=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=ED=95=A0=20UI?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/component/CheckSettingTimeScreen.kt | 166 ++++++++++++ .../ui/component/NullSettingTimeScreen.kt | 86 +++++++ .../ui/component/SettingTimeComponent.kt | 118 +-------- .../ui/component/SettingTimeDayCheckBox.kt | 7 +- .../ui/component/SettingTimeScreen.kt | 239 ++++++++++++++++++ 5 files changed, 507 insertions(+), 109 deletions(-) create mode 100644 business/src/main/java/in/koreatech/business/ui/component/CheckSettingTimeScreen.kt create mode 100644 business/src/main/java/in/koreatech/business/ui/component/NullSettingTimeScreen.kt create mode 100644 business/src/main/java/in/koreatech/business/ui/component/SettingTimeScreen.kt diff --git a/business/src/main/java/in/koreatech/business/ui/component/CheckSettingTimeScreen.kt b/business/src/main/java/in/koreatech/business/ui/component/CheckSettingTimeScreen.kt new file mode 100644 index 000000000..508fd93b6 --- /dev/null +++ b/business/src/main/java/in/koreatech/business/ui/component/CheckSettingTimeScreen.kt @@ -0,0 +1,166 @@ +package `in`.koreatech.business.ui.component + +import android.util.Log +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +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.items +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.material.Divider +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import `in`.koreatech.business.R +import `in`.koreatech.business.feature.insertstore.insertdetailinfo.operatingTime.OperatingTimeState +import `in`.koreatech.business.ui.theme.Black1 +import `in`.koreatech.business.ui.theme.ColorPrimary +import `in`.koreatech.business.ui.theme.Gray3 +import `in`.koreatech.business.ui.theme.Red2 + +@Composable +fun CheckSettingTime( + modifier: Modifier = Modifier, + settingTimeList: List = emptyList() +) { + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + LazyColumn( + modifier = Modifier.fillMaxWidth() + ) { + itemsIndexed(settingTimeList){ index, item -> + if(index != 5 || item.isNotBlank()){ + TimeItem( + timeString = item + ) + } + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + } + } + if(settingTimeList.last().isBlank()){ + Row( + modifier = Modifier + .padding(vertical = 16.dp) + .fillMaxWidth() + , + horizontalArrangement = Arrangement.Center + ){ + Text( + text = "설정시간 추가", + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center + ) + ) + + Spacer(modifier = Modifier.width(8.dp)) + + Image( + painter = painterResource(R.drawable.fi_plus), + contentDescription = "플러스버튼" + ) + } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + } +} + +@Composable +fun TimeItem( + modifier: Modifier = Modifier, + timeString: String = "월, 화, 수, 목, 금 : 06:00 ~ 23:00" +) { + Row( + modifier = Modifier + .padding(horizontal = 24.dp, vertical = 16.dp) + .fillMaxWidth() + .height(25.dp) + , + horizontalArrangement = Arrangement.SpaceBetween + ){ + if(timeString.isNotBlank()){ + val stringList = timeString.split(" : ") + val coloredString = buildAnnotatedString { + append(stringList[0] + " : ") + withStyle(style = SpanStyle(color = if (stringList[1] == "휴무") Red2 else ColorPrimary)){ + append(stringList[1]) + } + } + + Text( + text = coloredString, + style = TextStyle( + fontSize = 16.sp + ) + ) + + Image( + painter = painterResource(R.drawable.ic_x), + contentDescription = "아이템 삭제" + ) + } + } +} + +@Preview +@Composable +fun PreviewCheckSettingTime() { + CheckSettingTime( + settingTimeList = list1 + ) +} + +@Preview +@Composable +fun PreviewTimeItem() { + TimeItem() +} + +val list1: List = listOf( + "토, 일 : 휴무", + "월, 화, 수, 목, 금 : 06:00 ~ 23:00", + "", + "", + "", + "" +) + +val list2: List = listOf( + "토, 일 : 휴무", + "월 : 06:00 ~ 23:00", + "화 : 06:00 ~ 23:00", + "수 : 06:00 ~ 23:00", + "목 : 06:00 ~ 23:00", + "금 : 06:00 ~ 23:00" +) \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/ui/component/NullSettingTimeScreen.kt b/business/src/main/java/in/koreatech/business/ui/component/NullSettingTimeScreen.kt new file mode 100644 index 000000000..ccb60ff46 --- /dev/null +++ b/business/src/main/java/in/koreatech/business/ui/component/NullSettingTimeScreen.kt @@ -0,0 +1,86 @@ +package `in`.koreatech.business.ui.component + +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +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.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.Divider +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import `in`.koreatech.business.R +import `in`.koreatech.business.ui.theme.Gray3 + +@Composable +fun NullSettingTime( + modifier: Modifier = Modifier, + updateIsSettingScreenState: (Boolean) -> Unit = {}, +) { + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + Text( + modifier = Modifier + .padding(vertical = 135.dp) + .fillMaxWidth() + , + text = "등록한 운영시간이 없습니다.", + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center + ) + ) + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + Row( + modifier = Modifier + .padding(vertical = 16.dp) + .fillMaxWidth() + .clickable { + updateIsSettingScreenState(true) + } + , + horizontalArrangement = Arrangement.Center + ){ + Text( + text = "설정시간 추가", + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center + ) + ) + + Spacer(modifier = Modifier.width(8.dp)) + + Image( + painter = painterResource(R.drawable.fi_plus), + contentDescription = "플러스버튼" + ) + } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) +} \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt index d01a837e9..0cd0df3e0 100644 --- a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt +++ b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt @@ -1,5 +1,7 @@ package `in`.koreatech.business.ui.component +import android.annotation.SuppressLint +import android.util.Log import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.clickable @@ -8,18 +10,13 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row 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.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.lazy.LazyRow -import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Button import androidx.compose.material.ButtonDefaults -import androidx.compose.material.Divider import androidx.compose.material.ModalBottomSheetState import androidx.compose.material.ModalBottomSheetValue import androidx.compose.material.Text @@ -32,7 +29,6 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight @@ -78,17 +74,25 @@ fun SettingTimeDialog( ) ) - NullSettingTime{isSettingScreen = it} - + if(isSettingScreen) { + NullSettingTime{isSettingScreen = it} + } + else { +// NullSettingTime{isSettingScreen = it} + CheckSettingTime( + settingTimeList = list2 + ) + } Row( modifier = Modifier - .padding(top = 24.dp, bottom = 36.dp) + .padding(top = 12.dp, bottom = 36.dp) .fillMaxWidth() , horizontalArrangement = Arrangement.Center ){ Button( onClick = { + isSettingScreen = false coroutineScope.launch { sheetState.hide() } @@ -135,105 +139,11 @@ fun SettingTimeDialog( } } -@Composable -fun NullSettingTime( - modifier: Modifier = Modifier, - updateIsSettingScreenState: (Boolean) -> Unit = {}, -) { - Divider( - modifier = Modifier - .fillMaxWidth(), - color = Gray3, - thickness = 0.5.dp - ) - - Text( - modifier = Modifier - .padding(vertical = 135.dp) - .fillMaxWidth() - , - text = "등록한 운영시간이 없습니다.", - style = TextStyle( - fontSize = 16.sp, - textAlign = TextAlign.Center - ) - ) - - Divider( - modifier = Modifier - .fillMaxWidth(), - color = Gray3, - thickness = 0.5.dp - ) - - Row( - modifier = Modifier - .padding(vertical = 16.dp) - .fillMaxWidth() - .clickable { - updateIsSettingScreenState(true) - } - , - horizontalArrangement = Arrangement.Center - ){ - Text( - text = "설정시간 추가", - style = TextStyle( - fontSize = 16.sp, - textAlign = TextAlign.Center - ) - ) - - Spacer(modifier = Modifier.width(8.dp)) - - Image( - painter = painterResource(R.drawable.fi_plus), - contentDescription = "플러스버튼" - ) - } - - Divider( - modifier = Modifier - .fillMaxWidth(), - color = Gray3, - thickness = 0.5.dp - ) -} - -@Composable -fun SettingTime( - modifier: Modifier = Modifier, - storeOperatingTime: List = emptyList(), -) { - Divider( - modifier = Modifier - .fillMaxWidth(), - color = Gray3, - thickness = 0.5.dp - ) - - LazyRow( - modifier = Modifier - .fillMaxWidth() - , - horizontalArrangement = Arrangement.Center - ){ - itemsIndexed(storeOperatingTime){ index, item -> - DayCheckBox( - modifier = Modifier.size(40.dp), - dayName = item.dayOfWeek, - isChecked = item.closed - ) - } - } -} @Preview @Composable fun PreviewSettingTimeDialog() { - SettingTime( - storeOperatingTime = operatingTime - ) + SettingTimeDialog() } val operatingTime: List = listOf( diff --git a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeDayCheckBox.kt b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeDayCheckBox.kt index 1a34ab9a7..a9b69c4ff 100644 --- a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeDayCheckBox.kt +++ b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeDayCheckBox.kt @@ -41,16 +41,13 @@ fun DayCheckBox( Box( modifier = modifier .shadow( - elevation = 4.dp, // 그림자의 높이 - shape = RoundedCornerShape(8.dp), // 모서리를 둥글게 설정 + elevation = 2.dp, + shape = RoundedCornerShape(16.dp), clip = false) .background( color = if(isChecked) ColorCategory else Color.White, shape = RoundedCornerShape(16.dp) ) - .clickable { - //isChecked = !isChecked - } , contentAlignment = Alignment.TopCenter ){ diff --git a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeScreen.kt b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeScreen.kt new file mode 100644 index 000000000..136d3dadd --- /dev/null +++ b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeScreen.kt @@ -0,0 +1,239 @@ +package `in`.koreatech.business.ui.component + +import android.annotation.SuppressLint +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.material.Checkbox +import androidx.compose.material.CheckboxDefaults +import androidx.compose.material.Divider +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +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.TextStyle +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.chargemap.compose.numberpicker.FullHours +import com.chargemap.compose.numberpicker.Hours +import com.chargemap.compose.numberpicker.HoursNumberPicker +import `in`.koreatech.business.R +import `in`.koreatech.business.feature.insertstore.insertdetailinfo.operatingTime.OperatingTimeState +import `in`.koreatech.business.ui.theme.ColorPrimary +import `in`.koreatech.business.ui.theme.Gray3 + +@SuppressLint("RememberReturnType") +@Composable +fun SettingTime( + modifier: Modifier = Modifier, + storeOperatingTime: List = emptyList(), +) { + val dayOfWeekList = remember { mutableStateListOf() } + var openTimeValue by remember { mutableStateOf(FullHours(6, 0)) } + var closeTimeValue by remember { mutableStateOf(FullHours(0, 0)) } + var isClosedChecked by remember { mutableStateOf(false) } + var is24hoursChecked by remember { mutableStateOf(false) } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + LazyRow( + modifier = Modifier + .padding(horizontal = 31.dp, vertical = 8.dp) + .fillMaxWidth() + , + horizontalArrangement = Arrangement.SpaceBetween + ){ + itemsIndexed(storeOperatingTime){ index, item -> + DayCheckBox( + modifier = Modifier + .size(40.dp) + .clickable{ + if (dayOfWeekList.contains(item.dayOfWeek)) dayOfWeekList.remove(item.dayOfWeek) + else dayOfWeekList.add(item.dayOfWeek) + } + , + dayName = item.dayOfWeek, + isChecked = dayOfWeekList.contains(item.dayOfWeek) + ) + } + } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + Row( + modifier = Modifier + .padding(vertical = 4.dp) + .fillMaxWidth() + .height(120.dp), + + ){ + Text( + modifier = Modifier + .padding(start = 55.dp) + .align(Alignment.CenterVertically) + , + text = stringResource(R.string.store_open_time), + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center + ) + ) + + HoursNumberPicker( + modifier = Modifier + .padding(horizontal = 40.dp) + .fillMaxHeight(), + dividersColor = Gray3, + leadingZero = true, + value = openTimeValue, + onValueChange = { + openTimeValue = it + }, + minutesRange = (0..59 step 10), + hoursDivider = { + Text( + modifier = Modifier.size(24.dp), + textAlign = TextAlign.Center, + text = ":" + ) + } + ) + } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + Row( + modifier = Modifier + .padding(vertical = 4.dp) + .fillMaxWidth() + .height(120.dp), + + ){ + Text( + modifier = Modifier + .padding(start = 55.dp) + .align(Alignment.CenterVertically) + , + text = stringResource(R.string.store_close_time), + style = TextStyle( + fontSize = 16.sp, + textAlign = TextAlign.Center + ) + ) + + HoursNumberPicker( + modifier = Modifier + .padding(horizontal = 40.dp) + .fillMaxHeight(), + dividersColor = Gray3, + leadingZero = true, + value = closeTimeValue, + onValueChange = { + closeTimeValue = it + }, + minutesRange = (0..59 step 10), + hoursDivider = { + Text( + modifier = Modifier.size(24.dp), + textAlign = TextAlign.Center, + text = ":" + ) + } + ) + } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) + + Row( + modifier = Modifier + .fillMaxWidth(), + horizontalArrangement = Arrangement.Center + ){ + Row( + modifier = Modifier + .padding(end = 56.dp) + , + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + Text( + "휴무" + ) + Checkbox( + checked = isClosedChecked, + onCheckedChange = { isClosedChecked = it }, + colors = CheckboxDefaults.colors( + checkedColor = ColorPrimary, + uncheckedColor = Gray3 + ) + ) + } + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + Text( + "24시간" + ) + Checkbox( + checked = is24hoursChecked, + onCheckedChange = { is24hoursChecked = it }, + colors = CheckboxDefaults.colors( + checkedColor = ColorPrimary, + uncheckedColor = Gray3 + ) + ) + } + } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) +} + +@Preview +@Composable +fun PreviewSettingTime() { + SettingTime( + storeOperatingTime = operatingTime + ) +} \ No newline at end of file From ced4a56269804584a6b5b1eceb8f3627e2a80891 Mon Sep 17 00:00:00 2001 From: hsgo2430 Date: Fri, 7 Feb 2025 17:26:01 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=201=EC=B0=A8=20=ED=94=BC=EB=93=9C?= =?UTF-8?q?=EB=B0=B1=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/build.gradle.kts | 1 + .../ui/component/CheckSettingTimeScreen.kt | 18 ++-- .../ui/component/NullSettingTimeScreen.kt | 98 ++++++++++--------- .../ui/component/SettingTimeComponent.kt | 34 +++---- .../src/main/res/drawable/ic_x.xml | 0 core/src/main/res/values/strings.xml | 4 + 6 files changed, 77 insertions(+), 78 deletions(-) rename {business => core}/src/main/res/drawable/ic_x.xml (100%) diff --git a/business/build.gradle.kts b/business/build.gradle.kts index 262215f2c..d3041555f 100644 --- a/business/build.gradle.kts +++ b/business/build.gradle.kts @@ -54,4 +54,5 @@ dependencies { implementation(project(mapOf("path" to ":domain"))) implementation(project(mapOf("path" to ":data"))) implementation(project(mapOf("path" to ":core"))) + implementation(project(":core:designsystem")) } diff --git a/business/src/main/java/in/koreatech/business/ui/component/CheckSettingTimeScreen.kt b/business/src/main/java/in/koreatech/business/ui/component/CheckSettingTimeScreen.kt index 508fd93b6..5e5d1bbdf 100644 --- a/business/src/main/java/in/koreatech/business/ui/component/CheckSettingTimeScreen.kt +++ b/business/src/main/java/in/koreatech/business/ui/component/CheckSettingTimeScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.buildAnnotatedString @@ -26,12 +27,13 @@ import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import `in`.koreatech.business.R +import `in`.koreatech.koin.core.R import `in`.koreatech.business.feature.insertstore.insertdetailinfo.operatingTime.OperatingTimeState import `in`.koreatech.business.ui.theme.Black1 import `in`.koreatech.business.ui.theme.ColorPrimary import `in`.koreatech.business.ui.theme.Gray3 import `in`.koreatech.business.ui.theme.Red2 +import `in`.koreatech.koin.core.designsystem.theme.KoinTheme @Composable fun CheckSettingTime( @@ -72,18 +74,16 @@ fun CheckSettingTime( horizontalArrangement = Arrangement.Center ){ Text( - text = "설정시간 추가", - style = TextStyle( - fontSize = 16.sp, - textAlign = TextAlign.Center - ) + text = stringResource(R.string.add_setting_time), + style = KoinTheme.typography.medium16, + textAlign = TextAlign.Center ) Spacer(modifier = Modifier.width(8.dp)) Image( painter = painterResource(R.drawable.fi_plus), - contentDescription = "플러스버튼" + contentDescription = stringResource(R.string.add_setting_time_plus) ) } @@ -120,9 +120,7 @@ fun TimeItem( Text( text = coloredString, - style = TextStyle( - fontSize = 16.sp - ) + style = KoinTheme.typography.medium16, ) Image( diff --git a/business/src/main/java/in/koreatech/business/ui/component/NullSettingTimeScreen.kt b/business/src/main/java/in/koreatech/business/ui/component/NullSettingTimeScreen.kt index ccb60ff46..68b3c2b96 100644 --- a/business/src/main/java/in/koreatech/business/ui/component/NullSettingTimeScreen.kt +++ b/business/src/main/java/in/koreatech/business/ui/component/NullSettingTimeScreen.kt @@ -3,6 +3,7 @@ package `in`.koreatech.business.ui.component import androidx.compose.foundation.Image import androidx.compose.foundation.clickable 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 @@ -17,70 +18,71 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import `in`.koreatech.business.R +import `in`.koreatech.koin.core.R import `in`.koreatech.business.ui.theme.Gray3 +import `in`.koreatech.koin.core.designsystem.theme.KoinTheme @Composable fun NullSettingTime( modifier: Modifier = Modifier, updateIsSettingScreenState: (Boolean) -> Unit = {}, ) { - Divider( - modifier = Modifier - .fillMaxWidth(), - color = Gray3, - thickness = 0.5.dp - ) + Column( + modifier = modifier + ){ + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) - Text( - modifier = Modifier - .padding(vertical = 135.dp) - .fillMaxWidth() - , - text = "등록한 운영시간이 없습니다.", - style = TextStyle( - fontSize = 16.sp, + Text( + modifier = Modifier + .padding(vertical = 135.dp) + .fillMaxWidth() + , + text = "등록한 운영시간이 없습니다.", + style = KoinTheme.typography.medium16, textAlign = TextAlign.Center ) - ) - Divider( - modifier = Modifier - .fillMaxWidth(), - color = Gray3, - thickness = 0.5.dp - ) + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp + ) - Row( - modifier = Modifier - .padding(vertical = 16.dp) - .fillMaxWidth() - .clickable { - updateIsSettingScreenState(true) - } - , - horizontalArrangement = Arrangement.Center - ){ - Text( - text = "설정시간 추가", - style = TextStyle( - fontSize = 16.sp, + Row( + modifier = Modifier + .padding(vertical = 16.dp) + .fillMaxWidth() + .clickable { + updateIsSettingScreenState(true) + } + , + horizontalArrangement = Arrangement.Center + ){ + Text( + text = "설정시간 추가", + style = KoinTheme.typography.medium16, textAlign = TextAlign.Center ) - ) - Spacer(modifier = Modifier.width(8.dp)) + Spacer(modifier = Modifier.width(8.dp)) - Image( - painter = painterResource(R.drawable.fi_plus), - contentDescription = "플러스버튼" + Image( + painter = painterResource(R.drawable.fi_plus), + contentDescription = "플러스버튼" + ) + } + + Divider( + modifier = Modifier + .fillMaxWidth(), + color = Gray3, + thickness = 0.5.dp ) } - - Divider( - modifier = Modifier - .fillMaxWidth(), - color = Gray3, - thickness = 0.5.dp - ) } \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt index 0cd0df3e0..54801f899 100644 --- a/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt +++ b/business/src/main/java/in/koreatech/business/ui/component/SettingTimeComponent.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row 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 @@ -36,10 +37,11 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import `in`.koreatech.business.R +import `in`.koreatech.koin.core.R import `in`.koreatech.business.feature.insertstore.insertdetailinfo.operatingTime.OperatingTimeState import `in`.koreatech.business.ui.theme.ColorPrimary import `in`.koreatech.business.ui.theme.Gray3 +import `in`.koreatech.koin.core.designsystem.theme.KoinTheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -57,21 +59,17 @@ fun SettingTimeDialog( var isSettingScreen by remember { mutableStateOf(false) } Column( - modifier = Modifier - .fillMaxWidth() - .fillMaxHeight() + modifier = modifier + .fillMaxSize() ){ Text( modifier = Modifier .padding(vertical = 16.dp) .fillMaxWidth() , - text = "운영시간 설정", - style = TextStyle( - fontSize = 16.sp, - fontWeight = FontWeight.Bold, - textAlign = TextAlign.Center - ) + text = stringResource(R.string.insert_store_operating_time_setting), + style = KoinTheme.typography.bold16, + textAlign = TextAlign.Center ) if(isSettingScreen) { @@ -107,11 +105,9 @@ fun SettingTimeDialog( ) { Text( text = stringResource(id = R.string.cancel), - style = TextStyle( - fontSize = 16.sp, - textAlign = TextAlign.Center, - color = Gray3 - ) + style = KoinTheme.typography.medium16, + textAlign = TextAlign.Center, + color = Gray3 ) } @@ -128,11 +124,9 @@ fun SettingTimeDialog( ) { Text( text = if(isSettingScreen)"등록하기" else "추가하기", - style = TextStyle( - fontSize = 16.sp, - textAlign = TextAlign.Center, - color = Color.White - ) + style = KoinTheme.typography.medium16, + textAlign = TextAlign.Center, + color = Color.White ) } } diff --git a/business/src/main/res/drawable/ic_x.xml b/core/src/main/res/drawable/ic_x.xml similarity index 100% rename from business/src/main/res/drawable/ic_x.xml rename to core/src/main/res/drawable/ic_x.xml diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index b9643d112..a1af170af 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -192,6 +192,10 @@ 가게 배달비를 입력해 주세요. 가게 기타 정보를 입력해 주세요. + 설정시간 추가 + 설정시간 플러스 버튼 + 운영시간 설정 + 4. 가게 정보 확인 입력하신 정보가 맞습니까? 가게를 등록하는데 실패하였습니다.