di and pagination
This commit is contained in:
parent
4b7e5338ef
commit
2aa2e5bc60
@ -83,4 +83,8 @@ dependencies {
|
||||
kapt("androidx.room:room-compiler:$room_version")
|
||||
implementation("androidx.room:room-ktx:$room_version")
|
||||
implementation("androidx.room:room-paging:$room_version")
|
||||
|
||||
//Paging
|
||||
implementation ("androidx.paging:paging-compose:3.2.1")
|
||||
implementation ("androidx.paging:paging-runtime:3.2.1")
|
||||
}
|
@ -7,13 +7,13 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class App : Application() {
|
||||
val database by lazy { AppDatabase.getInstance(this)}
|
||||
|
||||
lateinit var container: AppContainer
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
//this.deleteDatabase("my-db")
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
AppDatabase.populateDatabase()
|
||||
}
|
||||
//CoroutineScope(Dispatchers.IO).launch {
|
||||
// AppDatabase.populateDatabase()
|
||||
//}
|
||||
container = AppDataContainer(this)
|
||||
}
|
||||
}
|
11
app/src/main/java/com/example/androidlabs/AppContainer.kt
Normal file
11
app/src/main/java/com/example/androidlabs/AppContainer.kt
Normal file
@ -0,0 +1,11 @@
|
||||
package com.example.androidlabs
|
||||
|
||||
import com.example.androidlabs.DB.repository.HotelRepository
|
||||
import com.example.androidlabs.DB.repository.OrderRepository
|
||||
import com.example.androidlabs.DB.repository.UserRepository
|
||||
|
||||
interface AppContainer {
|
||||
val hotelRepo: HotelRepository
|
||||
val userRepo: UserRepository
|
||||
val orderRepo: OrderRepository
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.example.androidlabs
|
||||
|
||||
import android.content.Context
|
||||
import com.example.androidlabs.DB.AppDatabase
|
||||
import com.example.androidlabs.DB.repository.HotelRepImpl
|
||||
import com.example.androidlabs.DB.repository.HotelRepository
|
||||
import com.example.androidlabs.DB.repository.OrderRepImpl
|
||||
import com.example.androidlabs.DB.repository.OrderRepository
|
||||
import com.example.androidlabs.DB.repository.UserRepImpl
|
||||
import com.example.androidlabs.DB.repository.UserRepository
|
||||
|
||||
class AppDataContainer(private val context: Context) : AppContainer {
|
||||
override val hotelRepo: HotelRepository by lazy {
|
||||
HotelRepImpl(AppDatabase.getInstance(context).hotelDao())
|
||||
}
|
||||
override val userRepo: UserRepository by lazy {
|
||||
UserRepImpl(AppDatabase.getInstance(context).userDao())
|
||||
}
|
||||
override val orderRepo: OrderRepository by lazy {
|
||||
OrderRepImpl(AppDatabase.getInstance(context).orderDao())
|
||||
}
|
||||
}
|
@ -33,9 +33,9 @@ abstract class AppDatabase : RoomDatabase() {
|
||||
INSTANCE?.let { database ->
|
||||
// User
|
||||
val userDao = database.userDao()
|
||||
val user1 = User(null, "Artem", "Emelyanov", "artem@mail.ru", "123", RoleEnum.Admin)
|
||||
val user1 = User(null, "Artem", "Emelyanov", "artem@mail.ru", "123", RoleEnum.User)
|
||||
val user2 = User(null, "Danil", "Markov", "danil@mail.ru", "123", RoleEnum.User)
|
||||
val user3 = User(null, "Viktoria", "Presnyakova", "vika@mail.ru", "123", RoleEnum.User)
|
||||
val user3 = User(null, "Viktoria", "Presnyakova", "vika@mail.ru", "123", RoleEnum.Admin)
|
||||
userDao.createUser(user1)
|
||||
userDao.createUser(user2)
|
||||
userDao.createUser(user3)
|
||||
|
@ -1,4 +1,5 @@
|
||||
package com.example.androidlabs.DB.dao
|
||||
import androidx.paging.PagingSource
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
@ -19,7 +20,7 @@ interface HotelDao {
|
||||
suspend fun delete(hotel: Hotel)
|
||||
|
||||
@Query("SELECT*FROM Hotel")
|
||||
fun getAllHotelss(): Flow<List<Hotel>>
|
||||
fun getAllHotelsPaged(): PagingSource<Int, Hotel>
|
||||
|
||||
@Query("SELECT * FROM Hotel WHERE hotelId = :id")
|
||||
suspend fun getHotelById(id: Int): Hotel
|
||||
|
@ -5,6 +5,7 @@ import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.Query
|
||||
import com.example.androidlabs.DB.models.Order
|
||||
import com.example.androidlabs.DB.models.UserWithOrder
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
@ -21,4 +22,7 @@ interface OrderDao {
|
||||
|
||||
@Delete
|
||||
suspend fun delete(order: Order)
|
||||
|
||||
@Query("SELECT * FROM users WHERE userId =:id")
|
||||
fun getUserOrders(id: Int) : Flow<UserWithOrder>
|
||||
}
|
@ -26,6 +26,4 @@ interface UserDao {
|
||||
@Query("SELECT * FROM users WHERE email = :email")
|
||||
suspend fun getUserByEmail(email: String): User
|
||||
|
||||
@Query("SELECT * FROM users WHERE userId =:id")
|
||||
fun getUserOrders(id: Int) : Flow<UserWithOrder>
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.example.androidlabs.DB.repository
|
||||
|
||||
import androidx.paging.Pager
|
||||
import androidx.paging.PagingConfig
|
||||
import androidx.paging.PagingData
|
||||
import com.example.androidlabs.DB.dao.HotelDao
|
||||
import com.example.androidlabs.DB.models.Hotel
|
||||
import androidx.paging.PagingSource
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
|
||||
class HotelRepImpl (private val hotelDao: HotelDao) : HotelRepository {
|
||||
|
||||
override suspend fun insertHotel(hotel: Hotel) = hotelDao.insert(hotel)
|
||||
|
||||
override suspend fun updateHotel(hotel: Hotel) = hotelDao.update(hotel)
|
||||
|
||||
override suspend fun deleteHotel(hotel: Hotel) = hotelDao.delete(hotel)
|
||||
|
||||
override suspend fun getHotelById(id: Int): Hotel = hotelDao.getHotelById(id)
|
||||
override fun getAllHotelsPaged(): PagingSource<Int, Hotel> = hotelDao.getAllHotelsPaged()
|
||||
override fun call(): Flow<PagingData<Hotel>> {
|
||||
return Pager(
|
||||
PagingConfig(pageSize = 5)
|
||||
) {
|
||||
hotelDao.getAllHotelsPaged()
|
||||
}.flow
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.example.androidlabs.DB.repository
|
||||
|
||||
import androidx.paging.PagingSource
|
||||
import com.example.androidlabs.DB.models.Hotel
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import androidx.paging.PagingData
|
||||
interface HotelRepository {
|
||||
suspend fun insertHotel(hotel: Hotel)
|
||||
suspend fun updateHotel(hotel: Hotel)
|
||||
suspend fun deleteHotel(hotel: Hotel)
|
||||
suspend fun getHotelById(id: Int): Hotel
|
||||
fun getAllHotelsPaged(): PagingSource<Int, Hotel>
|
||||
fun call(): Flow<PagingData<Hotel>>
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.example.androidlabs.DB.repository
|
||||
|
||||
import com.example.androidlabs.DB.dao.OrderDao
|
||||
import com.example.androidlabs.DB.models.Order
|
||||
import com.example.androidlabs.DB.models.UserWithOrder
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
class OrderRepImpl (private val orderDao: OrderDao) : OrderRepository {
|
||||
|
||||
override suspend fun createOrder(order: Order): Long = orderDao.createOrder(order)
|
||||
|
||||
override suspend fun delete(order: Order) = orderDao.delete(order)
|
||||
|
||||
override fun getAllOrder(): Flow<List<Order>> = orderDao.getAllOrder()
|
||||
|
||||
override fun getUserOrders(id: Int): Flow<UserWithOrder> = orderDao.getUserOrders(id)
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.example.androidlabs.DB.repository
|
||||
|
||||
import com.example.androidlabs.DB.models.Order
|
||||
import com.example.androidlabs.DB.models.UserWithOrder
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface OrderRepository {
|
||||
suspend fun createOrder(order: Order): Long
|
||||
suspend fun delete(order: Order)
|
||||
fun getAllOrder(): Flow<List<Order>>
|
||||
fun getUserOrders(id: Int) : Flow<UserWithOrder>
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.example.androidlabs.DB.repository
|
||||
|
||||
import com.example.androidlabs.DB.dao.UserDao
|
||||
import com.example.androidlabs.DB.models.User
|
||||
|
||||
class UserRepImpl(private val userDao: UserDao) : UserRepository {
|
||||
|
||||
override suspend fun createUser(user: User) = userDao.createUser(user)
|
||||
|
||||
override suspend fun updateUser(user: User) = userDao.updateUser(user)
|
||||
|
||||
override suspend fun deleteUser(user: User) = userDao.deleteUser(user)
|
||||
|
||||
override suspend fun getUserById(id: Int): User = userDao.getUserById(id)
|
||||
|
||||
override suspend fun getUserByEmail(email: String): User = userDao.getUserByEmail(email)
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.example.androidlabs.DB.repository
|
||||
|
||||
import com.example.androidlabs.DB.models.User
|
||||
|
||||
interface UserRepository {
|
||||
suspend fun createUser(user: User)
|
||||
suspend fun updateUser(user: User)
|
||||
suspend fun deleteUser(user: User)
|
||||
suspend fun getUserById(id: Int): User
|
||||
suspend fun getUserByEmail(email: String): User
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.example.androidlabs.DB.viewModels
|
||||
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewmodel.CreationExtras
|
||||
import androidx.lifecycle.viewmodel.initializer
|
||||
import androidx.lifecycle.viewmodel.viewModelFactory
|
||||
import com.example.androidlabs.App
|
||||
|
||||
object AppViewModelProvider {
|
||||
val Factory = viewModelFactory {
|
||||
initializer {
|
||||
HotelViewModel(app().container.hotelRepo)
|
||||
}
|
||||
initializer {
|
||||
UserViewModel(app().container.userRepo)
|
||||
}
|
||||
initializer {
|
||||
OrderViewModel(app().container.orderRepo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun CreationExtras.app(): App =
|
||||
(this[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] as App)
|
@ -6,21 +6,23 @@ import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.Companion.APPLICATION_KEY
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.lifecycle.viewmodel.CreationExtras
|
||||
import androidx.paging.cachedIn
|
||||
import com.example.androidlabs.App
|
||||
import com.example.androidlabs.DB.AppDatabase
|
||||
import com.example.androidlabs.DB.models.Hotel
|
||||
import com.example.androidlabs.DB.repository.HotelRepository
|
||||
import com.example.androidlabs.R
|
||||
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class HotelViewModel(val database: AppDatabase): ViewModel() {
|
||||
class HotelViewModel(private val hotelRepository: HotelRepository): ViewModel() {
|
||||
var name = mutableStateOf("")
|
||||
val price = mutableStateOf("")
|
||||
val location = mutableStateOf("")
|
||||
val stars = mutableStateOf("")
|
||||
val info = mutableStateOf("")
|
||||
val img = mutableStateOf(R.drawable.img)
|
||||
val HotelList = database.hotelDao().getAllHotelss()
|
||||
val HotelList = hotelRepository.call().cachedIn(viewModelScope)
|
||||
var hotel: Hotel? = null
|
||||
|
||||
fun insertHotel() = viewModelScope.launch {
|
||||
@ -32,29 +34,18 @@ class HotelViewModel(val database: AppDatabase): ViewModel() {
|
||||
stars = stars.value.toInt(),
|
||||
info = info.value
|
||||
)
|
||||
database.hotelDao().insert(hotel)
|
||||
hotelRepository.insertHotel(hotel)
|
||||
}
|
||||
|
||||
fun deleteHotel(hotel : Hotel) = viewModelScope.launch {
|
||||
database.hotelDao().delete(hotel)
|
||||
hotelRepository.deleteHotel(hotel)
|
||||
}
|
||||
|
||||
fun getHotelById(id: Int) = viewModelScope.launch {
|
||||
database.hotelDao().getHotelById(id)
|
||||
hotelRepository.getHotelById(id)
|
||||
}
|
||||
|
||||
fun UpdateHotel(hotel: Hotel) = viewModelScope.launch {
|
||||
database.hotelDao().update(hotel)
|
||||
}
|
||||
|
||||
companion object{
|
||||
val factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory{
|
||||
override fun <T : ViewModel> create(
|
||||
modelClass: Class<T>,
|
||||
extras: CreationExtras): T {
|
||||
val database = (checkNotNull(extras[APPLICATION_KEY]) as App).database
|
||||
return HotelViewModel(database) as T
|
||||
}
|
||||
}
|
||||
hotelRepository.updateHotel(hotel)
|
||||
}
|
||||
}
|
@ -10,22 +10,25 @@ import com.example.androidlabs.App
|
||||
import com.example.androidlabs.DB.AppDatabase
|
||||
import com.example.androidlabs.DB.models.Hotel
|
||||
import com.example.androidlabs.DB.models.Order
|
||||
import com.example.androidlabs.DB.models.UserWithOrder
|
||||
import com.example.androidlabs.DB.repository.OrderRepository
|
||||
import com.example.androidlabs.GlobalUser
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.Date
|
||||
|
||||
class OrderViewModel(val database: AppDatabase) : ViewModel() {
|
||||
class OrderViewModel(private val orderRepository: OrderRepository) : ViewModel() {
|
||||
var selectedItem: Hotel? = null
|
||||
val rooms = mutableStateOf("")
|
||||
var dateFrom = mutableStateOf("")
|
||||
var dateTo = mutableStateOf("")
|
||||
|
||||
fun deleteOrder(order: Order) = viewModelScope.launch {
|
||||
database.orderDao().delete(order)
|
||||
orderRepository.delete(order)
|
||||
}
|
||||
|
||||
fun getOrderList(id: Int) = viewModelScope.launch {
|
||||
database.userDao().getUserOrders(id)
|
||||
fun getOrderList(id: Int) : Flow<UserWithOrder> {
|
||||
return orderRepository.getUserOrders(id)
|
||||
}
|
||||
|
||||
|
||||
@ -42,7 +45,7 @@ class OrderViewModel(val database: AppDatabase) : ViewModel() {
|
||||
hotel = selectedItem!!
|
||||
)
|
||||
|
||||
val orderId = database.orderDao().createOrder(order)
|
||||
val orderId = orderRepository.createOrder(order)
|
||||
|
||||
|
||||
rooms.value = ""
|
||||
@ -52,16 +55,4 @@ class OrderViewModel(val database: AppDatabase) : ViewModel() {
|
||||
fun getSubTotal(): Double {
|
||||
return selectedItem!!.price * rooms.value.toInt()
|
||||
}
|
||||
|
||||
companion object{
|
||||
val factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory{
|
||||
override fun <T : ViewModel> create(
|
||||
modelClass: Class<T>,
|
||||
extras: CreationExtras
|
||||
): T {
|
||||
val database = (checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) as App).database
|
||||
return OrderViewModel(database) as T
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,10 +10,11 @@ import com.example.androidlabs.App
|
||||
import com.example.androidlabs.DB.AppDatabase
|
||||
import com.example.androidlabs.DB.models.RoleEnum
|
||||
import com.example.androidlabs.DB.models.User
|
||||
import com.example.androidlabs.DB.repository.UserRepository
|
||||
import com.example.androidlabs.GlobalUser
|
||||
|
||||
import kotlinx.coroutines.launch
|
||||
class UserViewModel(val database: AppDatabase): ViewModel() {
|
||||
class UserViewModel(private val userRepository: UserRepository): ViewModel() {
|
||||
|
||||
var name = mutableStateOf("")
|
||||
val surname = mutableStateOf("")
|
||||
@ -27,10 +28,10 @@ class UserViewModel(val database: AppDatabase): ViewModel() {
|
||||
password = password.value,
|
||||
role = RoleEnum.User
|
||||
)
|
||||
database.userDao().createUser(user)
|
||||
userRepository.createUser(user)
|
||||
}
|
||||
fun authUser() = viewModelScope.launch {
|
||||
val user = database.userDao().getUserByEmail(email.value)
|
||||
val user = userRepository.getUserByEmail(email.value)
|
||||
if (password.value != "" && user.password == password.value) {
|
||||
val globalUser = GlobalUser.getInstance()
|
||||
globalUser.setUser(user)
|
||||
@ -43,15 +44,4 @@ class UserViewModel(val database: AppDatabase): ViewModel() {
|
||||
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()
|
||||
}
|
||||
|
||||
companion object{
|
||||
val factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory{
|
||||
override fun <T : ViewModel> create(
|
||||
modelClass: Class<T>,
|
||||
extras: CreationExtras
|
||||
): T {
|
||||
val database = (checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) as App).database
|
||||
return UserViewModel(database) as T
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
package com.example.androidlabs
|
||||
|
||||
|
||||
data class Hotel(
|
||||
val name: String,
|
||||
val img: Int,
|
||||
val stars: Int,
|
||||
val location: String,
|
||||
val info: String,
|
||||
val price: Int,
|
||||
)
|
@ -22,9 +22,9 @@ import androidx.compose.runtime.getValue
|
||||
|
||||
@Composable
|
||||
fun MyOrderScreen(orderViewModel: OrderViewModel) {
|
||||
val userWithOrder by orderViewModel.database.userDao().getUserOrders(GlobalUser.getInstance().getUser()?.userId!!).collectAsState(null)
|
||||
|
||||
val orderList: List<Order>? = userWithOrder?.orders
|
||||
// val userWithOrder by orderViewModel.database.userDao().getUserOrders(GlobalUser.getInstance().getUser()?.userId!!).collectAsState(null)
|
||||
val userId = GlobalUser.getInstance().getUser()?.userId
|
||||
val userWithOrder = orderViewModel.getOrderList(userId!!).collectAsState(null).value?.orders
|
||||
println()
|
||||
Column(
|
||||
modifier = Modifier
|
||||
@ -46,8 +46,8 @@ fun MyOrderScreen(orderViewModel: OrderViewModel) {
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
) {
|
||||
if (orderList != null) {
|
||||
for (item in orderList) {
|
||||
if (userWithOrder != null) {
|
||||
for (item in userWithOrder) {
|
||||
OrderCard(item, orderViewModel)
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import com.example.androidlabs.DB.models.Hotel
|
||||
import com.example.androidlabs.DB.viewModels.AppViewModelProvider
|
||||
import com.example.androidlabs.DB.viewModels.OrderViewModel
|
||||
import com.example.androidlabs.MyOrderScreen.MyOrderScreen
|
||||
import com.example.androidlabs.booking.BookingScreen
|
||||
@ -23,7 +24,7 @@ import com.google.gson.Gson
|
||||
|
||||
@Composable
|
||||
fun NavController(navController: NavHostController) {
|
||||
var orderViewModel: OrderViewModel = viewModel(factory = OrderViewModel.factory)
|
||||
var orderViewModel: OrderViewModel = viewModel(factory = AppViewModelProvider.Factory)
|
||||
NavHost(
|
||||
navController = navController,
|
||||
startDestination = NavItem.Home.route
|
||||
|
@ -43,12 +43,13 @@ import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import com.example.androidlabs.DB.models.PhotoManager
|
||||
import com.example.androidlabs.DB.viewModels.AppViewModelProvider
|
||||
import com.example.androidlabs.DB.viewModels.HotelViewModel
|
||||
import com.example.androidlabs.R
|
||||
|
||||
|
||||
@Composable
|
||||
fun AddPanel(navHostController: NavHostController, hotelViewModel: HotelViewModel = viewModel(factory = HotelViewModel.factory)){
|
||||
fun AddPanel(navHostController: NavHostController, hotelViewModel: HotelViewModel = viewModel(factory = AppViewModelProvider.Factory)){
|
||||
val photoManager = PhotoManager()
|
||||
Row(
|
||||
modifier = Modifier
|
||||
|
@ -31,13 +31,14 @@ import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.example.androidlabs.DB.models.Hotel
|
||||
import com.example.androidlabs.DB.viewModels.AppViewModelProvider
|
||||
import com.example.androidlabs.DB.viewModels.HotelViewModel
|
||||
import com.example.androidlabs.R
|
||||
import com.google.gson.Gson
|
||||
|
||||
|
||||
@Composable
|
||||
fun CardHotelForChange(item: Hotel, navController: NavHostController, hotelViewModel: HotelViewModel = viewModel(factory = HotelViewModel.factory)) {
|
||||
fun CardHotelForChange(item: Hotel, navController: NavHostController, hotelViewModel: HotelViewModel = viewModel(factory = AppViewModelProvider.Factory)) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
@ -39,10 +39,11 @@ import com.example.androidlabs.DB.models.Hotel
|
||||
import com.example.androidlabs.DB.viewModels.HotelViewModel
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.androidlabs.DB.models.PhotoManager
|
||||
import com.example.androidlabs.DB.viewModels.AppViewModelProvider
|
||||
import com.example.androidlabs.R
|
||||
|
||||
@Composable
|
||||
fun ChangeHotel(hotel: Hotel, onBackClick: () -> Unit, hotelViewModel: HotelViewModel = viewModel(factory = HotelViewModel.factory)) {
|
||||
fun ChangeHotel(hotel: Hotel, onBackClick: () -> Unit, hotelViewModel: HotelViewModel = viewModel(factory = AppViewModelProvider.Factory)) {
|
||||
val name = remember { mutableStateOf(hotel.name) }
|
||||
val price = remember{ mutableStateOf(hotel.price.toString()) }
|
||||
val stars = remember{ mutableStateOf(hotel.stars.toString()) }
|
||||
|
@ -14,14 +14,14 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import com.example.androidlabs.DB.viewModels.AppViewModelProvider
|
||||
import com.example.androidlabs.DB.viewModels.HotelViewModel
|
||||
import com.example.androidlabs.Hotel
|
||||
import com.example.androidlabs.R
|
||||
|
||||
|
||||
@Composable
|
||||
fun ChangePanel(navHostController: NavHostController, hotelViewModel: HotelViewModel = viewModel(factory = HotelViewModel.factory)){
|
||||
val list = hotelViewModel.HotelList.collectAsState(initial = emptyList()).value
|
||||
fun ChangePanel(navHostController: NavHostController, hotelViewModel: HotelViewModel = viewModel(factory = AppViewModelProvider.Factory)){
|
||||
val list = hotelViewModel.HotelList.collectAsLazyPagingItems()
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
@ -33,9 +33,10 @@ fun ChangePanel(navHostController: NavHostController, hotelViewModel: HotelViewM
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
) {
|
||||
itemsIndexed(list
|
||||
){_, item->
|
||||
CardHotelForChange(item = item, navHostController)
|
||||
items(list.itemCount) { index ->
|
||||
list[index]?.let { hotel ->
|
||||
CardHotelForChange(item = hotel, navHostController)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.example.androidlabs.homeScreen
|
||||
|
||||
import android.util.Log
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@ -8,7 +7,8 @@ import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.grid.GridCells
|
||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.Text
|
||||
@ -17,7 +17,6 @@ import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.colorResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
@ -26,17 +25,18 @@ import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.example.androidlabs.DB.AppDatabase
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
import androidx.paging.compose.itemKey
|
||||
import com.example.androidlabs.DB.models.Hotel
|
||||
import com.example.androidlabs.DB.viewModels.AppViewModelProvider
|
||||
import com.example.androidlabs.DB.viewModels.HotelViewModel
|
||||
import com.example.androidlabs.R
|
||||
import com.example.androidlabs.homeScreen.CardItem.HotelCard
|
||||
import com.example.androidlabs.Hotel
|
||||
import com.example.androidlabs.homeScreen.SearchField.SearchField
|
||||
import kotlinx.coroutines.flow.count
|
||||
|
||||
@Composable
|
||||
fun HomeScreen(navController: NavHostController, hotelViewModel: HotelViewModel = viewModel(factory = HotelViewModel.factory)) {
|
||||
val list = hotelViewModel.HotelList.collectAsState(initial = emptyList()).value
|
||||
fun HomeScreen(navController: NavHostController, hotelViewModel: HotelViewModel = viewModel(factory = AppViewModelProvider.Factory)) {
|
||||
val list = hotelViewModel.HotelList.collectAsLazyPagingItems()
|
||||
//Log.d("MyLog", list.toString())
|
||||
Column(
|
||||
modifier = Modifier
|
||||
@ -68,12 +68,22 @@ fun HomeScreen(navController: NavHostController, hotelViewModel: HotelViewModel
|
||||
}
|
||||
Column (
|
||||
modifier = Modifier
|
||||
.verticalScroll(rememberScrollState())
|
||||
//.verticalScroll(rememberScrollState())
|
||||
.padding(bottom = 60.dp)
|
||||
|
||||
){
|
||||
for (item in list){
|
||||
HotelCard(item, navController)
|
||||
LazyVerticalGrid(
|
||||
columns = GridCells.Fixed(1)
|
||||
) {
|
||||
items(
|
||||
count = list.itemCount,
|
||||
key = list.itemKey { hotel -> hotel.hotelId!! }
|
||||
) { index: Int ->
|
||||
val hotel: Hotel? = list[index]
|
||||
if (hotel != null) {
|
||||
HotelCard(hotel, navController)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,11 +40,12 @@ import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.example.androidlabs.DB.viewModels.AppViewModelProvider
|
||||
import com.example.androidlabs.DB.viewModels.UserViewModel
|
||||
import com.example.androidlabs.R
|
||||
|
||||
@Composable
|
||||
fun SignInCard(navController: NavHostController, userViewModel: UserViewModel = viewModel(factory = UserViewModel.factory)) {
|
||||
fun SignInCard(navController: NavHostController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory)) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
@ -37,12 +37,13 @@ import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.example.androidlabs.DB.viewModels.AppViewModelProvider
|
||||
import com.example.androidlabs.DB.viewModels.UserViewModel
|
||||
import com.example.androidlabs.R
|
||||
import com.example.androidlabs.profileScreen.signIn.LoginScreen
|
||||
|
||||
@Composable
|
||||
fun SignUpCard(navHostController: NavHostController, userViewModel: UserViewModel = viewModel(factory = UserViewModel.factory)) {
|
||||
fun SignUpCard(navHostController: NavHostController, userViewModel: UserViewModel = viewModel(factory = AppViewModelProvider.Factory)) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
Loading…
Reference in New Issue
Block a user