Remove Route buildScreen member
This commit is contained in:
@@ -11,7 +11,15 @@ import com.vitorpamplona.amethyst.ui.dal.GlobalFeedFilter
|
|||||||
import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel
|
import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.screen.NostrGlobalFeedViewModel
|
import com.vitorpamplona.amethyst.ui.screen.NostrGlobalFeedViewModel
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChannelScreen
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChatroomListScreen
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChatroomScreen
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.FiltersScreen
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.HomeScreen
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.NotificationScreen
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ProfileScreen
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.SearchScreen
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.SearchScreen
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ThreadScreen
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AppNavigation(
|
fun AppNavigation(
|
||||||
@@ -38,10 +46,59 @@ fun AppNavigation(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
Routes.forEach {
|
Route.Home.let { route ->
|
||||||
it.buildScreen?.let { fn ->
|
composable(route.route, route.arguments, content = {
|
||||||
composable(it.route, it.arguments, content = fn(accountViewModel, accountStateViewModel, navController))
|
HomeScreen(
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
navController = navController,
|
||||||
|
scrollToTop = it.arguments?.getBoolean("scrollToTop") ?: false
|
||||||
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
composable(Route.Message.route, content = { ChatroomListScreen(accountViewModel, navController) })
|
||||||
|
composable(Route.Notification.route, content = { NotificationScreen(accountViewModel, navController) })
|
||||||
|
composable(Route.Filters.route, content = { FiltersScreen(accountViewModel, navController) })
|
||||||
|
|
||||||
|
Route.Profile.let { route ->
|
||||||
|
composable(route.route, route.arguments, content = {
|
||||||
|
ProfileScreen(
|
||||||
|
userId = it.arguments?.getString("id"),
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
navController = navController
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Route.Note.let { route ->
|
||||||
|
composable(route.route, route.arguments, content = {
|
||||||
|
ThreadScreen(
|
||||||
|
noteId = it.arguments?.getString("id"),
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
navController = navController
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Route.Room.let { route ->
|
||||||
|
composable(route.route, route.arguments, content = {
|
||||||
|
ChatroomScreen(
|
||||||
|
userId = it.arguments?.getString("id"),
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
navController = navController
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Route.Channel.let { route ->
|
||||||
|
composable(route.route, route.arguments, content = {
|
||||||
|
ChannelScreen(
|
||||||
|
channelId = it.arguments?.getString("id"),
|
||||||
|
accountViewModel = accountViewModel,
|
||||||
|
accountStateViewModel = accountStateViewModel,
|
||||||
|
navController = navController
|
||||||
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import android.content.Context
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.navigation.NamedNavArgument
|
import androidx.navigation.NamedNavArgument
|
||||||
import androidx.navigation.NavBackStackEntry
|
|
||||||
import androidx.navigation.NavController
|
|
||||||
import androidx.navigation.NavHostController
|
import androidx.navigation.NavHostController
|
||||||
import androidx.navigation.NavType
|
import androidx.navigation.NavType
|
||||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
@@ -16,35 +14,21 @@ import com.vitorpamplona.amethyst.model.Account
|
|||||||
import com.vitorpamplona.amethyst.ui.dal.ChatroomListKnownFeedFilter
|
import com.vitorpamplona.amethyst.ui.dal.ChatroomListKnownFeedFilter
|
||||||
import com.vitorpamplona.amethyst.ui.dal.HomeNewThreadFeedFilter
|
import com.vitorpamplona.amethyst.ui.dal.HomeNewThreadFeedFilter
|
||||||
import com.vitorpamplona.amethyst.ui.dal.NotificationFeedFilter
|
import com.vitorpamplona.amethyst.ui.dal.NotificationFeedFilter
|
||||||
import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChannelScreen
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChatroomListScreen
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ChatroomScreen
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.FiltersScreen
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.HomeScreen
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.NotificationScreen
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ProfileScreen
|
|
||||||
import com.vitorpamplona.amethyst.ui.screen.loggedIn.ThreadScreen
|
|
||||||
|
|
||||||
sealed class Route(
|
sealed class Route(
|
||||||
val route: String,
|
val route: String,
|
||||||
val icon: Int,
|
val icon: Int,
|
||||||
val hasNewItems: (Account, NotificationCache, Context) -> Boolean = { _, _, _ -> false },
|
val hasNewItems: (Account, NotificationCache, Context) -> Boolean = { _, _, _ -> false },
|
||||||
val arguments: List<NamedNavArgument> = emptyList(),
|
val arguments: List<NamedNavArgument> = emptyList()
|
||||||
val buildScreen: ((AccountViewModel, AccountStateViewModel, NavController) -> @Composable (NavBackStackEntry) -> Unit)? = null
|
|
||||||
) {
|
) {
|
||||||
val base: String
|
val base: String
|
||||||
get() = route.substringBefore("?")
|
get() = route.substringBefore("?")
|
||||||
|
|
||||||
object Home : Route(
|
object Home : Route(
|
||||||
"Home?scrollToTop={scrollToTop}",
|
route = "Home?scrollToTop={scrollToTop}",
|
||||||
R.drawable.ic_home,
|
icon = R.drawable.ic_home,
|
||||||
arguments = listOf(navArgument("scrollToTop") { type = NavType.BoolType; defaultValue = false }),
|
arguments = listOf(navArgument("scrollToTop") { type = NavType.BoolType; defaultValue = false }),
|
||||||
hasNewItems = { accountViewModel, cache, context -> homeHasNewItems(accountViewModel, cache, context) },
|
hasNewItems = { accountViewModel, cache, context -> homeHasNewItems(accountViewModel, cache, context) }
|
||||||
buildScreen = { accountViewModel, _, navController ->
|
|
||||||
{ HomeScreen(accountViewModel, navController, it.arguments?.getBoolean("scrollToTop", false) ?: false) }
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
object Search : Route(
|
object Search : Route(
|
||||||
@@ -58,9 +42,6 @@ sealed class Route(
|
|||||||
icon = R.drawable.ic_notifications,
|
icon = R.drawable.ic_notifications,
|
||||||
hasNewItems = { accountViewModel, cache, context ->
|
hasNewItems = { accountViewModel, cache, context ->
|
||||||
notificationHasNewItems(accountViewModel, cache, context)
|
notificationHasNewItems(accountViewModel, cache, context)
|
||||||
},
|
|
||||||
buildScreen = { accountViewModel, _, navController ->
|
|
||||||
{ NotificationScreen(accountViewModel, navController) }
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -69,78 +50,38 @@ sealed class Route(
|
|||||||
icon = R.drawable.ic_dm,
|
icon = R.drawable.ic_dm,
|
||||||
hasNewItems = { accountViewModel, cache, context ->
|
hasNewItems = { accountViewModel, cache, context ->
|
||||||
messagesHasNewItems(accountViewModel, cache, context)
|
messagesHasNewItems(accountViewModel, cache, context)
|
||||||
},
|
|
||||||
buildScreen = { accountViewModel, _, navController ->
|
|
||||||
{ ChatroomListScreen(accountViewModel, navController) }
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
object Filters : Route(
|
object Filters : Route(
|
||||||
route = "Filters",
|
route = "Filters",
|
||||||
icon = R.drawable.ic_security,
|
icon = R.drawable.ic_security
|
||||||
buildScreen = { accountViewModel, _, navController ->
|
|
||||||
{ FiltersScreen(accountViewModel, navController) }
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
object Profile : Route(
|
object Profile : Route(
|
||||||
route = "User/{id}",
|
route = "User/{id}",
|
||||||
icon = R.drawable.ic_profile,
|
icon = R.drawable.ic_profile,
|
||||||
arguments = listOf(navArgument("id") { type = NavType.StringType }),
|
arguments = listOf(navArgument("id") { type = NavType.StringType })
|
||||||
buildScreen = { accountViewModel, _, navController ->
|
|
||||||
{ ProfileScreen(it.arguments?.getString("id"), accountViewModel, navController) }
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
object Note : Route(
|
object Note : Route(
|
||||||
route = "Note/{id}",
|
route = "Note/{id}",
|
||||||
icon = R.drawable.ic_moments,
|
icon = R.drawable.ic_moments,
|
||||||
arguments = listOf(navArgument("id") { type = NavType.StringType }),
|
arguments = listOf(navArgument("id") { type = NavType.StringType })
|
||||||
buildScreen = { accountViewModel, _, navController ->
|
|
||||||
{ ThreadScreen(it.arguments?.getString("id"), accountViewModel, navController) }
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
object Room : Route(
|
object Room : Route(
|
||||||
route = "Room/{id}",
|
route = "Room/{id}",
|
||||||
icon = R.drawable.ic_moments,
|
icon = R.drawable.ic_moments,
|
||||||
arguments = listOf(navArgument("id") { type = NavType.StringType }),
|
arguments = listOf(navArgument("id") { type = NavType.StringType })
|
||||||
buildScreen = { accountViewModel, _, navController ->
|
|
||||||
{ ChatroomScreen(it.arguments?.getString("id"), accountViewModel, navController) }
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
object Channel : Route(
|
object Channel : Route(
|
||||||
route = "Channel/{id}",
|
route = "Channel/{id}",
|
||||||
icon = R.drawable.ic_moments,
|
icon = R.drawable.ic_moments,
|
||||||
arguments = listOf(navArgument("id") { type = NavType.StringType }),
|
arguments = listOf(navArgument("id") { type = NavType.StringType })
|
||||||
buildScreen = { accountViewModel, accountStateViewModel, navController ->
|
|
||||||
{
|
|
||||||
ChannelScreen(
|
|
||||||
it.arguments?.getString("id"),
|
|
||||||
accountViewModel,
|
|
||||||
accountStateViewModel,
|
|
||||||
navController
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val Routes = listOf(
|
|
||||||
// bottom
|
|
||||||
Route.Home,
|
|
||||||
Route.Message,
|
|
||||||
Route.Search,
|
|
||||||
Route.Notification,
|
|
||||||
|
|
||||||
// drawer
|
|
||||||
Route.Profile,
|
|
||||||
Route.Note,
|
|
||||||
Route.Room,
|
|
||||||
Route.Channel,
|
|
||||||
Route.Filters
|
|
||||||
)
|
|
||||||
|
|
||||||
// **
|
// **
|
||||||
// * Functions below only exist because we have not broken the datasource classes into backend and frontend.
|
// * Functions below only exist because we have not broken the datasource classes into backend and frontend.
|
||||||
|
|||||||
Reference in New Issue
Block a user