feat: province move ti utils

This commit is contained in:
2026-06-05 00:19:16 +03:30
parent 8516405daf
commit 1ba6062c86
2 changed files with 155 additions and 147 deletions
@@ -8,12 +8,16 @@ import androidx.compose.material3.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.approagency.drug.domain.model.PharmacyItem import com.approagency.drug.domain.model.PharmacyItem
import com.approagency.drug.presentation.common.CustomBox
import com.approagency.drug.presentation.common.CustomModalBottomSheet import com.approagency.drug.presentation.common.CustomModalBottomSheet
import com.approagency.drug.presentation.viewModel.PharmacyState import com.approagency.drug.presentation.viewModel.PharmacyState
import com.approagency.drug.presentation.viewModel.PharmacyViewModel import com.approagency.drug.presentation.viewModel.PharmacyViewModel
import com.approagency.drug.utils.provinces
import com.vada.caller.ui.theme.LocalDime import com.vada.caller.ui.theme.LocalDime
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -27,45 +31,10 @@ fun PharmacyBottomSheet(
) { ) {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
val sheetState = rememberModalBottomSheetState( val sheetState = rememberModalBottomSheetState(
skipPartiallyExpanded = true, skipPartiallyExpanded = false,
confirmValueChange = { true } confirmValueChange = { true }
) )
// لیست استان‌ها (همان لیست HTML)
val provinces = listOf(
Province("0", "همه استان ها"),
Province("1", "اصفهان"),
Province("40", "تهران"),
Province("137", "آذربایجان شرقی"),
Province("138", "آذربایجان غربی"),
Province("139", "اردبیل"),
Province("140", "البرز"),
Province("141", "ایلام"),
Province("142", "بوشهر"),
Province("143", "چهارمحال و بختیاری"),
Province("144", "خراسان جنوبی"),
Province("145", "خراسان رضوی"),
Province("146", "خراسان شمالی"),
Province("147", "خوزستان"),
Province("148", "زنجان"),
Province("149", "سمنان"),
Province("150", "سیستان و بلوچستان"),
Province("151", "فارس"),
Province("152", "قزوین"),
Province("153", "قم"),
Province("154", "کردستان"),
Province("155", "کرمان"),
Province("156", "کرمانشاه"),
Province("157", "کهگیلویه و بویراحمد"),
Province("158", "گلستان"),
Province("159", "گیلان"),
Province("160", "لرستان"),
Province("161", "مازندران"),
Province("162", "مرکزی"),
Province("163", "هرمزگان"),
Province("164", "همدان"),
Province("165", "یزد")
)
var selectedProvinceId by remember { mutableStateOf("40") } // پیش‌فرض تهران var selectedProvinceId by remember { mutableStateOf("40") } // پیش‌فرض تهران
var showProvinceDropdown by remember { mutableStateOf(false) } var showProvinceDropdown by remember { mutableStateOf(false) }
@@ -85,6 +54,7 @@ fun PharmacyBottomSheet(
onDismiss = onDismiss, onDismiss = onDismiss,
scope = scope scope = scope
) { ) {
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
@@ -104,14 +74,15 @@ fun PharmacyBottomSheet(
onExpandedChange = { showProvinceDropdown = it } onExpandedChange = { showProvinceDropdown = it }
) { ) {
OutlinedTextField( OutlinedTextField(
value = provinces.find { it.id == selectedProvinceId }?.name ?: "انتخاب استان", value = provinces.find { it.id == selectedProvinceId }?.name
?: "انتخاب استان",
onValueChange = {}, onValueChange = {},
readOnly = true, readOnly = true,
trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = showProvinceDropdown) }, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = showProvinceDropdown) },
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.menuAnchor(), .menuAnchor(),
shape = MaterialTheme.shapes.small shape = MaterialTheme.shapes.large
) )
ExposedDropdownMenu( ExposedDropdownMenu(
@@ -173,7 +144,7 @@ fun PharmacyBottomSheet(
} else { } else {
LazyColumn( LazyColumn(
verticalArrangement = Arrangement.spacedBy(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp),
modifier = Modifier.heightIn(max = 400.dp) modifier = Modifier.weight(1f),
) { ) {
items(state.items) { pharmacy -> items(state.items) { pharmacy ->
PharmacyResultItem(pharmacy = pharmacy) PharmacyResultItem(pharmacy = pharmacy)
@@ -221,6 +192,7 @@ fun PharmacyBottomSheet(
} }
} }
} }
}
@Composable @Composable
fun PharmacyResultItem( fun PharmacyResultItem(
@@ -229,9 +201,8 @@ fun PharmacyResultItem(
) { ) {
val dime = LocalDime.current val dime = LocalDime.current
Card( CustomBox (
modifier = modifier.fillMaxWidth(), modifier = modifier.fillMaxWidth(),
elevation = CardDefaults.cardElevation(defaultElevation = 1.dp)
) { ) {
Column( Column(
modifier = Modifier modifier = Modifier
@@ -242,7 +213,7 @@ fun PharmacyResultItem(
// نام برند // نام برند
Text( Text(
text = pharmacy.brandName, text = pharmacy.brandName,
fontSize = MaterialTheme.typography.bodyMedium.fontSize, fontSize = MaterialTheme.typography.labelSmall.fontSize,
color = MaterialTheme.colorScheme.primary color = MaterialTheme.colorScheme.primary
) )
@@ -250,7 +221,7 @@ fun PharmacyResultItem(
Text( Text(
text = pharmacy.pharmacyName, text = pharmacy.pharmacyName,
fontWeight = FontWeight.Bold, fontWeight = FontWeight.Bold,
fontSize = MaterialTheme.typography.bodyLarge.fontSize fontSize = MaterialTheme.typography.labelLarge.fontSize
) )
// موقعیت // موقعیت
@@ -262,8 +233,3 @@ fun PharmacyResultItem(
} }
} }
} }
data class Province(
val id: String,
val name: String
)
@@ -0,0 +1,42 @@
package com.approagency.drug.utils
val provinces = listOf(
Province("0", "همه استان ها"),
Province("1", "اصفهان"),
Province("40", "تهران"),
Province("137", "آذربایجان شرقی"),
Province("138", "آذربایجان غربی"),
Province("139", "اردبیل"),
Province("140", "البرز"),
Province("141", "ایلام"),
Province("142", "بوشهر"),
Province("143", "چهارمحال و بختیاری"),
Province("144", "خراسان جنوبی"),
Province("145", "خراسان رضوی"),
Province("146", "خراسان شمالی"),
Province("147", "خوزستان"),
Province("148", "زنجان"),
Province("149", "سمنان"),
Province("150", "سیستان و بلوچستان"),
Province("151", "فارس"),
Province("152", "قزوین"),
Province("153", "قم"),
Province("154", "کردستان"),
Province("155", "کرمان"),
Province("156", "کرمانشاه"),
Province("157", "کهگیلویه و بویراحمد"),
Province("158", "گلستان"),
Province("159", "گیلان"),
Province("160", "لرستان"),
Province("161", "مازندران"),
Province("162", "مرکزی"),
Province("163", "هرمزگان"),
Province("164", "همدان"),
Province("165", "یزد")
)
data class Province(
val id: String,
val name: String
)