forked from melod1n/fast-messenger
domain module
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
plugins {
|
||||
alias(libs.plugins.fast.android.library)
|
||||
alias(libs.plugins.fast.android.library.compose)
|
||||
alias(libs.plugins.kotlin.serialization)
|
||||
}
|
||||
|
||||
android {
|
||||
@@ -8,7 +9,7 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.core.common)
|
||||
api(projects.core.common)
|
||||
api(projects.core.model)
|
||||
|
||||
implementation(libs.haze)
|
||||
@@ -17,5 +18,9 @@ dependencies {
|
||||
implementation(platform(libs.compose.bom))
|
||||
implementation(libs.bundles.compose)
|
||||
|
||||
implementation(libs.androidx.navigation.compose)
|
||||
implementation(libs.kotlin.serialization)
|
||||
implementation(libs.koin.androidx.compose.navigation)
|
||||
|
||||
debugImplementation(libs.compose.ui.tooling)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package dev.meloda.fast.ui.extensions
|
||||
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import androidx.core.os.BundleCompat
|
||||
import androidx.navigation.NavType
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
inline fun <reified T : Parcelable> customNavType(
|
||||
isNullableAllowed: Boolean = false,
|
||||
json: Json = Json
|
||||
) = object : NavType<T>(isNullableAllowed = isNullableAllowed) {
|
||||
override fun get(bundle: Bundle, key: String) =
|
||||
BundleCompat.getParcelable(bundle, key, T::class.java)
|
||||
|
||||
override fun parseValue(value: String): T = json.decodeFromString(value)
|
||||
|
||||
override fun serializeAsValue(value: T): String = json.encodeToString(value)
|
||||
|
||||
override fun put(bundle: Bundle, key: String, value: T) = bundle.putParcelable(key, value)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package dev.meloda.fast.ui.extensions
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.navigation.NavBackStackEntry
|
||||
import androidx.navigation.NavController
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
import org.koin.androidx.compose.navigation.koinNavViewModel
|
||||
|
||||
@Composable
|
||||
inline fun <reified T : ViewModel> NavBackStackEntry.sharedViewModel(navController: NavController): T {
|
||||
val navGraphRoute = destination.parent?.route ?: return koinViewModel()
|
||||
val parentEntry = remember(this) {
|
||||
navController.getBackStackEntry(navGraphRoute)
|
||||
}
|
||||
return koinNavViewModel(viewModelStoreOwner = parentEntry)
|
||||
}
|
||||
Reference in New Issue
Block a user