diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 1f58bdfc..92045ed8 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -13,6 +13,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 9dc223f3..f702414f 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -6,7 +6,7 @@ plugins {
android {
namespace = "com.kuit.ourmenu"
- compileSdk = 34
+ compileSdk = 35
defaultConfig {
applicationId = "com.kuit.ourmenu"
@@ -49,6 +49,8 @@ dependencies {
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
+ implementation(libs.androidx.lifecycle.viewmodel.compose)
+ implementation(libs.androidx.lifecycle.runtime.compose.android)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuSearchBackground.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuSearchBackground.kt
new file mode 100644
index 00000000..e1711326
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuSearchBackground.kt
@@ -0,0 +1,136 @@
+package com.kuit.ourmenu.ui.addmenu.component
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.material3.Icon
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.Alignment
+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.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.kuit.ourmenu.R
+import com.kuit.ourmenu.ui.addmenu.component.item.StoreSearchItem
+import com.kuit.ourmenu.ui.common.BottomFullWidthButton
+import com.kuit.ourmenu.ui.theme.Neutral100
+import com.kuit.ourmenu.ui.theme.Neutral500
+import com.kuit.ourmenu.ui.theme.Neutral700
+import com.kuit.ourmenu.ui.theme.ourMenuTypography
+
+@Composable
+fun AddMenuSearchBackground(
+ modifier: Modifier = Modifier,
+ searchActionDone: Boolean,
+ recentSearchResults: List, //이후에 타입 변경
+ searchResults: List, //이후에 타입 변경
+ onItemClick: () -> Unit
+) {
+ Box(
+ modifier = Modifier
+ .fillMaxSize(),
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(bottom = 52.dp)
+ ) {
+ if (searchActionDone) {
+ //검색을 한 경우
+ if (searchResults.isEmpty()) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(top = 116.dp),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Icon(
+ painter = painterResource(R.drawable.ic_addmenu_noresult),
+ contentDescription = "no result",
+ tint = Color.Unspecified
+ )
+ Text(
+ text = stringResource(R.string.no_result),
+ style = ourMenuTypography().pretendard_600_14,
+ color = Neutral500,
+ modifier = Modifier.padding(top = 8.dp)
+ )
+ }
+ } else {
+ LazyColumn(modifier = Modifier.padding(top = 68.dp)) {
+ items(searchResults) { item ->
+ StoreSearchItem(
+ isLastItem = item,
+ ){
+ onItemClick()
+ }
+ }
+ }
+ }
+ } else {
+ //검색을 하지 않은 경우
+ Text(
+ text = stringResource(R.string.recent_search),
+ style = ourMenuTypography().pretendard_600_14,
+ color = Neutral700,
+ modifier = Modifier.padding(start = 28.dp, top = 68.dp)
+ )
+ if (recentSearchResults.isEmpty()) {
+ Column(modifier = Modifier.fillMaxSize()) { /*empty view*/ }
+ } else {
+ LazyColumn() {
+ items(recentSearchResults) { item ->
+ StoreSearchItem(
+ isLastItem = item,
+ ){
+ onItemClick()
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ BottomFullWidthButton(
+ modifier = Modifier
+ .align(Alignment.BottomCenter)
+ .padding(start = 20.dp, end = 20.dp, bottom = 20.dp),
+ onClick = { TODO() },
+ containerColor = Neutral100,
+ contentColor = Neutral500,
+ text = stringResource(R.string.add_store_and_menu_by_myself)
+ )
+ }
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddMenuSearchBackgroundPreview() {
+ val searchActionDone by rememberSaveable { mutableStateOf(false) }
+ val recentSearchResults = mutableListOf(
+ false,
+ false,
+ false,
+ false,
+ true,
+ )
+ val searchResults: MutableList = mutableListOf(true)
+ AddMenuSearchBackground(
+ searchActionDone = searchActionDone,
+ recentSearchResults = recentSearchResults,
+ searchResults = searchResults,
+ ){
+ //onItemClick
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuBottomSheetContent.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/AddMenuBottomSheetContent.kt
similarity index 78%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuBottomSheetContent.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/AddMenuBottomSheetContent.kt
index dea5be86..eb4046e0 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuBottomSheetContent.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/AddMenuBottomSheetContent.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.bottomsheet
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
@@ -11,7 +11,7 @@ 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.foundation.shape.RoundedCornerShape
import androidx.compose.material3.BottomSheetScaffoldState
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -22,6 +22,7 @@ import androidx.compose.material3.Text
import androidx.compose.material3.rememberBottomSheetScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -32,7 +33,12 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.viewmodel.compose.viewModel
import com.kuit.ourmenu.R
+import com.kuit.ourmenu.ui.addmenu.component.item.SelectMenuItem
+import com.kuit.ourmenu.ui.addmenu.viewmodel.AddMenuDummyStoreInfo
+import com.kuit.ourmenu.ui.addmenu.viewmodel.AddMenuSearchViewModel
import com.kuit.ourmenu.ui.common.BottomFullWidthButton
import com.kuit.ourmenu.ui.theme.Neutral100
import com.kuit.ourmenu.ui.theme.Neutral300
@@ -40,16 +46,19 @@ import com.kuit.ourmenu.ui.theme.Neutral400
import com.kuit.ourmenu.ui.theme.Neutral500
import com.kuit.ourmenu.ui.theme.Neutral700
import com.kuit.ourmenu.ui.theme.NeutralWhite
+import com.kuit.ourmenu.ui.theme.Primary500Main
import com.kuit.ourmenu.ui.theme.ourMenuTypography
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@Composable
-fun AddMenuBottomSheetContent(scaffoldState: BottomSheetScaffoldState) {
+fun AddMenuBottomSheetContent(
+ scaffoldState: BottomSheetScaffoldState,
+ storeInfo: AddMenuDummyStoreInfo,
+ onItemClick: (Int) -> Unit
+) {
val coroutineScope = rememberCoroutineScope()
- val dummyMenuItemList = listOf(
- false, false, true, false, false, false, false, false
- )
+ val enableNextButton = storeInfo.menuList.any { it }
Column(
modifier = Modifier
@@ -59,7 +68,7 @@ fun AddMenuBottomSheetContent(scaffoldState: BottomSheetScaffoldState) {
Text(
text = "식당 이름",
style = ourMenuTypography().pretendard_700_20
- )
+ )
Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {
Icon(
painter = painterResource(id = R.drawable.ic_location_info),
@@ -119,7 +128,7 @@ fun AddMenuBottomSheetContent(scaffoldState: BottomSheetScaffoldState) {
.padding(vertical = 12.dp)
)
BottomFullWidthButton(
- containerColor = Neutral400,
+ containerColor = Primary500Main,
contentColor = NeutralWhite,
text = stringResource(R.string.next)
) {
@@ -134,8 +143,12 @@ fun AddMenuBottomSheetContent(scaffoldState: BottomSheetScaffoldState) {
.weight(1f)
.padding(top = 12.dp)
) {
- items(dummyMenuItemList) { items ->
- SelectMenuItem(items)
+ itemsIndexed(storeInfo.menuList) { index, isSelected ->
+// Log.d("AddMenuBottomSheetContent", "Item: $index, $isSelected")
+ SelectMenuItem(
+ isSelected = isSelected,
+ onClick = { onItemClick(index) }
+ )
}
}
@@ -145,15 +158,17 @@ fun AddMenuBottomSheetContent(scaffoldState: BottomSheetScaffoldState) {
contentColor = Neutral500,
text = stringResource(R.string.add_menu_by_myself)
) {
-
+ //메뉴 추가화면으로 이동하는 로직
}
Spacer(modifier = Modifier.padding(10.dp))
BottomFullWidthButton(
- containerColor = Neutral400,
+ containerColor = if (enableNextButton) Primary500Main else Neutral400,
contentColor = NeutralWhite,
text = stringResource(R.string.next)
) {
-
+ if (enableNextButton){
+ //버튼 활성화 된 경우의 동작
+ }
}
}
@@ -166,9 +181,13 @@ fun AddMenuBottomSheetContent(scaffoldState: BottomSheetScaffoldState) {
@Composable
private fun AddMenuBottomSheetContentPreview() {
val scaffoldState = rememberBottomSheetScaffoldState()
+ val viewModel: AddMenuSearchViewModel = viewModel()
+ val storeInfo by viewModel.storeInfo.collectAsStateWithLifecycle()
LaunchedEffect(Unit) {
//아래 주석 해제하면 bottom sheet 확장된 상태 확인 가능
-// scaffoldState.bottomSheetState.expand()
+ scaffoldState.bottomSheetState.expand()
+ }
+ AddMenuBottomSheetContent(scaffoldState, storeInfo) { index ->
+ viewModel.updateSelectedMenu(index = index)
}
- AddMenuBottomSheetContent(scaffoldState)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/IconSelectBottomSheet.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/IconSelectBottomSheet.kt
similarity index 92%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/IconSelectBottomSheet.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/IconSelectBottomSheet.kt
index 9ebc13aa..325aba25 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/IconSelectBottomSheet.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/IconSelectBottomSheet.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.bottomsheet
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -15,6 +15,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.kuit.ourmenu.R
+import com.kuit.ourmenu.ui.addmenu.component.item.IconItem
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/TagSelectBottomSheet.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
similarity index 97%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/TagSelectBottomSheet.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
index d5ecd6e5..9e4acf41 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/TagSelectBottomSheet.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/bottomsheet/TagSelectBottomSheet.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.bottomsheet
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoAddressFieldItem.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoAddressFieldItem.kt
similarity index 97%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoAddressFieldItem.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoAddressFieldItem.kt
index a62bf2cd..1e43a96c 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoAddressFieldItem.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoAddressFieldItem.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.item
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
@@ -69,7 +69,7 @@ fun AddMenuInfoAddressFieldItem(
containerColor = Neutral100,
placeHolder = {
Text(
- text = stringResource(R.string.type_restaurant_address),
+ text = stringResource(R.string.type_store_address),
style = ourMenuTypography().pretendard_500_14,
color = Neutral500
)
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoMenuBoardFieldItem.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoMenuBoardFieldItem.kt
similarity index 98%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoMenuBoardFieldItem.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoMenuBoardFieldItem.kt
index fe4bd783..552d19e6 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoMenuBoardFieldItem.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoMenuBoardFieldItem.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.item
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoTextFieldItem.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoTextFieldItem.kt
similarity index 91%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoTextFieldItem.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoTextFieldItem.kt
index e91ecf99..100cadfa 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/AddMenuInfoTextFieldItem.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/AddMenuInfoTextFieldItem.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.item
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
@@ -95,7 +95,7 @@ fun AddMenuInfoTextFieldItem(
@Composable
private fun AddMenuInfoTextFieldItemPreview() {
var priceText by rememberSaveable { mutableStateOf("") }
- var restaurantNameText by rememberSaveable { mutableStateOf("") }
+ var storeNameText by rememberSaveable { mutableStateOf("") }
Column(
modifier = Modifier.fillMaxSize(),
@@ -110,10 +110,10 @@ private fun AddMenuInfoTextFieldItemPreview() {
isPriceInfo = true
)
AddMenuInfoTextFieldItem(
- fieldName = stringResource(R.string.restaurant_name),
- text = restaurantNameText,
- onTextChange = { restaurantNameText = it },
- placeholder = stringResource(R.string.type_restaurant_name)
+ fieldName = stringResource(R.string.store_name),
+ text = storeNameText,
+ onTextChange = { storeNameText = it },
+ placeholder = stringResource(R.string.type_store_name)
)
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/FoodTagItem.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/FoodTagItem.kt
similarity index 97%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/FoodTagItem.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/FoodTagItem.kt
index ba258f12..8d088695 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/FoodTagItem.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/FoodTagItem.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.item
import androidx.compose.material3.AssistChip
import androidx.compose.material3.AssistChipDefaults
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/IconItem.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/IconItem.kt
similarity index 96%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/IconItem.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/IconItem.kt
index 3c237043..ab3dfbbe 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/IconItem.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/IconItem.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.item
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/SelectMenuItem.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/SelectMenuItem.kt
similarity index 92%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/SelectMenuItem.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/SelectMenuItem.kt
index cbec5f27..5576be66 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/SelectMenuItem.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/SelectMenuItem.kt
@@ -1,4 +1,4 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.item
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.Arrangement
@@ -29,7 +29,7 @@ import com.kuit.ourmenu.ui.theme.Primary500Main
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
-fun SelectMenuItem(isSelected: Boolean = false) {
+fun SelectMenuItem(isSelected: Boolean = false, onClick: () -> Unit) {
HorizontalDivider(
thickness = 1.dp,
color = Neutral300,
@@ -55,7 +55,7 @@ fun SelectMenuItem(isSelected: Boolean = false) {
}
if (isSelected) {
Button(
- onClick = {},
+ onClick = onClick,
shape = RoundedCornerShape(16.dp),
colors = ButtonDefaults.buttonColors(
containerColor = Primary500Main
@@ -70,7 +70,7 @@ fun SelectMenuItem(isSelected: Boolean = false) {
}
} else {
Button(
- onClick = {},
+ onClick = onClick,
shape = RoundedCornerShape(16.dp),
border = BorderStroke(1.dp, Primary500Main),
colors = ButtonDefaults.buttonColors(
@@ -93,7 +93,7 @@ fun SelectMenuItem(isSelected: Boolean = false) {
@Composable
private fun SelectedMenuItemPreview() {
Column(modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center) {
- SelectMenuItem(false)
- SelectMenuItem(true)
+ SelectMenuItem(false, onClick = {})
+ SelectMenuItem(true, onClick = {})
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/RestaurantSearchItem.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/StoreSearchItem.kt
similarity index 85%
rename from app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/RestaurantSearchItem.kt
rename to app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/StoreSearchItem.kt
index ffc7979b..e59e88c8 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/RestaurantSearchItem.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/component/item/StoreSearchItem.kt
@@ -1,5 +1,6 @@
-package com.kuit.ourmenu.ui.addmenu.component
+package com.kuit.ourmenu.ui.addmenu.component.item
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -23,11 +24,15 @@ import com.kuit.ourmenu.ui.theme.Neutral700
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
-fun RestaurantSearchItem(isLastItem: Boolean = false) {
+fun StoreSearchItem(
+ isLastItem: Boolean = false,
+ onClick: () -> Unit = {}
+) {
Row(
modifier = Modifier
.fillMaxWidth()
- .padding(vertical = 20.dp, horizontal = 20.dp),
+ .padding(vertical = 20.dp, horizontal = 20.dp)
+ .clickable(onClick = onClick),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
@@ -63,8 +68,8 @@ fun RestaurantSearchItem(isLastItem: Boolean = false) {
@Composable
private fun RestaurantSearchItemPreview() {
Column(modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center) {
- RestaurantSearchItem()
- RestaurantSearchItem()
- RestaurantSearchItem(true)
+ StoreSearchItem()
+ StoreSearchItem()
+ StoreSearchItem(true)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuInfoScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuInfoScreen.kt
index ecf2d10d..728cea57 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuInfoScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuInfoScreen.kt
@@ -27,11 +27,11 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.kuit.ourmenu.R
-import com.kuit.ourmenu.ui.addmenu.component.AddMenuInfoAddressFieldItem
-import com.kuit.ourmenu.ui.addmenu.component.AddMenuInfoMenuBoardFieldItem
-import com.kuit.ourmenu.ui.addmenu.component.AddMenuInfoTextFieldItem
-import com.kuit.ourmenu.ui.common.topappbar.OurMenuBackButtonTopAppBar
+import com.kuit.ourmenu.ui.addmenu.component.item.AddMenuInfoAddressFieldItem
+import com.kuit.ourmenu.ui.addmenu.component.item.AddMenuInfoMenuBoardFieldItem
+import com.kuit.ourmenu.ui.addmenu.component.item.AddMenuInfoTextFieldItem
import com.kuit.ourmenu.ui.common.BottomFullWidthButton
+import com.kuit.ourmenu.ui.common.topappbar.OurMenuBackButtonTopAppBar
import com.kuit.ourmenu.ui.theme.Neutral300
import com.kuit.ourmenu.ui.theme.Neutral400
import com.kuit.ourmenu.ui.theme.Neutral500
@@ -44,7 +44,7 @@ fun AddMenuInfoScreen(autoInput: Boolean = true) {
var menuBoardText by rememberSaveable { mutableStateOf("") }
var menuNameText by rememberSaveable { mutableStateOf("") }
var priceText by rememberSaveable { mutableStateOf("") }
- var restaurantNameText by rememberSaveable { mutableStateOf("") }
+ var storeNameText by rememberSaveable { mutableStateOf("") }
var mainAddressText by rememberSaveable { mutableStateOf("") }
var detailedAddressText by rememberSaveable { mutableStateOf("") }
@@ -134,10 +134,10 @@ fun AddMenuInfoScreen(autoInput: Boolean = true) {
isPriceInfo = true
)
AddMenuInfoTextFieldItem(
- fieldName = stringResource(R.string.restaurant_name),
- text = restaurantNameText,
- onTextChange = { restaurantNameText = it },
- placeholder = stringResource(R.string.type_restaurant_name)
+ fieldName = stringResource(R.string.store_name),
+ text = storeNameText,
+ onTextChange = { storeNameText = it },
+ placeholder = stringResource(R.string.type_store_name)
)
AddMenuInfoAddressFieldItem(
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuScreen.kt
index d204cc86..f3bbec0d 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuScreen.kt
@@ -1,9 +1,13 @@
package com.kuit.ourmenu.ui.addmenu.screen
+import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.interaction.collectIsFocusedAsState
+import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
-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
@@ -14,6 +18,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.material3.rememberBottomSheetScaffoldState
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -23,13 +28,18 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.viewmodel.compose.viewModel
import com.kuit.ourmenu.R
-import com.kuit.ourmenu.ui.addmenu.component.AddMenuBottomSheetContent
-import com.kuit.ourmenu.ui.common.topappbar.OurMenuBackButtonTopAppBar
+import com.kuit.ourmenu.ui.addmenu.component.AddMenuSearchBackground
+import com.kuit.ourmenu.ui.addmenu.component.bottomsheet.AddMenuBottomSheetContent
+import com.kuit.ourmenu.ui.addmenu.viewmodel.AddMenuSearchViewModel
import com.kuit.ourmenu.ui.common.SearchBar
+import com.kuit.ourmenu.ui.common.topappbar.OurMenuBackButtonTopAppBar
import com.kuit.ourmenu.ui.theme.Neutral300
import com.kuit.ourmenu.ui.theme.Primary500Main
import com.kuit.ourmenu.ui.theme.ourMenuTypography
@@ -37,9 +47,33 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AddMenuScreen(modifier: Modifier = Modifier) {
- val scaffoldState = rememberBottomSheetScaffoldState()
- val showBottomSheet by remember { mutableStateOf(true) }
+ var scaffoldState = rememberBottomSheetScaffoldState()
+ var showBottomSheet by rememberSaveable { mutableStateOf(false) }
+ var showSearchBackground by rememberSaveable { mutableStateOf(false) }
var searchText by rememberSaveable { mutableStateOf("") }
+ var searchActionDone by rememberSaveable { mutableStateOf(false) }
+ val interactionSource = remember { MutableInteractionSource() }
+ val searchBarFocused by interactionSource.collectIsFocusedAsState()
+ val focusManager = LocalFocusManager.current
+
+ val viewModel: AddMenuSearchViewModel = viewModel()
+ val recentSearchResults by viewModel.recentSearchResults.collectAsStateWithLifecycle()
+ val searchResults by viewModel.searchResults.collectAsStateWithLifecycle()
+ val storeInfo by viewModel.storeInfo.collectAsStateWithLifecycle()
+
+ LaunchedEffect(searchBarFocused) {
+ if (searchBarFocused) {
+ showSearchBackground = true
+ showBottomSheet = false
+ }
+ }
+
+ BackHandler(enabled = showSearchBackground) {
+ if (searchBarFocused) focusManager.clearFocus()
+ searchActionDone = false
+ showSearchBackground = false
+ searchText = ""
+ }
BottomSheetScaffold(
scaffoldState = scaffoldState,
@@ -55,7 +89,10 @@ fun AddMenuScreen(modifier: Modifier = Modifier) {
sheetContainerColor = Color.White,
sheetContent = {
//bottom sheet 구성
- AddMenuBottomSheetContent(scaffoldState)
+ AddMenuBottomSheetContent(
+ scaffoldState = scaffoldState,
+ storeInfo = storeInfo,
+ onItemClick = { index -> viewModel.updateSelectedMenu(index) })
},
//조건 만족하면 bottom sheet 보여주고, 아니면 화면에 안보이도록 처리
sheetPeekHeight = if (showBottomSheet) 254.dp else 0.dp,
@@ -77,15 +114,47 @@ fun AddMenuScreen(modifier: Modifier = Modifier) {
}
}
) {
- //전체 화면 구성, 지도는 추가 예정
- Column(modifier = Modifier.padding(horizontal = 20.dp)) {
- Spacer(modifier = Modifier.height(12.dp))
+ Box(modifier = Modifier.fillMaxWidth()) {
+ if (!showSearchBackground) {
+ //지도 컴포넌트
+ Column(
+ modifier = Modifier.fillMaxSize(),
+ verticalArrangement = Arrangement.Center,
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Text("지도 컴포넌트")
+ }
+ } else {
+ //검색 컴포넌트
+ AddMenuSearchBackground(
+ searchActionDone = searchActionDone,
+ recentSearchResults = recentSearchResults,
+ searchResults = searchResults
+ ) {
+ //검색된 아이템 클릭시 작동할 함수
+ if (searchBarFocused) focusManager.clearFocus()
+ showSearchBackground = false
+ showBottomSheet = true
+ searchText = ""
+ }
+ }
+
SearchBar(
+ modifier = Modifier.padding(top = 12.dp, start = 20.dp, end = 20.dp),
text = searchText,
- onTextChange = { searchText = it },
- ){
+ onTextChange = {
+ searchText = it
+ showSearchBackground = true
+ showBottomSheet = false
+ },
+ interactionSource = interactionSource
+ ) {
//onSearch 함수
+ if (searchBarFocused) focusManager.clearFocus()
+ searchActionDone = true
+
}
+
}
}
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuSearchScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuSearchScreen.kt
deleted file mode 100644
index 34fa17bb..00000000
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuSearchScreen.kt
+++ /dev/null
@@ -1,153 +0,0 @@
-package com.kuit.ourmenu.ui.addmenu.screen
-
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.items
-import androidx.compose.material3.Icon
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-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.graphics.Color
-import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import com.kuit.ourmenu.R
-import com.kuit.ourmenu.ui.common.topappbar.OurMenuBackButtonTopAppBar
-import com.kuit.ourmenu.ui.addmenu.component.RestaurantSearchItem
-import com.kuit.ourmenu.ui.common.BottomFullWidthButton
-import com.kuit.ourmenu.ui.common.SearchBar
-import com.kuit.ourmenu.ui.theme.Neutral100
-import com.kuit.ourmenu.ui.theme.Neutral500
-import com.kuit.ourmenu.ui.theme.Neutral700
-import com.kuit.ourmenu.ui.theme.Primary500Main
-import com.kuit.ourmenu.ui.theme.ourMenuTypography
-
-@Composable
-fun AddMenuSearchScreen(modifier: Modifier = Modifier) {
- var searchText by rememberSaveable { mutableStateOf("") }
- val searchActionDone by rememberSaveable { mutableStateOf(true) }
- val dummyRecentSearchList = mutableListOf(
- false,
- false,
- false,
- false,
- true,
- )
- val dummySearchResultList: MutableList = mutableListOf()
-
- Scaffold(modifier = Modifier.fillMaxSize(),
- topBar = {
- OurMenuBackButtonTopAppBar {
- Text(
- text = stringResource(R.string.ourmenu),
- color = Primary500Main,
- style = ourMenuTypography().pretendard_600_18
- )
- }
- },
- bottomBar = {
- Column(
- modifier = Modifier
- .fillMaxWidth()
- .padding(start = 20.dp, end = 20.dp, bottom = 20.dp),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center
- ) {
- BottomFullWidthButton(
- onClick = { TODO() },
- containerColor = Neutral100,
- contentColor = Neutral500,
- text = stringResource(R.string.add_restaurant_and_menu_by_myself)
- )
- }
- },
- content = { paddingValues ->
- Column(
- modifier = Modifier
- .padding(paddingValues)
- .fillMaxWidth(),
- horizontalAlignment = Alignment.CenterHorizontally
- ) {
- Column(
- modifier = Modifier
- .fillMaxWidth()
- .padding(vertical = 12.dp, horizontal = 20.dp)
- ) {
- SearchBar(
- text = searchText,
- onTextChange = { searchText = it }
- ) {
- //onSearch 함수
- }
- }
- Column(modifier = Modifier.fillMaxSize()) {
- if (searchActionDone) {
- //검색을 한 경우
- if (dummySearchResultList.isEmpty()) {
- Column(
- modifier = Modifier
- .fillMaxWidth()
- .padding(top = 64.dp),
- horizontalAlignment = Alignment.CenterHorizontally
- ) {
- Icon(
- painter = painterResource(R.drawable.ic_addmenu_noresult),
- contentDescription = "no result",
- tint = Color.Unspecified
- )
- Text(
- text = stringResource(R.string.no_result),
- style = ourMenuTypography().pretendard_600_14,
- color = Neutral500,
- modifier = Modifier.padding(top = 8.dp)
- )
- }
- } else {
- LazyColumn {
- items(dummySearchResultList) { item ->
- RestaurantSearchItem(item)
- }
- }
- }
- } else {
- //검색을 하지 않은 경우
- Text(
- text = stringResource(R.string.recent_search),
- style = ourMenuTypography().pretendard_600_14,
- color = Neutral700,
- modifier = Modifier.padding(start = 28.dp)
- )
- if (dummyRecentSearchList.isEmpty()) {
- Column(modifier = Modifier.fillMaxSize()) { /*empty view*/ }
- } else {
- LazyColumn {
- items(dummyRecentSearchList) { item ->
- RestaurantSearchItem(item)
- }
- }
- }
- }
-
- }
- }
- }
- )
-
-}
-
-@Preview(showBackground = true)
-@Composable
-private fun AddMenuSearchScreenPreview() {
- AddMenuSearchScreen()
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuTagScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuTagScreen.kt
index 1d07581a..8ef023bd 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuTagScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/screen/AddMenuTagScreen.kt
@@ -39,9 +39,9 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.kuit.ourmenu.R
+import com.kuit.ourmenu.ui.addmenu.component.bottomsheet.IconSelectBottomSheet
+import com.kuit.ourmenu.ui.addmenu.component.bottomsheet.TagSelectBottomSheet
import com.kuit.ourmenu.ui.common.topappbar.OurMenuBackButtonTopAppBar
-import com.kuit.ourmenu.ui.addmenu.component.IconSelectBottomSheet
-import com.kuit.ourmenu.ui.addmenu.component.TagSelectBottomSheet
import com.kuit.ourmenu.ui.common.CustomTextField
import com.kuit.ourmenu.ui.theme.Neutral100
import com.kuit.ourmenu.ui.theme.Neutral300
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/addmenu/viewmodel/AddMenuSearchViewModel.kt b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/viewmodel/AddMenuSearchViewModel.kt
new file mode 100644
index 00000000..dfed7b06
--- /dev/null
+++ b/app/src/main/java/com/kuit/ourmenu/ui/addmenu/viewmodel/AddMenuSearchViewModel.kt
@@ -0,0 +1,86 @@
+package com.kuit.ourmenu.ui.addmenu.viewmodel
+
+import android.util.Log
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.kuit.ourmenu.R
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.launch
+
+class AddMenuSearchViewModel : ViewModel() {
+ // 최근 검색 결과를 저장
+ private val _recentSearchResults = MutableStateFlow>(emptyList())
+ val recentSearchResults: StateFlow> = _recentSearchResults
+
+ //실제 검색 결과를 저장
+ private val _searchResulst = MutableStateFlow>(emptyList())
+ val searchResults: StateFlow> = _searchResulst
+
+ //식당 정보
+ private val _storeInfo = MutableStateFlow(AddMenuDummyStoreInfo())
+ val storeInfo: StateFlow = _storeInfo
+
+ init {
+ getRecentSearchResults()
+ //확인용, 이후에는 제거
+ getSearchResults()
+ getRestaurantInfo()
+ }
+
+ fun getRecentSearchResults() {
+ viewModelScope.launch {
+ _recentSearchResults.value = listOf(false, false, false, false, true)
+ }
+ }
+
+ fun getSearchResults() {
+ viewModelScope.launch {
+ _searchResulst.value = listOf()
+ }
+ }
+
+ fun getRestaurantInfo() {
+ viewModelScope.launch {
+ _storeInfo.value = AddMenuDummyStoreInfo(
+ imgList = listOf(
+ R.drawable.img_dummy_pizza,
+ R.drawable.img_dummy_pizza,
+ R.drawable.img_dummy_pizza,
+ ),
+ name = R.string.our_ddeokbokki.toString(),
+ address = R.string.resaturant_address.toString(),
+ menuList = listOf(false, false, false, false, false, false, false, false)
+ )
+ }
+ }
+
+ fun updateSelectedMenu(index: Int) {
+ Log.d("AddMenuViewModel", "index: $index")
+ viewModelScope.launch {
+ val currentState = _storeInfo.value.menuList[index]
+ val updatedMenuList =
+ if (currentState){
+ //선택된 아이템 클릭시 false로 다시 변경
+ _storeInfo.value.menuList.map {
+ false
+ }
+ }else{
+ //클릭된 인덱스만 true, 나머지는 false
+ _storeInfo.value.menuList.mapIndexed { i, _ ->
+ i == index
+ }
+ }
+// Log.d("AddMenuViewModel", "updatedMenuList: $updatedMenuList")
+ _storeInfo.value = _storeInfo.value.copy(menuList = updatedMenuList)
+ }
+ }
+}
+
+//이후에 dto 반영시 삭제 예정
+data class AddMenuDummyStoreInfo(
+ val imgList: List = emptyList(),
+ val name: String = "",
+ val address: String = "",
+ val menuList: List = emptyList(),
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/common/BottomFullWidthButton.kt b/app/src/main/java/com/kuit/ourmenu/ui/common/BottomFullWidthButton.kt
index 922b5172..9ba5e708 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/common/BottomFullWidthButton.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/common/BottomFullWidthButton.kt
@@ -27,6 +27,7 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
fun BottomFullWidthButton(
+ modifier: Modifier = Modifier,
containerColor: Color,
contentColor: Color,
text: String,
@@ -34,7 +35,7 @@ fun BottomFullWidthButton(
) {
Button(
onClick = onClick,
- modifier = Modifier
+ modifier = modifier
.fillMaxWidth()
.size(320.dp, 48.dp)
.shadow(elevation = 4.dp, shape = RoundedCornerShape(12.dp)),
@@ -44,7 +45,8 @@ fun BottomFullWidthButton(
contentColor = contentColor
),
) {
- Text(text = text,
+ Text(
+ text = text,
style = ourMenuTypography().pretendard_700_16,
color = contentColor
)
@@ -55,11 +57,19 @@ fun BottomFullWidthButton(
@Composable
private fun BottomFullWidthButtonPreview() {
Column(modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center) {
- BottomFullWidthButton(Neutral100, Neutral500, stringResource(R.string.add_restaurant_and_menu_by_myself)){
+ BottomFullWidthButton(
+ containerColor = Neutral100,
+ contentColor = Neutral500,
+ text = stringResource(R.string.add_store_and_menu_by_myself)
+ ) {
//onClick 작성
}
Spacer(modifier = Modifier.height(16.dp))
- BottomFullWidthButton(Primary500Main, NeutralWhite, stringResource(R.string.add_menu)){
+ BottomFullWidthButton(
+ containerColor = Primary500Main,
+ contentColor = NeutralWhite,
+ text = stringResource(R.string.add_menu)
+ ) {
//onClick 작성
}
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/common/BottomHalfWidthButton.kt b/app/src/main/java/com/kuit/ourmenu/ui/common/BottomHalfWidthButton.kt
index 898b12b7..68411a51 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/common/BottomHalfWidthButton.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/common/BottomHalfWidthButton.kt
@@ -27,13 +27,14 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
fun BottomHalfWidthButton(
+ modifier: Modifier = Modifier,
containerColor: Color,
contentColor: Color,
text: String,
onClick: () -> Unit
) {
Button(
- modifier = Modifier
+ modifier = modifier
.size(154.dp, 52.dp)
.shadow(elevation = 4.dp, shape = RoundedCornerShape(12.dp)),
shape = RoundedCornerShape(12.dp),
@@ -62,10 +63,18 @@ private fun BottomHalfWidthButtonPreview() {
horizontalAlignment = Alignment.CenterHorizontally
) {
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) {
- BottomHalfWidthButton(Neutral400, NeutralWhite, stringResource(R.string.cancel)) {
+ BottomHalfWidthButton(
+ containerColor = Neutral400,
+ contentColor = NeutralWhite,
+ text = stringResource(R.string.cancel)
+ ) {
}
- BottomHalfWidthButton(Primary500Main, NeutralWhite, stringResource(R.string.apply)) {
+ BottomHalfWidthButton(
+ containerColor = Primary500Main,
+ contentColor = NeutralWhite,
+ text = stringResource(R.string.apply)
+ ) {
}
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/common/CustomTextField.kt b/app/src/main/java/com/kuit/ourmenu/ui/common/CustomTextField.kt
index f16a78af..bde64ff9 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/common/CustomTextField.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/common/CustomTextField.kt
@@ -29,6 +29,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.VisualTransformation
@@ -68,7 +69,7 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
*
* @param singleLine 입력된 텍스트를 한 줄로만 표시할지의 여부를 나타낸다. 기본값은 true
*
- * @param shape 배경, 내부영역을 포함한 컴포넌트의 전체적인 모양 처리
+ * @param shape 컴포넌트의 내부 영역의 모양 처리, modifier에 RoundedCornerShape를 적용하면 여기에도 적용해야 동일해진다
* ex) RoundedCornerShape(8.dp) 등
*
* @param trailingIcon 컴포넌트의 우측 끝에 위치하게 할 Icon 객체를 lambda를 통해 넘겨준다
@@ -87,6 +88,9 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
* @param cursorColor 커서에 대한 색상을 Color 객체를 통해 지정한다
* 기본 값으로는 Color.Black으로 지정
*
+ * @param isError 에러 처리에 필요한 조건문에 사용할 변수, 기본값은 false로 초기화되어 있다
+ * ex) 비밀번호 오류시 container 색상 변경 등
+ *
* @param keyboardOptions 키보드에 대한 설정을 KeyboardOptions를 통해 지정한다
*
* @param keyboardActions 키보드에서 특정 버튼을 눌렀을 때의 작업을 keyboardActions를 통해 지정한다
@@ -109,6 +113,7 @@ fun CustomTextField(
paddingValues: PaddingValues = PaddingValues(0.dp),
containerColor: Color = Color.White,
cursorColor: Color = Color.Black,
+ isError: Boolean = false,
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
keyboardActions: KeyboardActions = KeyboardActions.Default
) {
@@ -123,7 +128,8 @@ fun CustomTextField(
singleLine = singleLine,
textStyle = textStyle,
keyboardOptions = keyboardOptions,
- keyboardActions = keyboardActions
+ keyboardActions = keyboardActions,
+ cursorBrush = SolidColor(cursorColor)
) { innerTextField ->
TextFieldDefaults.DecorationBox(
@@ -142,11 +148,12 @@ fun CustomTextField(
/*
* 이곳에서 enabled 여부, focus 여부 등에 따른 색상, indicator(밑줄)의 색상 등을 따로 지정할 수 있다.
* */
- focusedContainerColor = containerColor,
+ focusedContainerColor = if(isError) Color.Red else containerColor,
unfocusedContainerColor = containerColor,
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
- cursorColor = cursorColor
+ disabledContainerColor = containerColor,
+ disabledIndicatorColor = containerColor,
)
)
@@ -168,9 +175,11 @@ private fun CustomTextFieldPreview() {
CustomTextField(
modifier = Modifier
.fillMaxWidth()
- .border(0.8.dp, Color.Black),
+ .border(0.8.dp, Color.Black, RoundedCornerShape(8.dp)),
+ shape = RoundedCornerShape(8.dp),
text = textForSimple,
- onTextChange = { textForSimple = it }
+ onTextChange = { textForSimple = it },
+ isError = true
)
Spacer(modifier = Modifier.height(20.dp))
//추가 기능이 있는 버전
@@ -194,7 +203,8 @@ private fun CustomTextFieldPreview() {
contentDescription = "SearchIcon"
)
},
- paddingValues = PaddingValues(20.dp, 0.dp)
+ paddingValues = PaddingValues(20.dp, 0.dp),
+ cursorColor = Color.Red,
)
}
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/common/SearchBar.kt b/app/src/main/java/com/kuit/ourmenu/ui/common/SearchBar.kt
index 310a89a3..9deb51b9 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/common/SearchBar.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/common/SearchBar.kt
@@ -2,6 +2,7 @@ package com.kuit.ourmenu.ui.common
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
@@ -10,12 +11,15 @@ 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.KeyboardActions
+import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.Card
import androidx.compose.material3.Icon
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.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
@@ -24,6 +28,7 @@ import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.kuit.ourmenu.R
@@ -34,12 +39,14 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography
@Composable
fun SearchBar(
+ modifier: Modifier = Modifier,
text: String,
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
onTextChange: (String) -> Unit,
onSearch: () -> Unit,
) {
Card(
- modifier = Modifier
+ modifier
.shadow(elevation = 2.dp, shape = RoundedCornerShape(8.dp))
.fillMaxWidth(),
shape = RoundedCornerShape(8.dp)
@@ -69,7 +76,10 @@ fun SearchBar(
)
},
paddingValues = PaddingValues(start = 28.dp, top = 0.dp, bottom = 0.dp),
- cursorColor = Primary500Main
+ cursorColor = Primary500Main,
+ interactionSource = interactionSource,
+ keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
+ keyboardActions = KeyboardActions(onSearch = { onSearch() })
)
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LandingScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LandingScreen.kt
index 5672b83c..a7c57ea6 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LandingScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LandingScreen.kt
@@ -64,7 +64,7 @@ fun LandingScreen(modifier: Modifier = Modifier) {
Spacer(modifier = Modifier.height(44.dp))
- BottomFullWidthButton(Primary500Main, NeutralWhite, stringResource(R.string.login)) {
+ BottomFullWidthButton(modifier = Modifier, containerColor = Primary500Main, contentColor = NeutralWhite, text = stringResource(R.string.login)) {
// TODO: onClick 작성
}
diff --git a/app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LoginScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LoginScreen.kt
index e2e56f1e..dc800ac0 100644
--- a/app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LoginScreen.kt
+++ b/app/src/main/java/com/kuit/ourmenu/ui/onboarding/screen/LoginScreen.kt
@@ -133,9 +133,10 @@ fun LoginScreen(modifier: Modifier = Modifier) {
Spacer(modifier = Modifier.height(24.dp))
BottomFullWidthButton(
- Primary500Main,
- NeutralWhite,
- stringResource(R.string.login),
+ modifier = Modifier,
+ containerColor = Primary500Main,
+ contentColor = NeutralWhite,
+ text = stringResource(R.string.login),
) {
// TODO: onClick 작성
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 29ae3ee5..f32826c2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -12,13 +12,13 @@
메뉴 이름을 입력해주세요
메뉴 가격
직접 가격을 입력해주세요
- 가게 이름
- 가게 이름을 입력해주세요
+ 가게 이름
+ 가게 이름을 입력해주세요
가게 주소
- 가게 주소를 입력해주세요.
+ 가게 주소를 입력해주세요.
상세 주소를 입력해주세요.
OURMENU
- 가게와 메뉴 직접 추가
+ 가게와 메뉴 직접 추가
검색 결과가 없어요!
최근 검색
취소
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 60cfe30c..fff6a216 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -8,6 +8,9 @@ espressoCore = "3.5.1"
lifecycleRuntimeKtx = "2.6.1"
activityCompose = "1.8.0"
composeBom = "2024.04.01"
+lifecycleViewmodel = "2.9.0-alpha08"
+lifecycleViewmodelCompose = "2.9.0-alpha08"
+lifecycleRuntimeComposeAndroid = "2.8.7"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@@ -24,6 +27,9 @@ androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-toolin
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3" }
+androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel", version.ref = "lifecycleViewmodel" }
+androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycleViewmodelCompose" }
+androidx-lifecycle-runtime-compose-android = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose-android", version.ref = "lifecycleRuntimeComposeAndroid" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }