From 2c296a2cb3a4333c51caf49ad85388a40777cbf2 Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Tue, 27 Jan 2026 04:27:11 +0530 Subject: [PATCH] Move amenities management to home menu --- .../com/android/trisolarispms/MainActivity.kt | 5 ++- .../trisolarispms/ui/home/HomeScreen.kt | 10 ++++++ .../ui/roomtype/AmenitiesScreen.kt | 31 ++++++++++++++----- .../ui/roomtype/AmenityListViewModel.kt | 24 ++++++++++++++ .../ui/roomtype/RoomTypesScreen.kt | 5 --- 5 files changed, 61 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/android/trisolarispms/MainActivity.kt b/app/src/main/java/com/android/trisolarispms/MainActivity.kt index 248b18c..9faba05 100644 --- a/app/src/main/java/com/android/trisolarispms/MainActivity.kt +++ b/app/src/main/java/com/android/trisolarispms/MainActivity.kt @@ -63,6 +63,9 @@ class MainActivity : ComponentActivity() { userName = state.userName, isSuperAdmin = state.isSuperAdmin, onAddProperty = { route.value = AppRoute.AddProperty }, + onAmenities = { + selectedPropertyId.value?.let { route.value = AppRoute.Amenities(it) } + }, refreshKey = refreshKey.value, selectedPropertyId = selectedPropertyId.value, onSelectProperty = { id, name -> @@ -109,7 +112,6 @@ class MainActivity : ComponentActivity() { propertyId = currentRoute.propertyId, onBack = { route.value = AppRoute.Rooms(currentRoute.propertyId) }, onAdd = { route.value = AppRoute.AddRoomType(currentRoute.propertyId) }, - onAmenities = { route.value = AppRoute.Amenities(currentRoute.propertyId) }, canManageRoomTypes = canManageProperty(currentRoute.propertyId), onEdit = { selectedRoomType.value = it @@ -132,6 +134,7 @@ class MainActivity : ComponentActivity() { propertyId = currentRoute.propertyId, onBack = { route.value = AppRoute.RoomTypes(currentRoute.propertyId) }, onAdd = { route.value = AppRoute.AddAmenity(currentRoute.propertyId) }, + canManageAmenities = state.isSuperAdmin, onEdit = { selectedAmenity.value = it route.value = AppRoute.EditAmenity(currentRoute.propertyId, it.id ?: "") diff --git a/app/src/main/java/com/android/trisolarispms/ui/home/HomeScreen.kt b/app/src/main/java/com/android/trisolarispms/ui/home/HomeScreen.kt index b87c046..2577f29 100644 --- a/app/src/main/java/com/android/trisolarispms/ui/home/HomeScreen.kt +++ b/app/src/main/java/com/android/trisolarispms/ui/home/HomeScreen.kt @@ -40,6 +40,7 @@ fun HomeScreen( userName: String?, isSuperAdmin: Boolean, onAddProperty: () -> Unit, + onAmenities: () -> Unit, refreshKey: Int, selectedPropertyId: String?, onSelectProperty: (String, String) -> Unit, @@ -77,6 +78,15 @@ fun HomeScreen( onAddProperty() } ) + if (isSuperAdmin && selectedPropertyId != null) { + DropdownMenuItem( + text = { Text("Modify Amenities") }, + onClick = { + menuExpanded = false + onAmenities() + } + ) + } } } ) diff --git a/app/src/main/java/com/android/trisolarispms/ui/roomtype/AmenitiesScreen.kt b/app/src/main/java/com/android/trisolarispms/ui/roomtype/AmenitiesScreen.kt index 2c585f3..3eddabf 100644 --- a/app/src/main/java/com/android/trisolarispms/ui/roomtype/AmenitiesScreen.kt +++ b/app/src/main/java/com/android/trisolarispms/ui/roomtype/AmenitiesScreen.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.filled.Delete import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon @@ -35,6 +36,7 @@ fun AmenitiesScreen( propertyId: String, onBack: () -> Unit, onAdd: () -> Unit, + canManageAmenities: Boolean, onEdit: (AmenityDto) -> Unit, viewModel: AmenityListViewModel = viewModel() ) { @@ -54,8 +56,10 @@ fun AmenitiesScreen( } }, actions = { - IconButton(onClick = onAdd) { - Icon(Icons.Default.Add, contentDescription = "Add Amenity") + if (canManageAmenities) { + IconButton(onClick = onAdd) { + Icon(Icons.Default.Add, contentDescription = "Add Amenity") + } } }, colors = TopAppBarDefaults.topAppBarColors() @@ -82,14 +86,25 @@ fun AmenitiesScreen( Text(text = "No amenities") } else { state.items.forEach { item -> - Text( - text = item.name ?: "", - style = MaterialTheme.typography.titleMedium, + androidx.compose.foundation.layout.Row( modifier = Modifier .fillMaxWidth() - .clickable(enabled = item.id != null) { onEdit(item) } - .padding(vertical = 8.dp) - ) + .padding(vertical = 8.dp), + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = item.name ?: "", + style = MaterialTheme.typography.titleMedium, + modifier = Modifier + .weight(1f) + .clickable(enabled = canManageAmenities && item.id != null) { onEdit(item) } + ) + if (canManageAmenities && item.id != null) { + IconButton(onClick = { viewModel.deleteAmenity(propertyId, item.id) }) { + Icon(Icons.Default.Delete, contentDescription = "Delete Amenity") + } + } + } } } } diff --git a/app/src/main/java/com/android/trisolarispms/ui/roomtype/AmenityListViewModel.kt b/app/src/main/java/com/android/trisolarispms/ui/roomtype/AmenityListViewModel.kt index 11b7fec..86bc82c 100644 --- a/app/src/main/java/com/android/trisolarispms/ui/roomtype/AmenityListViewModel.kt +++ b/app/src/main/java/com/android/trisolarispms/ui/roomtype/AmenityListViewModel.kt @@ -35,4 +35,28 @@ class AmenityListViewModel : ViewModel() { } } } + + fun deleteAmenity(propertyId: String, amenityId: String) { + if (propertyId.isBlank() || amenityId.isBlank()) return + viewModelScope.launch { + _state.update { it.copy(isLoading = true, error = null) } + try { + val api = ApiClient.create() + val response = api.deleteAmenity(propertyId, amenityId) + if (response.isSuccessful) { + _state.update { current -> + current.copy( + isLoading = false, + items = current.items.filterNot { it.id == amenityId }, + error = null + ) + } + } else { + _state.update { it.copy(isLoading = false, error = "Delete failed: ${response.code()}") } + } + } catch (e: Exception) { + _state.update { it.copy(isLoading = false, error = e.localizedMessage ?: "Delete failed") } + } + } + } } diff --git a/app/src/main/java/com/android/trisolarispms/ui/roomtype/RoomTypesScreen.kt b/app/src/main/java/com/android/trisolarispms/ui/roomtype/RoomTypesScreen.kt index fec1ca3..b247b14 100644 --- a/app/src/main/java/com/android/trisolarispms/ui/roomtype/RoomTypesScreen.kt +++ b/app/src/main/java/com/android/trisolarispms/ui/roomtype/RoomTypesScreen.kt @@ -27,7 +27,6 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel -import androidx.compose.material.icons.filled.Settings @Composable @OptIn(ExperimentalMaterial3Api::class) @@ -35,7 +34,6 @@ fun RoomTypesScreen( propertyId: String, onBack: () -> Unit, onAdd: () -> Unit, - onAmenities: () -> Unit, canManageRoomTypes: Boolean, onEdit: (com.android.trisolarispms.data.api.model.RoomTypeDto) -> Unit, viewModel: RoomTypeListViewModel = viewModel() @@ -57,9 +55,6 @@ fun RoomTypesScreen( }, actions = { if (canManageRoomTypes) { - IconButton(onClick = onAmenities) { - Icon(Icons.Default.Settings, contentDescription = "Amenities") - } IconButton(onClick = onAdd) { Icon(Icons.Default.Add, contentDescription = "Add Room Type") }