Skip to content

Commit

Permalink
improve code
Browse files Browse the repository at this point in the history
  • Loading branch information
jan-tennert committed Mar 30, 2024
1 parent ec674b4 commit 15de962
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 92 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ object RecipeCreateScreen: AppStateScreen<RecipeCreateScreenModel> {
imageData = screenModel.imageData.value,
private = false
)
pNavigator.pop()
}
},
) {
Expand Down Expand Up @@ -84,25 +83,31 @@ object RecipeCreateScreen: AppStateScreen<RecipeCreateScreenModel> {
LoadingDialog()
}
is RecipeCreateScreenModel.State.Success -> {
AlertDialog(
onDismissRequest = {
pNavigator.pop()
},
title = { Text(Res.string.recipe_created) },
text = { Text(Res.string.recipe_created_message) },
confirmButton = {
TextButton(
onClick = {
pNavigator.pop()
}
) {
Text("Ok")
}
}
)
RecipeCreatedDialog {
screenModel.resetState()
pNavigator.pop()
}
}
}

}

@Composable
private fun RecipeCreatedDialog(
onClose: () -> Unit
) {
AlertDialog(
onDismissRequest = onClose,
title = { Text(Res.string.recipe_created) },
text = { Text(Res.string.recipe_created_message) },
confirmButton = {
TextButton(
onClick = onClose
) {
Text("Ok")
}
}
)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ class RecipeCreateScreenModel(
recipeApi.createRecipe(name, auth.currentUserOrNull()?.id ?: error("No user found"), imagePath, ingredients, steps, private)
}.onSuccess {
recipeDataSource.insertRecipe(it)
resetContent()
mutableState.value = State.Success
}.onFailure {
it.printStackTrace()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package io.github.jan.einkaufszettel.recipes.ui.create.components

import androidx.compose.foundation.layout.Column
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.layout.width
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Search
import androidx.compose.material3.DockedSearchBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import cafe.adriel.voyager.navigator.Navigator
import io.github.jan.einkaufszettel.Res
import io.github.jan.einkaufszettel.collectAsStateWithLifecycle
import io.github.jan.einkaufszettel.recipes.ui.components.RecipeCard
import io.github.jan.einkaufszettel.recipes.ui.components.RecipeCardDefaults
import io.github.jan.einkaufszettel.recipes.ui.detail.RecipeDetailScreen
import io.github.jan.einkaufszettel.recipes.ui.main.RecipeScreen
import io.github.jan.einkaufszettel.recipes.ui.main.RecipeScreenModel

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun RecipeList(
screenModel: RecipeScreenModel,
navigator: Navigator
) {
val recipes by screenModel.recipeFlow.collectAsStateWithLifecycle()
val searchQuery by screenModel.searchQuery.collectAsStateWithLifecycle()
val filteredRecipes by derivedStateOf {
recipes.filter { it.name.contains(searchQuery, ignoreCase = true) }
}
val userId by screenModel.userIdFlow.collectAsStateWithLifecycle()
val showDeleteDialog by screenModel.showDeleteDialog.collectAsStateWithLifecycle()
Column(
modifier = Modifier.fillMaxSize()
) {
DockedSearchBar(
active = false,
onActiveChange = { },
onSearch = { },
query = searchQuery,
onQueryChange = screenModel::onSearchQueryChanged,
leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
placeholder = { Text(Res.string.search) },
modifier = Modifier.fillMaxWidth()
) { }
LazyVerticalGrid(
columns = GridCells.Adaptive(RecipeCardDefaults.WIDTH),
modifier = Modifier.weight(1f)
) {
items(filteredRecipes, { it.id }) {
RecipeCard(
recipe = it,
isOwner = it.creatorId == userId,
modifier = Modifier.width(RecipeCardDefaults.WIDTH).height(
RecipeCardDefaults.HEIGHT).padding(RecipeCardDefaults.PADDING),
onClick = {
navigator.push(RecipeDetailScreen(it.id))
},
onDelete = {
screenModel.onShowDeleteDialogChanged(it)
}
)
}
}
}

if(showDeleteDialog != null) {
RecipeScreen.DeleteDialog(
onDismiss = { screenModel.onShowDeleteDialogChanged(null) },
onDelete = {
screenModel.deleteRecipe(showDeleteDialog!!.id, showDeleteDialog?.imagePath)
}
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,16 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
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.layout.width
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Search
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.DockedSearchBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import cafe.adriel.voyager.koin.getScreenModel
import cafe.adriel.voyager.navigator.CurrentScreen
Expand All @@ -38,10 +24,8 @@ import io.github.jan.einkaufszettel.app.ui.AppState
import io.github.jan.einkaufszettel.app.ui.AppStateScreen
import io.github.jan.einkaufszettel.app.ui.components.CreateButton
import io.github.jan.einkaufszettel.app.ui.pullrefresh.RefreshScope
import io.github.jan.einkaufszettel.collectAsStateWithLifecycle
import io.github.jan.einkaufszettel.recipes.ui.components.RecipeCard
import io.github.jan.einkaufszettel.recipes.ui.components.RecipeCardDefaults
import io.github.jan.einkaufszettel.recipes.ui.create.RecipeCreateScreen
import io.github.jan.einkaufszettel.recipes.ui.create.components.RecipeList
import io.github.jan.einkaufszettel.recipes.ui.detail.RecipeDetailScreen
import io.github.jan.einkaufszettel.root.ui.dialog.LoadingDialog
import io.github.jan.einkaufszettel.shops.ui.components.VerticalDivider
Expand Down Expand Up @@ -120,65 +104,8 @@ object RecipeScreen : AppStateScreen<RecipeScreenModel> {
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun RecipeList(
screenModel: RecipeScreenModel,
navigator: Navigator
) {
val recipes by screenModel.recipeFlow.collectAsStateWithLifecycle()
val searchQuery by screenModel.searchQuery.collectAsStateWithLifecycle()
val filteredRecipes by derivedStateOf {
recipes.filter { it.name.contains(searchQuery, ignoreCase = true) }
}
val userId by screenModel.userIdFlow.collectAsStateWithLifecycle()
val showDeleteDialog by screenModel.showDeleteDialog.collectAsStateWithLifecycle()
Column(
modifier = Modifier.fillMaxSize()
) {
DockedSearchBar(
active = false,
onActiveChange = { },
onSearch = { },
query = searchQuery,
onQueryChange = screenModel::onSearchQueryChanged,
leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
placeholder = { Text(Res.string.search) },
modifier = Modifier.fillMaxWidth()
) { }
LazyVerticalGrid(
columns = GridCells.Adaptive(RecipeCardDefaults.WIDTH),
modifier = Modifier.weight(1f)
) {
items(filteredRecipes, { it.id }) {
RecipeCard(
recipe = it,
isOwner = it.creatorId == userId,
modifier = Modifier.width(RecipeCardDefaults.WIDTH).height(
RecipeCardDefaults.HEIGHT).padding(RecipeCardDefaults.PADDING),
onClick = {
navigator.push(RecipeDetailScreen(it.id))
},
onDelete = {
screenModel.onShowDeleteDialogChanged(it)
}
)
}
}
}

if(showDeleteDialog != null) {
DeleteDialog(
onDismiss = { screenModel.onShowDeleteDialogChanged(null) },
onDelete = {
screenModel.deleteRecipe(showDeleteDialog!!.id, showDeleteDialog?.imagePath)
}
)
}
}

@Composable
private fun DeleteDialog(
fun DeleteDialog(
onDismiss: () -> Unit,
onDelete: () -> Unit
) {
Expand Down

0 comments on commit 15de962

Please sign in to comment.