From bf2d1ad211af4cf1c9b70e789966a11f4c074911 Mon Sep 17 00:00:00 2001 From: Amirmahdi Nourkazemi Date: Wed, 27 May 2026 12:50:25 +0330 Subject: [PATCH] feat: beter style --- .../drug/data/remote/DarooyabApiService.kt | 12 ++++ .../components/DaroYabResultContent.kt | 72 ++++++++++++------- .../drug/presentation/screens/SearchScreen.kt | 21 +++--- 3 files changed, 72 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/approagency/drug/data/remote/DarooyabApiService.kt b/app/src/main/java/com/approagency/drug/data/remote/DarooyabApiService.kt index 62ead62..a9386d0 100644 --- a/app/src/main/java/com/approagency/drug/data/remote/DarooyabApiService.kt +++ b/app/src/main/java/com/approagency/drug/data/remote/DarooyabApiService.kt @@ -5,6 +5,7 @@ import retrofit2.http.FormUrlEncoded import retrofit2.http.GET import retrofit2.http.Headers import retrofit2.http.POST +import retrofit2.http.Path import retrofit2.http.Query interface DarooyabApiService { @@ -20,4 +21,15 @@ interface DarooyabApiService { @Field("autocomplete") searchText: String, @Field("DrugName_pageNumber") pageNumber: Int = 1 ): String + + + @GET("{detailUrl}") + @Headers( + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9", + "Accept-Language: en-US,en;q=0.9,fa;q=0.8" + ) + suspend fun getDrugDetail( + @Path(value = "detailUrl", encoded = true) detailUrl: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/approagency/drug/presentation/components/DaroYabResultContent.kt b/app/src/main/java/com/approagency/drug/presentation/components/DaroYabResultContent.kt index b409e92..6028b06 100644 --- a/app/src/main/java/com/approagency/drug/presentation/components/DaroYabResultContent.kt +++ b/app/src/main/java/com/approagency/drug/presentation/components/DaroYabResultContent.kt @@ -1,61 +1,83 @@ package com.approagency.drug.presentation.components 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.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.approagency.drug.domain.model.DaroYabSearchResult import com.approagency.drug.domain.model.DrugSearchResult +import com.approagency.drug.presentation.common.CustomBox import com.vada.caller.ui.theme.LocalDime +import com.vada.caller.ui.theme.dime @Composable fun DaroYabSearchResult( drug: DrugSearchResult, - onClick: (DrugSearchResult) -> Unit, + onClickDetail: (DrugSearchResult) -> Unit, + onClickDrugStore:() ->Unit, modifier: Modifier = Modifier ) { val dime = LocalDime.current - Card( + CustomBox ( modifier = modifier + .padding(bottom = MaterialTheme.dime.sm) .fillMaxWidth() - .padding(vertical = dime.xs) - .clickable { onClick(drug) }, - elevation = CardDefaults.cardElevation(defaultElevation = 2.dp), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.surface - ) + .clickable { onClickDetail(drug) }, + ) { - Column( - modifier = Modifier.padding(dime.lg) + Row ( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End ) { - Text( - text = drug.persianName, - fontWeight = FontWeight.Bold, - fontSize = 16.sp, - color = MaterialTheme.colorScheme.onSurface - ) - drug.englishName?.let { + Column( + modifier = Modifier.padding(dime.lg), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.End + ) { Text( - text = it, - fontSize = 12.sp, - color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + text = drug.persianName, + fontWeight = FontWeight.Bold, + fontSize = 16.sp, + color = MaterialTheme.colorScheme.onSurface ) + drug.englishName?.let { + Text( + text = it, + fontSize = 12.sp, + color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f) + ) + } + Text( + text = "کد: ${drug.genericId}", + fontSize = 10.sp, + color = MaterialTheme.colorScheme.primary + ) + Row( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween + ) { + TextButton(onClick = {onClickDetail(drug)} , content = { + Text("اطلاعات دارویی") + }) + TextButton(onClick = {onClickDetail(drug)} , content = { + Text("موجودی داروخانه") + }) + } } - Text( - text = "کد: ${drug.genericId}", - fontSize = 10.sp, - color = MaterialTheme.colorScheme.primary - ) } } } \ No newline at end of file diff --git a/app/src/main/java/com/approagency/drug/presentation/screens/SearchScreen.kt b/app/src/main/java/com/approagency/drug/presentation/screens/SearchScreen.kt index e6b5cfb..6d4ea11 100644 --- a/app/src/main/java/com/approagency/drug/presentation/screens/SearchScreen.kt +++ b/app/src/main/java/com/approagency/drug/presentation/screens/SearchScreen.kt @@ -88,7 +88,10 @@ fun SearchScreen( } } - Column(modifier = modifier.fillMaxSize().padding(dime.lg)) { + Column(modifier = modifier + .fillMaxSize() + .padding(horizontal = MaterialTheme.dime.md) + .padding(top = MaterialTheme.dime.md)) { // Search input CustomTextFilled( value = searchText, @@ -117,13 +120,13 @@ fun SearchScreen( } ) - + Spacer(modifier = Modifier.height(MaterialTheme.dime.md)) // Results area when (val currentState = state) { is SearchState.Loading -> { Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Column(horizontalAlignment = Alignment.CenterHorizontally) { - androidx.compose.material3.CircularProgressIndicator( + CircularProgressIndicator( color = MaterialTheme.colorScheme.primary ) Text( @@ -137,14 +140,15 @@ fun SearchScreen( is SearchState.LoadingMore -> { // Show existing items with loading indicator at bottom - LazyColumn(state = lazyListState) { + LazyColumn(state = lazyListState , modifier = modifier.padding(vertical = MaterialTheme.dime.xs)) { items(currentState.currentItems) { drug -> DaroYabSearchResult( drug = drug, - onClick = { selectedDrug -> + onClickDetail = { selectedDrug ->println(selectedDrug.detailPageUrl) // Navigate to drug detail // navController.navigate("drug_detail/${selectedDrug.genericId}") - } + }, + onClickDrugStore = {} ) } item { @@ -161,10 +165,11 @@ fun SearchScreen( items(currentState.drugs) { drug -> DaroYabSearchResult( drug = drug, - onClick = { selectedDrug -> + onClickDetail = { selectedDrug -> println(selectedDrug.detailPageUrl) // Navigate to drug detail // navController.navigate("drug_detail/${selectedDrug.genericId}") - } + }, + onClickDrugStore = {} ) }