diff --git a/client/auth/data/impl/build.gradle.kts b/client/auth/data/impl/build.gradle.kts
index 1959f7d3..1d933d7d 100644
--- a/client/auth/data/impl/build.gradle.kts
+++ b/client/auth/data/impl/build.gradle.kts
@@ -9,6 +9,7 @@ kotlin {
implementation(libs.supabase.client)
implementation(libs.supabase.auth)
implementation(libs.supabase.postgrest)
+ implementation(libs.supabase.storage)
}
jvmMain.dependencies { implementation(libs.ktor.client.cio) }
androidMain.dependencies { implementation(libs.ktor.client.cio) }
diff --git a/client/auth/data/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/auth/data/impl/SupabaseModule.kt b/client/auth/data/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/auth/data/impl/SupabaseModule.kt
index 49eee842..d30a7676 100644
--- a/client/auth/data/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/auth/data/impl/SupabaseModule.kt
+++ b/client/auth/data/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/auth/data/impl/SupabaseModule.kt
@@ -11,6 +11,7 @@ import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.auth.Auth
import io.github.jan.supabase.createSupabaseClient
import io.github.jan.supabase.postgrest.Postgrest
+import io.github.jan.supabase.storage.Storage
@SingleIn(AppScope::class)
@ContributesTo(AppScope::class)
@@ -33,6 +34,7 @@ interface SupabaseModule {
return createSupabaseClient(supabaseUrl = url, supabaseKey = key) {
install(Auth)
install(Postgrest)
+ install(Storage)
}
}
}
diff --git a/client/recipe/core/impl/src/commonMain/composeResources/values/strings.xml b/client/recipe/core/impl/src/commonMain/composeResources/values/strings.xml
index e85c3f54..f9b59e27 100644
--- a/client/recipe/core/impl/src/commonMain/composeResources/values/strings.xml
+++ b/client/recipe/core/impl/src/commonMain/composeResources/values/strings.xml
@@ -1,4 +1,5 @@
Create Recipe
Edit Recipe
+ Failed to upload photo. Please try again.
\ No newline at end of file
diff --git a/client/recipe/core/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/recipe/core/impl/edit/EditRecipeBlocImpl.kt b/client/recipe/core/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/recipe/core/impl/edit/EditRecipeBlocImpl.kt
index 4bb6ffe7..652d4e83 100644
--- a/client/recipe/core/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/recipe/core/impl/edit/EditRecipeBlocImpl.kt
+++ b/client/recipe/core/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/recipe/core/impl/edit/EditRecipeBlocImpl.kt
@@ -3,6 +3,7 @@ package com.plusmobileapps.chefmate.recipe.core.impl.edit
import chefmate.client.recipe.core.impl.generated.resources.Res
import chefmate.client.recipe.core.impl.generated.resources.create_recipe
import chefmate.client.recipe.core.impl.generated.resources.edit_recipe
+import chefmate.client.recipe.core.impl.generated.resources.edit_recipe_upload_failed
import com.plusmobileapps.chefmate.BlocContext
import com.plusmobileapps.chefmate.Consumer
import com.plusmobileapps.chefmate.di.AppScope
@@ -50,6 +51,8 @@ class EditRecipeBlocImpl(
isLoading = it.isLoading,
isSaving = it.isSaving,
showDiscardChangesDialog = it.showDiscardChangesDialog,
+ uploadError =
+ it.uploadError?.let { ResourceString(Res.string.edit_recipe_upload_failed) },
)
}
override val title: StateFlow = viewModel.title
@@ -67,6 +70,7 @@ class EditRecipeBlocImpl(
override val categories: StateFlow> = viewModel.categories
override val availableUserCategories: StateFlow> =
viewModel.availableUserCategories
+ override val pendingPhotoBytes: StateFlow = viewModel.pendingPhotoBytes
init {
scope.launch {
@@ -172,6 +176,14 @@ class EditRecipeBlocImpl(
viewModel.save()
}
+ override fun onPhotoPicked(bytes: ByteArray, fileExtension: String) {
+ viewModel.setPendingPhoto(bytes = bytes, fileExtension = fileExtension)
+ }
+
+ override fun onUploadErrorDismissed() {
+ viewModel.dismissUploadError()
+ }
+
override fun onBackClicked() {
viewModel.tryToClose()
}
diff --git a/client/recipe/core/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/recipe/core/impl/edit/EditRecipeViewModel.kt b/client/recipe/core/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/recipe/core/impl/edit/EditRecipeViewModel.kt
index f7f2aa64..f12897d4 100644
--- a/client/recipe/core/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/recipe/core/impl/edit/EditRecipeViewModel.kt
+++ b/client/recipe/core/impl/src/commonMain/kotlin/com/plusmobileapps/chefmate/recipe/core/impl/edit/EditRecipeViewModel.kt
@@ -2,6 +2,7 @@
package com.plusmobileapps.chefmate.recipe.core.impl.edit
+import co.touchlab.kermit.Logger
import com.plusmobileapps.chefmate.ViewModel
import com.plusmobileapps.chefmate.di.Main
import com.plusmobileapps.chefmate.recipe.data.BuiltinCategory
@@ -9,6 +10,7 @@ import com.plusmobileapps.chefmate.recipe.data.Category
import com.plusmobileapps.chefmate.recipe.data.CategoryRepository
import com.plusmobileapps.chefmate.recipe.data.ExtractedRecipeData
import com.plusmobileapps.chefmate.recipe.data.Recipe
+import com.plusmobileapps.chefmate.recipe.data.RecipePhotoStorage
import com.plusmobileapps.chefmate.recipe.data.RecipeRepository
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory
@@ -35,6 +37,7 @@ class EditRecipeViewModel(
@Main mainContext: CoroutineContext,
private val repository: RecipeRepository,
private val categoryRepository: CategoryRepository,
+ private val photoStorage: RecipePhotoStorage,
) : ViewModel(mainContext) {
private val _output = Channel