diff --git a/app/src/main/java/com/approagency/drug/MainActivity.kt b/app/src/main/java/com/approagency/drug/MainActivity.kt index 698bbd7..6183f4d 100644 --- a/app/src/main/java/com/approagency/drug/MainActivity.kt +++ b/app/src/main/java/com/approagency/drug/MainActivity.kt @@ -6,8 +6,12 @@ import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview @@ -15,12 +19,23 @@ import com.approagency.drug.presentation.screens.HomeScreen import com.approagency.drug.ui.theme.DrugTheme class MainActivity : ComponentActivity() { + @OptIn(ExperimentalMaterial3Api::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { DrugTheme { - Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> + Scaffold(modifier = Modifier.fillMaxSize() , topBar = { + TopAppBar( + colors = TopAppBarDefaults.topAppBarColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + titleContentColor = MaterialTheme.colorScheme.primary, + ), + title = { + Text("Small Top App Bar") + } + ) + },) { innerPadding -> HomeScreen(modifier = Modifier.padding(innerPadding)) } } diff --git a/app/src/main/java/com/approagency/drug/presentation/common/primaryButton.kt b/app/src/main/java/com/approagency/drug/presentation/common/primaryButton.kt index a59f942..92bbb55 100644 --- a/app/src/main/java/com/approagency/drug/presentation/common/primaryButton.kt +++ b/app/src/main/java/com/approagency/drug/presentation/common/primaryButton.kt @@ -29,7 +29,8 @@ fun PrimaryButton( }, ) { if (isLoading == true) { - Loading() + Loading( + ) } else { Text(text) } diff --git a/app/src/main/java/com/approagency/drug/presentation/screens/HomeScreen.kt b/app/src/main/java/com/approagency/drug/presentation/screens/HomeScreen.kt index 8af5001..81a8533 100644 --- a/app/src/main/java/com/approagency/drug/presentation/screens/HomeScreen.kt +++ b/app/src/main/java/com/approagency/drug/presentation/screens/HomeScreen.kt @@ -5,8 +5,10 @@ import androidx.compose.foundation.border import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons @@ -30,10 +32,15 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp +import com.approagency.drug.data.dto.DrugDetail +import com.approagency.drug.data.dto.DrugListResponse import com.approagency.drug.domain.model.DrugSearchParams +import com.approagency.drug.presentation.common.CustomModalDialog +import com.approagency.drug.presentation.common.Loading import com.approagency.drug.presentation.common.PrimaryButton import com.approagency.drug.presentation.viewModel.DrugSearchState import com.approagency.drug.presentation.viewModel.HomeViewModel +import com.vada.caller.ui.theme.dime import org.koin.androidx.compose.koinViewModel @@ -44,6 +51,7 @@ fun HomeScreen( ) { val state by viewModel.uiState.collectAsState() HomeContent( + modifier = modifier, state = state, onSearch = { value -> viewModel.searchDrugs(DrugSearchParams(query = value)) }, onRetry = { @@ -93,10 +101,10 @@ fun HomeContent( } ) } + Spacer(modifier = Modifier.height(MaterialTheme.dime.xs)) PrimaryButton( text = "جستجو", - height = 40, - + height = 45, isLoading = state.isLoading, onClick = { if (search.isNotBlank()) { @@ -104,6 +112,87 @@ fun HomeContent( } } ) + + when { + state.isLoading ->{ + CustomModalDialog( + onDismissRequest = { + + }, + content = { + Column { + Loading() + Text("در حال جستجو...") + } + } + ) + } + state.drugsData != null ->{ + DrugListContent( + drugsData = state.drugsData, + onDrugClick = onDrugClick + ) + }else -> { + EmptyStateContent() + } + } } } +} + + +@Composable +fun DrugListContent( + drugsData: Result?, + onDrugClick: (String) -> Unit +) { + val drugs = drugsData?.getOrNull()?.data ?: emptyList() + + if (drugs.isEmpty()) { + Text( + text = "نتیجه‌ای یافت نشد", + modifier = Modifier.padding(16.dp) + ) + } else { + // Display drug list + Column { + drugs.forEach { drug -> + DrugItem( + drug = drug, + onClick = { onDrugClick(drug.cod.toString()) } + ) + } + } + } +} + +@Composable +fun DrugItem( + drug: DrugDetail, // Adjust this based on your actual data class + onClick: () -> Unit +) { +Row() { + Text(drug.nam_fa.toString()) +} +// Button( +// onClick = onClick, +// modifier = Modifier +// .fillMaxWidth() +// .padding(vertical = 4.dp) +// ) { +// drug.nam_fa?.let { Text(text = it) } // Adjust based on your drug model +// } +} + +@Composable +fun EmptyStateContent() { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = androidx.compose.ui.Alignment.CenterHorizontally + ) { + Text( + text = "برای جستجو، نام دارو را وارد کنید", + modifier = Modifier.padding(32.dp) + ) + } } \ No newline at end of file