From a79b29fe63aaee64cec10184b5aaf50bdc4031cb Mon Sep 17 00:00:00 2001 From: Diego Beraldin Date: Tue, 19 Dec 2023 12:41:49 +0100 Subject: [PATCH] refactor: modularization home, search and settings features (#326) * refactor: add unit-postlist module * refactor: add unit-managesubscriptions and unit-multicommunity modules * refactor: add unit-about module --- .../DefaultNavigationCoordinator.kt | 13 ++- .../core/navigation/NavigationCoordinator.kt | 13 ++- feature-home/build.gradle.kts | 3 +- .../feature/home/di/HomeModule.kt | 25 +----- .../raccoonforlemmy/feature/home/di/Utils.kt | 5 -- .../feature/home/ui/HomeTab.kt | 2 +- .../raccoonforlemmy/feature/home/di/Utils.kt | 11 --- .../inbox/mentions/InboxMentionsScreen.kt | 6 +- .../inbox/messages/InboxMessagesScreen.kt | 6 +- .../inbox/replies/InboxRepliesScreen.kt | 6 +- .../profile/logged/ProfileLoggedScreen.kt | 6 +- .../feature/search/di/Utils.kt | 26 ------ .../feature/search/di/ExploreModule.kt | 55 ------------- .../feature/search/di/Utils.kt | 10 --- .../feature/search/main/ExploreScreen.kt | 6 +- .../feature/search/di/Utils.kt | 25 ------ feature-settings/build.gradle.kts | 5 +- .../feature/settings/di/Utils.kt | 8 +- .../feature/settings/di/SettingsModule.kt | 11 +-- .../feature/settings/di/Utils.kt | 3 - .../feature/settings/main/SettingsScreen.kt | 7 +- .../feature/settings/di/Utils.kt | 3 - settings.gradle.kts | 4 + shared/build.gradle.kts | 2 + .../raccoonforlemmy/di/DiHelper.kt | 2 + .../diegoberaldin/raccoonforlemmy/App.kt | 4 +- .../raccoonforlemmy/MainScreen.kt | 3 +- .../ui/navigation/TabNavigationItem.kt | 14 +++- .../raccoonforlemmy/di/DiHelper.kt | 2 + unit-about/build.gradle.kts | 68 ++++++++++++++++ .../raccoonforlemmy/unit/about/di/Utils.kt | 9 +++ .../unit/about/AboutConstants.kt | 4 +- .../unit/about}/AboutDialog.kt | 12 +-- .../unit/about}/AboutDialogMviModel.kt | 2 +- .../unit/about}/AboutDialogViewModel.kt | 6 +- .../unit/about/di/AboutModule.kt | 16 ++++ .../raccoonforlemmy/unit/about/di/Utils.kt | 5 ++ .../raccoonforlemmy/unit/about/di/Utils.kt | 11 +++ .../unit/drawer/ModalDrawerContent.kt | 7 +- unit-managesubscriptions/build.gradle.kts | 81 +++++++++++++++++++ .../unit/managesubscriptions/di/Utils.kt | 9 +++ .../ManageSubscriptionsMviModel.kt | 2 +- .../ManageSubscriptionsScreen.kt | 8 +- .../ManageSubscriptionsViewModel.kt | 2 +- .../di/ManageSubscriptionsModule.kt | 24 ++++++ .../unit/managesubscriptions/di/Utils.kt | 5 ++ .../unit/managesubscriptions/di/Utils.kt | 12 +++ unit-multicommunity/build.gradle.kts | 80 ++++++++++++++++++ .../unit/multicommunity/di/Utils.kt | 23 ++++++ .../detail/MultiCommunityMviModel.kt | 2 +- .../detail/MultiCommunityScreen.kt | 4 +- .../detail/MultiCommunityViewModel.kt | 4 +- .../multicommunity/di/MultiCommunityModule.kt | 48 +++++++++++ .../unit/multicommunity/di/Utils.kt | 9 +++ .../editor/MultiCommunityEditorMviModel.kt | 2 +- .../editor/MultiCommunityEditorScreen.kt | 4 +- .../editor/MultiCommunityEditorViewModel.kt | 2 +- .../utils/CommunityPaginator.kt | 2 +- .../utils/DefaultMultiCommunityPaginator.kt | 2 +- .../utils/MultiCommunityPaginator.kt | 2 +- .../unit/multicommunity/di/Utils.kt | 26 ++++++ unit-postlist/build.gradle.kts | 80 ++++++++++++++++++ .../unit/postlist}/di/Utils.kt | 4 +- .../unit}/postlist/PostListMviModel.kt | 2 +- .../unit}/postlist/PostListScreen.kt | 10 +-- .../unit}/postlist/PostListViewModel.kt | 2 +- .../unit}/postlist/PostsTopBar.kt | 2 +- .../unit/postlist/di/PostListModule.kt | 27 +++++++ .../raccoonforlemmy/unit/postlist/di/Utils.kt | 5 ++ .../raccoonforlemmy/unit/postlist/di/Utils.kt | 11 +++ 70 files changed, 667 insertions(+), 255 deletions(-) delete mode 100644 feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt delete mode 100644 feature-home/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt create mode 100644 unit-about/build.gradle.kts create mode 100644 unit-about/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt rename feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutContants.kt => unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutConstants.kt (81%) rename {feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog => unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about}/AboutDialog.kt (95%) rename {feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog => unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about}/AboutDialogMviModel.kt (90%) rename {feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog => unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about}/AboutDialogViewModel.kt (88%) create mode 100644 unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/AboutModule.kt create mode 100644 unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt create mode 100644 unit-about/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt create mode 100644 unit-managesubscriptions/build.gradle.kts create mode 100644 unit-managesubscriptions/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/managesubscriptions/ManageSubscriptionsMviModel.kt (92%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/managesubscriptions/ManageSubscriptionsScreen.kt (97%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/managesubscriptions/ManageSubscriptionsViewModel.kt (98%) create mode 100644 unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/ManageSubscriptionsModule.kt create mode 100644 unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt create mode 100644 unit-managesubscriptions/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt create mode 100644 unit-multicommunity/build.gradle.kts create mode 100644 unit-multicommunity/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/detail/MultiCommunityMviModel.kt (95%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/detail/MultiCommunityScreen.kt (99%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/detail/MultiCommunityViewModel.kt (98%) create mode 100644 unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/MultiCommunityModule.kt create mode 100644 unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/editor/MultiCommunityEditorMviModel.kt (93%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/editor/MultiCommunityEditorScreen.kt (98%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/editor/MultiCommunityEditorViewModel.kt (98%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/utils/CommunityPaginator.kt (95%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/utils/DefaultMultiCommunityPaginator.kt (93%) rename {feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search => unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/multicommunity/utils/MultiCommunityPaginator.kt (83%) create mode 100644 unit-multicommunity/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt create mode 100644 unit-postlist/build.gradle.kts rename {feature-home/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home => unit-postlist/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist}/di/Utils.kt (54%) rename {feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home => unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/postlist/PostListMviModel.kt (97%) rename {feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home => unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/postlist/PostListScreen.kt (99%) rename {feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home => unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/postlist/PostListViewModel.kt (99%) rename {feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home => unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit}/postlist/PostsTopBar.kt (98%) create mode 100644 unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/PostListModule.kt create mode 100644 unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt create mode 100644 unit-postlist/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt diff --git a/core-navigation/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/navigation/DefaultNavigationCoordinator.kt b/core-navigation/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/navigation/DefaultNavigationCoordinator.kt index a09454909..4f4711384 100644 --- a/core-navigation/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/navigation/DefaultNavigationCoordinator.kt +++ b/core-navigation/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/navigation/DefaultNavigationCoordinator.kt @@ -4,7 +4,6 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.bottomSheet.BottomSheetNavigator -import cafe.adriel.voyager.navigator.tab.Tab import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob @@ -16,7 +15,7 @@ import kotlinx.coroutines.launch internal class DefaultNavigationCoordinator : NavigationCoordinator { - override val onDoubleTabSelection = MutableSharedFlow() + override val onDoubleTabSelection = MutableSharedFlow() override val deepLinkUrl = MutableSharedFlow() override val inboxUnread = MutableStateFlow(0) override val canPop = MutableStateFlow(false) @@ -26,7 +25,7 @@ internal class DefaultNavigationCoordinator : NavigationCoordinator { private var connection: NestedScrollConnection? = null private var navigator: Navigator? = null private var bottomNavigator: BottomSheetNavigator? = null - private var currentTab: Tab? = null + private var currentTab: TabNavigationSection? = null private val scope = CoroutineScope(SupervisorJob()) private var canGoBackCallback: (() -> Boolean)? = null private var job: Job? = null @@ -48,12 +47,12 @@ internal class DefaultNavigationCoordinator : NavigationCoordinator { override fun getBottomBarScrollConnection() = connection - override fun setCurrentSection(tab: Tab) { + override fun setCurrentSection(section: TabNavigationSection) { val oldTab = currentTab - currentTab = tab - if (tab == oldTab) { + currentTab = section + if (section == oldTab) { scope.launch { - onDoubleTabSelection.emit(tab) + onDoubleTabSelection.emit(section) } } } diff --git a/core-navigation/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/navigation/NavigationCoordinator.kt b/core-navigation/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/navigation/NavigationCoordinator.kt index 917a3c9e0..71c4d4bec 100644 --- a/core-navigation/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/navigation/NavigationCoordinator.kt +++ b/core-navigation/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/navigation/NavigationCoordinator.kt @@ -5,21 +5,28 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.bottomSheet.BottomSheetNavigator -import cafe.adriel.voyager.navigator.tab.Tab import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow +sealed interface TabNavigationSection { + data object Home : TabNavigationSection + data object Explore : TabNavigationSection + data object Profile : TabNavigationSection + data object Inbox : TabNavigationSection + data object Settings : TabNavigationSection +} + @Stable interface NavigationCoordinator { - val onDoubleTabSelection: Flow + val onDoubleTabSelection: Flow val inboxUnread: StateFlow val deepLinkUrl: Flow val canPop: StateFlow val exitMessageVisible: StateFlow val bottomSheetGesturesEnabled: StateFlow - fun setCurrentSection(tab: Tab) + fun setCurrentSection(section: TabNavigationSection) fun submitDeeplink(url: String) fun setRootNavigator(value: Navigator?) fun setCanGoBackCallback(value: (() -> Boolean)?) diff --git a/feature-home/build.gradle.kts b/feature-home/build.gradle.kts index f8207e091..72995c5cd 100644 --- a/feature-home/build.gradle.kts +++ b/feature-home/build.gradle.kts @@ -52,12 +52,13 @@ kotlin { implementation(projects.coreCommonui.components) implementation(projects.coreCommonui.lemmyui) implementation(projects.coreCommonui.modals) + implementation(projects.coreCommonui.detailopenerApi) implementation(projects.unitZoomableimage) implementation(projects.unitWeb) implementation(projects.unitCreatereport) implementation(projects.unitCreatecomment) implementation(projects.unitCreatepost) - implementation(projects.coreCommonui.detailopenerApi) + implementation(projects.unitPostlist) implementation(projects.coreNotifications) implementation(projects.domainIdentity) diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/HomeModule.kt b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/HomeModule.kt index 07794c41d..339731f22 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/HomeModule.kt +++ b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/HomeModule.kt @@ -1,27 +1,10 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.home.di -import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist.PostListMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist.PostListViewModel +import com.github.diegoberaldin.raccoonforlemmy.unit.postlist.di.postListModule import org.koin.dsl.module val homeTabModule = module { - factory { - PostListViewModel( - mvi = DefaultMviModel(PostListMviModel.UiState()), - postRepository = get(), - apiConfigurationRepository = get(), - identityRepository = get(), - siteRepository = get(), - themeRepository = get(), - settingsRepository = get(), - shareHelper = get(), - notificationCenter = get(), - hapticFeedback = get(), - zombieModeHelper = get(), - imagePreloadManager = get(), - contentResetCoordinator = get(), - getSortTypesUseCase = get(), - ) - } + includes( + postListModule, + ) } diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt deleted file mode 100644 index 8aa222c7b..000000000 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.home.di - -import com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist.PostListMviModel - -expect fun getHomeScreenModel(): PostListMviModel diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/ui/HomeTab.kt b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/ui/HomeTab.kt index 312684f83..0961ce9a9 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/ui/HomeTab.kt +++ b/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/ui/HomeTab.kt @@ -10,10 +10,10 @@ import androidx.compose.ui.graphics.vector.rememberVectorPainter import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.tab.Tab import cafe.adriel.voyager.navigator.tab.TabOptions -import com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist.PostListScreen import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.resources.di.getLanguageRepository import com.github.diegoberaldin.raccoonforlemmy.resources.di.staticString +import com.github.diegoberaldin.raccoonforlemmy.unit.postlist.PostListScreen import dev.icerock.moko.resources.desc.desc object HomeTab : Tab { diff --git a/feature-home/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt b/feature-home/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt deleted file mode 100644 index 73d772c1f..000000000 --- a/feature-home/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.home.di - -import com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist.PostListMviModel -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject - -actual fun getHomeScreenModel(): PostListMviModel = HomeScreenModelHelper.model - -object HomeScreenModelHelper : KoinComponent { - val model: PostListMviModel by inject() -} diff --git a/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/mentions/InboxMentionsScreen.kt b/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/mentions/InboxMentionsScreen.kt index b45db608c..d76e78d29 100644 --- a/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/mentions/InboxMentionsScreen.kt +++ b/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/mentions/InboxMentionsScreen.kt @@ -49,11 +49,11 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.InboxCardP import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.InboxCardType import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.Option import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.OptionId +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.di.getInboxMentionsViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.ui.InboxTab import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.unit.zoomableimage.ZoomableImageScreen import dev.icerock.moko.resources.compose.stringResource @@ -78,8 +78,8 @@ class InboxMentionsScreen : Tab { val detailOpener = remember { getDetailOpener() } LaunchedEffect(navigationCoordinator) { - navigationCoordinator.onDoubleTabSelection.onEach { - if (it == InboxTab) { + navigationCoordinator.onDoubleTabSelection.onEach { section -> + if (section == TabNavigationSection.Inbox) { lazyListState.scrollToItem(0) } }.launchIn(this) diff --git a/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/messages/InboxMessagesScreen.kt b/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/messages/InboxMessagesScreen.kt index b884d0ad2..39d1d1d55 100644 --- a/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/messages/InboxMessagesScreen.kt +++ b/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/messages/InboxMessagesScreen.kt @@ -33,12 +33,12 @@ import cafe.adriel.voyager.navigator.tab.TabOptions import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing import com.github.diegoberaldin.raccoonforlemmy.core.architecture.bindToLifecycle import com.github.diegoberaldin.raccoonforlemmy.core.commonui.detailopener.api.getDetailOpener +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.otherUser import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.di.getInboxMessagesViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.ui.InboxTab import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.unit.chat.InboxChatScreen import dev.icerock.moko.resources.compose.stringResource @@ -63,8 +63,8 @@ class InboxMessagesScreen : Tab { val detailOpener = remember { getDetailOpener() } LaunchedEffect(navigationCoordinator) { - navigationCoordinator.onDoubleTabSelection.onEach { - if (it == InboxTab) { + navigationCoordinator.onDoubleTabSelection.onEach { section -> + if (section == TabNavigationSection.Inbox) { lazyListState.scrollToItem(0) } }.launchIn(this) diff --git a/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/replies/InboxRepliesScreen.kt b/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/replies/InboxRepliesScreen.kt index 353b05f64..cfab05278 100644 --- a/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/replies/InboxRepliesScreen.kt +++ b/feature-inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/replies/InboxRepliesScreen.kt @@ -49,11 +49,11 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.InboxCardP import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.InboxCardType import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.Option import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.OptionId +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.di.getInboxRepliesViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.ui.InboxTab import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.unit.zoomableimage.ZoomableImageScreen import dev.icerock.moko.resources.compose.stringResource @@ -77,8 +77,8 @@ class InboxRepliesScreen : Tab { val detailOpener = remember { getDetailOpener() } LaunchedEffect(navigationCoordinator) { - navigationCoordinator.onDoubleTabSelection.onEach { - if (it == InboxTab) { + navigationCoordinator.onDoubleTabSelection.onEach { section -> + if (section == TabNavigationSection.Inbox) { lazyListState.scrollToItem(0) } }.launchIn(this) diff --git a/feature-profile/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/profile/logged/ProfileLoggedScreen.kt b/feature-profile/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/profile/logged/ProfileLoggedScreen.kt index f8ed7bbf8..83520e648 100644 --- a/feature-profile/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/profile/logged/ProfileLoggedScreen.kt +++ b/feature-profile/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/profile/logged/ProfileLoggedScreen.kt @@ -49,6 +49,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.PostCardPl import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.ProfileLoggedSection import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.UserHeader import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.RawContentDialog +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterEvent import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter @@ -57,7 +58,6 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallb import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel import com.github.diegoberaldin.raccoonforlemmy.feature.profile.di.getProfileLoggedViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.profile.ui.ProfileTab import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.unit.createcomment.CreateCommentScreen import com.github.diegoberaldin.raccoonforlemmy.unit.createpost.CreatePostScreen @@ -88,8 +88,8 @@ internal object ProfileLoggedScreen : Tab { val detailOpener = remember { getDetailOpener() } LaunchedEffect(navigationCoordinator) { - navigationCoordinator.onDoubleTabSelection.onEach { tab -> - if (tab == ProfileTab) { + navigationCoordinator.onDoubleTabSelection.onEach { section -> + if (section == TabNavigationSection.Profile) { lazyListState.scrollToItem(0) } }.launchIn(this) diff --git a/feature-search/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt b/feature-search/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt index d99351983..36a4ecbce 100644 --- a/feature-search/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt +++ b/feature-search/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt @@ -1,35 +1,9 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.search.di -import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.MultiCommunityModel import com.github.diegoberaldin.raccoonforlemmy.feature.search.main.ExploreMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions.ManageSubscriptionsMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail.MultiCommunityMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor.MultiCommunityEditorMviModel -import org.koin.core.parameter.parametersOf import org.koin.java.KoinJavaComponent.inject actual fun getExploreViewModel(): ExploreMviModel { val res: ExploreMviModel by inject(ExploreMviModel::class.java) return res } - -actual fun getManageSubscriptionsViewModel(): ManageSubscriptionsMviModel { - val res: ManageSubscriptionsMviModel by inject(ManageSubscriptionsMviModel::class.java) - return res -} - -actual fun getMultiCommunityViewModel(community: MultiCommunityModel): MultiCommunityMviModel { - val res: MultiCommunityMviModel by inject( - MultiCommunityMviModel::class.java, - parameters = { parametersOf(community) } - ) - return res -} - -actual fun getMultiCommunityEditorViewModel(editedCommunity: MultiCommunityModel?): MultiCommunityEditorMviModel { - val res: MultiCommunityEditorMviModel by inject( - MultiCommunityEditorMviModel::class.java, - parameters = { parametersOf(editedCommunity) } - ) - return res -} diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/ExploreModule.kt b/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/ExploreModule.kt index 5b9ffcbb6..8d59194fc 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/ExploreModule.kt +++ b/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/ExploreModule.kt @@ -3,14 +3,6 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.search.di import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel import com.github.diegoberaldin.raccoonforlemmy.feature.search.main.ExploreMviModel import com.github.diegoberaldin.raccoonforlemmy.feature.search.main.ExploreViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions.ManageSubscriptionsMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions.ManageSubscriptionsViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail.MultiCommunityMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail.MultiCommunityViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor.MultiCommunityEditorMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor.MultiCommunityEditorViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.utils.DefaultMultiCommunityPaginator -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.utils.MultiCommunityPaginator import org.koin.dsl.module val exploreTabModule = module { @@ -30,51 +22,4 @@ val exploreTabModule = module { getSortTypesUseCase = get(), ) } - factory { - ManageSubscriptionsViewModel( - mvi = DefaultMviModel(ManageSubscriptionsMviModel.UiState()), - identityRepository = get(), - communityRepository = get(), - accountRepository = get(), - multiCommunityRepository = get(), - hapticFeedback = get(), - notificationCenter = get(), - settingsRepository = get(), - ) - } - factory { params -> - MultiCommunityViewModel( - mvi = DefaultMviModel(MultiCommunityMviModel.UiState()), - community = params[0], - postRepository = get(), - identityRepository = get(), - apiConfigurationRepository = get(), - siteRepository = get(), - themeRepository = get(), - shareHelper = get(), - settingsRepository = get(), - notificationCenter = get(), - hapticFeedback = get(), - paginator = get(), - imagePreloadManager = get(), - getSortTypesUseCase = get(), - ) - } - factory { - DefaultMultiCommunityPaginator( - postRepository = get(), - ) - } - factory { params -> - MultiCommunityEditorViewModel( - mvi = DefaultMviModel(MultiCommunityEditorMviModel.UiState()), - editedCommunity = params[0], - identityRepository = get(), - communityRepository = get(), - accountRepository = get(), - multiCommunityRepository = get(), - notificationCenter = get(), - settingsRepository = get(), - ) - } } diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt b/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt index cb15a3fc0..bb97fce90 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt +++ b/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt @@ -1,15 +1,5 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.search.di -import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.MultiCommunityModel import com.github.diegoberaldin.raccoonforlemmy.feature.search.main.ExploreMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions.ManageSubscriptionsMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail.MultiCommunityMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor.MultiCommunityEditorMviModel expect fun getExploreViewModel(): ExploreMviModel - -expect fun getManageSubscriptionsViewModel(): ManageSubscriptionsMviModel - -expect fun getMultiCommunityViewModel(community: MultiCommunityModel): MultiCommunityMviModel - -expect fun getMultiCommunityEditorViewModel(editedCommunity: MultiCommunityModel?): MultiCommunityEditorMviModel diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/main/ExploreScreen.kt b/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/main/ExploreScreen.kt index 13b7005a8..d24bc4d4c 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/main/ExploreScreen.kt +++ b/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/main/ExploreScreen.kt @@ -72,6 +72,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.PostCardPl import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.UserItem import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SortBottomSheet +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getDrawerCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository @@ -82,7 +83,6 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SearchResult import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SearchResultType import com.github.diegoberaldin.raccoonforlemmy.feature.search.di.getExploreViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.ui.ExploreTab import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.unit.createcomment.CreateCommentScreen import com.github.diegoberaldin.raccoonforlemmy.unit.web.WebViewScreen @@ -123,8 +123,8 @@ class ExploreScreen : Screen { val detailOpener = remember { getDetailOpener() } LaunchedEffect(navigationCoordinator) { - navigationCoordinator.onDoubleTabSelection.onEach { tab -> - if (tab == ExploreTab) { + navigationCoordinator.onDoubleTabSelection.onEach { section -> + if (section == TabNavigationSection.Explore) { lazyListState.scrollToItem(0) topAppBarState.heightOffset = 0f topAppBarState.contentOffset = 0f diff --git a/feature-search/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt b/feature-search/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt index 8b307efbe..9dcff1a5a 100644 --- a/feature-search/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt +++ b/feature-search/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/di/Utils.kt @@ -1,36 +1,11 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.search.di -import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.MultiCommunityModel import com.github.diegoberaldin.raccoonforlemmy.feature.search.main.ExploreMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions.ManageSubscriptionsMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail.MultiCommunityMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor.MultiCommunityEditorMviModel import org.koin.core.component.KoinComponent import org.koin.core.component.inject -import org.koin.core.parameter.parametersOf actual fun getExploreViewModel(): ExploreMviModel = ExploreInjectHelper.model -actual fun getManageSubscriptionsViewModel(): ManageSubscriptionsMviModel = - ExploreInjectHelper.manageSuscriptionsViewModel - -actual fun getMultiCommunityViewModel(community: MultiCommunityModel): MultiCommunityMviModel = - ExploreInjectHelper.getMultiCommunityViewModel(community) - -actual fun getMultiCommunityEditorViewModel(editedCommunity: MultiCommunityModel?): MultiCommunityEditorMviModel = - ExploreInjectHelper.getMultiCommunityEditorViewModel(editedCommunity) - object ExploreInjectHelper : KoinComponent { val model: ExploreMviModel by inject() - val manageSuscriptionsViewModel: ManageSubscriptionsMviModel by inject() - - internal fun getMultiCommunityViewModel(community: MultiCommunityModel): MultiCommunityMviModel { - val res: MultiCommunityMviModel by inject(parameters = { parametersOf(community) }) - return res - } - - internal fun getMultiCommunityEditorViewModel(editedCommunity: MultiCommunityModel?): MultiCommunityEditorMviModel { - val res: MultiCommunityEditorMviModel by inject(parameters = { parametersOf(editedCommunity) }) - return res - } } diff --git a/feature-settings/build.gradle.kts b/feature-settings/build.gradle.kts index ccb9ba793..457829298 100644 --- a/feature-settings/build.gradle.kts +++ b/feature-settings/build.gradle.kts @@ -51,13 +51,14 @@ kotlin { implementation(projects.coreCommonui.components) implementation(projects.coreCommonui.lemmyui) implementation(projects.coreCommonui.modals) - implementation(projects.unitWeb) implementation(projects.coreCommonui.detailopenerApi) + implementation(projects.unitWeb) + implementation(projects.unitAbout) implementation(projects.coreNotifications) - implementation(projects.resources) implementation(projects.domainLemmy.data) implementation(projects.domainLemmy.repository) implementation(projects.domainIdentity) + implementation(projects.resources) } } val commonTest by getting { diff --git a/feature-settings/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt b/feature-settings/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt index 0b94c380a..30a5dc5e3 100644 --- a/feature-settings/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt +++ b/feature-settings/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt @@ -1,15 +1,9 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.settings.di -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutDialogMviModel import com.github.diegoberaldin.raccoonforlemmy.feature.settings.main.SettingsMviModel import org.koin.java.KoinJavaComponent.inject actual fun getSettingsViewModel(): SettingsMviModel { val res: SettingsMviModel by inject(SettingsMviModel::class.java) return res -} - -actual fun getAboutDialogViewModel(): AboutDialogMviModel { - val res: AboutDialogMviModel by inject(AboutDialogMviModel::class.java) - return res -} +} \ No newline at end of file diff --git a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/SettingsModule.kt b/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/SettingsModule.kt index 657592096..9e24a320d 100644 --- a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/SettingsModule.kt +++ b/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/SettingsModule.kt @@ -1,13 +1,13 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.settings.di import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutDialogMviModel -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutDialogViewModel import com.github.diegoberaldin.raccoonforlemmy.feature.settings.main.SettingsMviModel import com.github.diegoberaldin.raccoonforlemmy.feature.settings.main.SettingsViewModel +import com.github.diegoberaldin.raccoonforlemmy.unit.about.di.aboutModule import org.koin.dsl.module val settingsTabModule = module { + includes(aboutModule) factory { SettingsViewModel( mvi = DefaultMviModel(SettingsMviModel.UiState()), @@ -24,11 +24,4 @@ val settingsTabModule = module { getSortTypesUseCase = get(), ) } - factory { - AboutDialogViewModel( - mvi = DefaultMviModel(AboutDialogMviModel.UiState()), - identityRepository = get(), - communityRepository = get(), - ) - } } diff --git a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt b/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt index 0a2dee612..f2afc337b 100644 --- a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt +++ b/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt @@ -1,8 +1,5 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.settings.di -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutDialogMviModel import com.github.diegoberaldin.raccoonforlemmy.feature.settings.main.SettingsMviModel expect fun getSettingsViewModel(): SettingsMviModel - -expect fun getAboutDialogViewModel(): AboutDialogMviModel diff --git a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/main/SettingsScreen.kt b/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/main/SettingsScreen.kt index 42d8a136a..a8640c08d 100644 --- a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/main/SettingsScreen.kt +++ b/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/main/SettingsScreen.kt @@ -61,6 +61,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SortBottomS import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.ThemeBottomSheet import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.VoteFormatBottomSheet import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.VoteThemeBottomSheet +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getDrawerCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterEvent @@ -74,7 +75,6 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageName import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toReadableName import com.github.diegoberaldin.raccoonforlemmy.feature.settings.di.getSettingsViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutDialog import com.github.diegoberaldin.raccoonforlemmy.feature.settings.ui.SettingsTab import com.github.diegoberaldin.raccoonforlemmy.feature.settings.ui.components.SettingsColorRow import com.github.diegoberaldin.raccoonforlemmy.feature.settings.ui.components.SettingsHeader @@ -84,6 +84,7 @@ import com.github.diegoberaldin.raccoonforlemmy.feature.settings.ui.components.S import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.resources.di.getLanguageRepository import com.github.diegoberaldin.raccoonforlemmy.resources.di.staticString +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutDialog import dev.icerock.moko.resources.compose.stringResource import dev.icerock.moko.resources.desc.desc import kotlinx.coroutines.delay @@ -126,8 +127,8 @@ class SettingsScreen : Screen { }.launchIn(this) } LaunchedEffect(Unit) { - navigationCoordinator.onDoubleTabSelection.onEach { tab -> - if (tab == SettingsTab) { + navigationCoordinator.onDoubleTabSelection.onEach { section -> + if (section == TabNavigationSection.Settings) { scrollState.scrollTo(0) topAppBarState.heightOffset = 0f topAppBarState.contentOffset = 0f diff --git a/feature-settings/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt b/feature-settings/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt index 4a71cb7ff..eeeb0b14b 100644 --- a/feature-settings/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt +++ b/feature-settings/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/di/Utils.kt @@ -1,14 +1,11 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.settings.di -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutDialogMviModel import com.github.diegoberaldin.raccoonforlemmy.feature.settings.main.SettingsMviModel import org.koin.core.component.KoinComponent import org.koin.core.component.inject actual fun getSettingsViewModel(): SettingsMviModel = SettingsScreenModelHelper.settingsViewModel -actual fun getAboutDialogViewModel(): AboutDialogMviModel = SettingsScreenModelHelper.aboutViewModel object SettingsScreenModelHelper : KoinComponent { val settingsViewModel: SettingsMviModel by inject() - val aboutViewModel: AboutDialogMviModel by inject() } diff --git a/settings.gradle.kts b/settings.gradle.kts index 94ca1296f..bd97499cd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -61,3 +61,7 @@ include(":unit-selectcommunity") include(":unit-userdetail") include(":unit-web") include(":unit-zoomableimage") +include(":unit-postlist") +include(":unit-managesubscriptions") +include(":unit-multicommunity") +include(":unit-about") diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index dbf07a71b..f2b68a77d 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -75,6 +75,8 @@ kotlin { implementation(projects.unitPostdetail) implementation(projects.unitCommunitydetail) implementation(projects.unitUserdetail) + implementation(projects.unitManagesubscriptions) + implementation(projects.unitMulticommunity) api(projects.resources) api(projects.featureHome) diff --git a/shared/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/DiHelper.kt b/shared/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/DiHelper.kt index 0d14f1ef7..ac3ba0804 100644 --- a/shared/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/DiHelper.kt +++ b/shared/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/DiHelper.kt @@ -30,6 +30,7 @@ import com.github.diegoberaldin.raccoonforlemmy.unit.createpost.di.createPostMod import com.github.diegoberaldin.raccoonforlemmy.unit.createreport.di.createReportModule import com.github.diegoberaldin.raccoonforlemmy.unit.drawer.di.drawerModule import com.github.diegoberaldin.raccoonforlemmy.unit.instanceinfo.di.instanceInfoModule +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.di.manageSubscriptionsModule import com.github.diegoberaldin.raccoonforlemmy.unit.postdetail.di.postDetailModule import com.github.diegoberaldin.raccoonforlemmy.unit.remove.di.removeModule import com.github.diegoberaldin.raccoonforlemmy.unit.reportlist.di.reportListModule @@ -79,5 +80,6 @@ val sharedHelperModule = module { postDetailModule, communityDetailModule, userDetailModule, + manageSubscriptionsModule, ) } diff --git a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/App.kt b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/App.kt index 851ed7dd8..e79db54ef 100644 --- a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/App.kt +++ b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/App.kt @@ -48,11 +48,11 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.getCrashReportC import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.getCrashReportSender import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageDirection import com.github.diegoberaldin.raccoonforlemmy.domain.identity.di.getApiConfigurationRepository -import com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions.ManageSubscriptionsScreen -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail.MultiCommunityScreen import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.resources.di.getLanguageRepository import com.github.diegoberaldin.raccoonforlemmy.unit.drawer.ModalDrawerContent +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.ManageSubscriptionsScreen +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail.MultiCommunityScreen import com.github.diegoberaldin.raccoonforlemmy.unit.saveditems.SavedItemsScreen import dev.icerock.moko.resources.compose.stringResource import dev.icerock.moko.resources.desc.StringDesc diff --git a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/MainScreen.kt b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/MainScreen.kt index ad9257630..8298ed09b 100644 --- a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/MainScreen.kt +++ b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/MainScreen.kt @@ -33,6 +33,7 @@ import cafe.adriel.voyager.navigator.tab.TabNavigator import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.getThemeRepository import com.github.diegoberaldin.raccoonforlemmy.core.architecture.bindToLifecycle import com.github.diegoberaldin.raccoonforlemmy.core.navigation.DrawerEvent +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getDrawerCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterEvent @@ -94,7 +95,7 @@ internal object MainScreen : Screen { } navigationCoordinator.apply { setBottomBarScrollConnection(scrollConnection) - setCurrentSection(HomeTab) + setCurrentSection(TabNavigationSection.Home) } navigationCoordinator.exitMessageVisible.onEach { diff --git a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/ui/navigation/TabNavigationItem.kt b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/ui/navigation/TabNavigationItem.kt index d62ef231d..7d068fefc 100644 --- a/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/ui/navigation/TabNavigationItem.kt +++ b/shared/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/ui/navigation/TabNavigationItem.kt @@ -27,7 +27,12 @@ import cafe.adriel.voyager.navigator.tab.LocalTabNavigator import cafe.adriel.voyager.navigator.tab.Tab import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator +import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.ui.InboxTab +import com.github.diegoberaldin.raccoonforlemmy.feature.profile.ui.ProfileTab +import com.github.diegoberaldin.raccoonforlemmy.feature.search.ui.ExploreTab +import com.github.diegoberaldin.raccoonforlemmy.feature.settings.ui.SettingsTab import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.resources.di.staticString import dev.icerock.moko.resources.desc.desc @@ -43,7 +48,14 @@ internal fun RowScope.TabNavigationItem(tab: Tab, withText: Boolean = true) { modifier = Modifier.weight(1f).fillMaxHeight(), onClick = { tabNavigator.current = tab - navigationCoordinator.setCurrentSection(tab) + val section = when (tab) { + ExploreTab -> TabNavigationSection.Explore + ProfileTab -> TabNavigationSection.Profile + InboxTab -> TabNavigationSection.Inbox + SettingsTab -> TabNavigationSection.Settings + else -> TabNavigationSection.Home + } + navigationCoordinator.setCurrentSection(section) }, selected = tabNavigator.current == tab, icon = { diff --git a/shared/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/DiHelper.kt b/shared/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/DiHelper.kt index 20546b253..11363974d 100644 --- a/shared/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/DiHelper.kt +++ b/shared/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/di/DiHelper.kt @@ -30,6 +30,7 @@ import com.github.diegoberaldin.raccoonforlemmy.unit.createpost.di.createPostMod import com.github.diegoberaldin.raccoonforlemmy.unit.createreport.di.createReportModule import com.github.diegoberaldin.raccoonforlemmy.unit.drawer.di.drawerModule import com.github.diegoberaldin.raccoonforlemmy.unit.instanceinfo.di.instanceInfoModule +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.di.manageSubscriptionsModule import com.github.diegoberaldin.raccoonforlemmy.unit.postdetail.di.postDetailModule import com.github.diegoberaldin.raccoonforlemmy.unit.remove.di.removeModule import com.github.diegoberaldin.raccoonforlemmy.unit.reportlist.di.reportListModule @@ -80,6 +81,7 @@ fun initKoin() { postDetailModule, communityDetailModule, userDetailModule, + manageSubscriptionsModule, ) } diff --git a/unit-about/build.gradle.kts b/unit-about/build.gradle.kts new file mode 100644 index 000000000..f8fe27226 --- /dev/null +++ b/unit-about/build.gradle.kts @@ -0,0 +1,68 @@ +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) +} + +@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) +kotlin { + applyDefaultHierarchyTemplate() + + androidTarget { + compilations.all { + kotlinOptions { + jvmTarget = "1.8" + } + } + } + iosX64() + iosArm64() + iosSimulatorArm64() + + sourceSets { + val commonMain by getting { + dependencies { + implementation(libs.koin.core) + + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.materialIconsExtended) + @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) + implementation(compose.components.resources) + + implementation(libs.voyager.navigator) + implementation(libs.voyager.screenmodel) + + implementation(projects.coreAppearance) + implementation(projects.corePreferences) + implementation(projects.coreArchitecture) + implementation(projects.coreUtils) + implementation(projects.coreNavigation) + implementation(projects.coreCommonui.components) + implementation(projects.coreCommonui.lemmyui) + implementation(projects.coreCommonui.detailopenerApi) + implementation(projects.unitWeb) + implementation(projects.coreNotifications) + implementation(projects.corePersistence) + implementation(projects.domainIdentity) + implementation(projects.domainLemmy.data) + implementation(projects.domainLemmy.repository) + implementation(projects.resources) + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } +} + +android { + namespace = "com.github.diegoberaldin.raccoonforlemmy.unit.about" + compileSdk = libs.versions.android.targetSdk.get().toInt() + defaultConfig { + minSdk = libs.versions.android.minSdk.get().toInt() + } +} diff --git a/unit-about/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt b/unit-about/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt new file mode 100644 index 000000000..b56d86611 --- /dev/null +++ b/unit-about/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt @@ -0,0 +1,9 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.about.di + +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutDialogMviModel +import org.koin.java.KoinJavaComponent + +actual fun getAboutDialogViewModel(): AboutDialogMviModel { + val res: AboutDialogMviModel by KoinJavaComponent.inject(AboutDialogMviModel::class.java) + return res +} diff --git a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutContants.kt b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutConstants.kt similarity index 81% rename from feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutContants.kt rename to unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutConstants.kt index 8ddfc144b..32cabfc7f 100644 --- a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutContants.kt +++ b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutConstants.kt @@ -1,6 +1,6 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog +package com.github.diegoberaldin.raccoonforlemmy.unit.about -internal object AboutContants { +internal object AboutConstants { const val REPORT_URL = "https://github.com/diegoberaldin/RaccoonForLemmy/issues/new?labels=bug" const val CHANGELOG_URL = diff --git a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialog.kt b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialog.kt similarity index 95% rename from feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialog.kt rename to unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialog.kt index 38c5f7ce9..a0d43d126 100644 --- a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialog.kt +++ b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialog.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog +package com.github.diegoberaldin.raccoonforlemmy.unit.about import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -44,12 +44,12 @@ import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotific import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.di.getAboutDialogViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutContants.CHANGELOG_URL -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutContants.REPORT_EMAIL_ADDRESS -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutContants.REPORT_URL -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutContants.WEBSITE_URL import com.github.diegoberaldin.raccoonforlemmy.resources.MR +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutConstants.CHANGELOG_URL +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutConstants.REPORT_EMAIL_ADDRESS +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutConstants.REPORT_URL +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutConstants.WEBSITE_URL +import com.github.diegoberaldin.raccoonforlemmy.unit.about.di.getAboutDialogViewModel import com.github.diegoberaldin.raccoonforlemmy.unit.web.WebViewScreen import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource diff --git a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialogMviModel.kt b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialogMviModel.kt similarity index 90% rename from feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialogMviModel.kt rename to unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialogMviModel.kt index d1d82c59f..6c45ba2f3 100644 --- a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialogMviModel.kt +++ b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialogMviModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog +package com.github.diegoberaldin.raccoonforlemmy.unit.about import cafe.adriel.voyager.core.model.ScreenModel import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel diff --git a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialogViewModel.kt b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialogViewModel.kt similarity index 88% rename from feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialogViewModel.kt rename to unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialogViewModel.kt index be528570e..83d4c36e7 100644 --- a/feature-settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/dialog/AboutDialogViewModel.kt +++ b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/AboutDialogViewModel.kt @@ -1,12 +1,12 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog +package com.github.diegoberaldin.raccoonforlemmy.unit.about import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel import com.github.diegoberaldin.raccoonforlemmy.core.utils.debug.AppInfo import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommunityRepository -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutContants.LEMMY_COMMUNITY_INSTANCE -import com.github.diegoberaldin.raccoonforlemmy.feature.settings.dialog.AboutContants.LEMMY_COMMUNITY_NAME +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutConstants.LEMMY_COMMUNITY_INSTANCE +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutConstants.LEMMY_COMMUNITY_NAME import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import kotlinx.coroutines.launch diff --git a/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/AboutModule.kt b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/AboutModule.kt new file mode 100644 index 000000000..8d12b11bd --- /dev/null +++ b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/AboutModule.kt @@ -0,0 +1,16 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.about.di + +import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutDialogMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutDialogViewModel +import org.koin.dsl.module + +val aboutModule = module { + factory { + AboutDialogViewModel( + mvi = DefaultMviModel(AboutDialogMviModel.UiState()), + identityRepository = get(), + communityRepository = get(), + ) + } +} \ No newline at end of file diff --git a/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt new file mode 100644 index 000000000..50cbfe735 --- /dev/null +++ b/unit-about/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt @@ -0,0 +1,5 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.about.di + +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutDialogMviModel + +expect fun getAboutDialogViewModel(): AboutDialogMviModel diff --git a/unit-about/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt b/unit-about/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt new file mode 100644 index 000000000..5305c0695 --- /dev/null +++ b/unit-about/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/about/di/Utils.kt @@ -0,0 +1,11 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.about.di + +import com.github.diegoberaldin.raccoonforlemmy.unit.about.AboutDialogMviModel +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +actual fun getAboutDialogViewModel(): AboutDialogMviModel = UnitAboutDiHelper.aboutViewModel + +object UnitAboutDiHelper : KoinComponent { + val aboutViewModel: AboutDialogMviModel by inject() +} \ No newline at end of file diff --git a/unit-drawer/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/drawer/ModalDrawerContent.kt b/unit-drawer/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/drawer/ModalDrawerContent.kt index 52f96f037..03b00b3a0 100644 --- a/unit-drawer/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/drawer/ModalDrawerContent.kt +++ b/unit-drawer/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/drawer/ModalDrawerContent.kt @@ -105,7 +105,6 @@ object ModalDrawerContent : Tab { Column( modifier = Modifier.fillMaxWidth(0.9f) ) { - DrawerHeader( user = uiState.user, instance = uiState.instance, @@ -150,7 +149,7 @@ object ModalDrawerContent : Tab { DrawerShortcut( title = listingType.toReadableName(), icon = listingType.toIcon(), - onSelected = { + onSelected = rememberCallback(coordinator) { coordinator.toggleDrawer() coordinator.sendEvent( DrawerEvent.ChangeListingType(listingType) @@ -162,7 +161,7 @@ object ModalDrawerContent : Tab { item { DrawerShortcut(title = stringResource(MR.strings.navigation_drawer_title_bookmarks), icon = Icons.Default.Bookmarks, - onSelected = { + onSelected = rememberCallback(coordinator) { coordinator.toggleDrawer() coordinator.sendEvent(DrawerEvent.OpenBookmarks) }) @@ -171,7 +170,7 @@ object ModalDrawerContent : Tab { DrawerShortcut( title = stringResource(MR.strings.navigation_drawer_title_subscriptions), icon = Icons.Default.ManageAccounts, - onSelected = { + onSelected = rememberCallback(coordinator) { coordinator.toggleDrawer() coordinator.sendEvent(DrawerEvent.ManageSubscriptions) }) diff --git a/unit-managesubscriptions/build.gradle.kts b/unit-managesubscriptions/build.gradle.kts new file mode 100644 index 000000000..2e4c109d3 --- /dev/null +++ b/unit-managesubscriptions/build.gradle.kts @@ -0,0 +1,81 @@ +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) +} + +@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) +kotlin { + applyDefaultHierarchyTemplate() + + androidTarget { + compilations.all { + kotlinOptions { + jvmTarget = "1.8" + } + } + } + iosX64() + iosArm64() + iosSimulatorArm64() + + sourceSets { + val commonMain by getting { + dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material) + implementation(compose.material3) + @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) + implementation(compose.components.resources) + implementation(compose.materialIconsExtended) + + implementation(libs.koin.core) + implementation(libs.voyager.screenmodel) + implementation(libs.voyager.navigator) + + implementation(projects.coreUtils) + implementation(projects.coreAppearance) + implementation(projects.coreArchitecture) + implementation(projects.coreCommonui.components) + implementation(projects.coreCommonui.lemmyui) + implementation(projects.coreCommonui.modals) + implementation(projects.coreCommonui.detailopenerApi) + implementation(projects.unitZoomableimage) + implementation(projects.unitWeb) + implementation(projects.unitCreatereport) + implementation(projects.unitCreatecomment) + implementation(projects.unitCreatepost) + implementation(projects.unitRemove) + implementation(projects.unitBan) + implementation(projects.unitCommunityinfo) + implementation(projects.unitInstanceinfo) + implementation(projects.unitCreatereport) + implementation(projects.unitReportlist) + implementation(projects.unitMulticommunity) + implementation(projects.coreNavigation) + implementation(projects.corePersistence) + implementation(projects.coreNotifications) + + implementation(projects.domainIdentity) + implementation(projects.domainLemmy.data) + implementation(projects.domainLemmy.repository) + + implementation(projects.resources) + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } +} + +android { + namespace = "com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions" + compileSdk = libs.versions.android.targetSdk.get().toInt() + defaultConfig { + minSdk = libs.versions.android.minSdk.get().toInt() + } +} diff --git a/unit-managesubscriptions/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt b/unit-managesubscriptions/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt new file mode 100644 index 000000000..15bd00895 --- /dev/null +++ b/unit-managesubscriptions/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt @@ -0,0 +1,9 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.di + +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.ManageSubscriptionsMviModel +import org.koin.java.KoinJavaComponent + +actual fun getManageSubscriptionsViewModel(): ManageSubscriptionsMviModel { + val res: ManageSubscriptionsMviModel by KoinJavaComponent.inject(ManageSubscriptionsMviModel::class.java) + return res +} diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsMviModel.kt b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsMviModel.kt similarity index 92% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsMviModel.kt rename to unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsMviModel.kt index 2cbf012c5..7c1086c32 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsMviModel.kt +++ b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsMviModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions +package com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions import androidx.compose.runtime.Stable import cafe.adriel.voyager.core.model.ScreenModel diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsScreen.kt b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsScreen.kt similarity index 97% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsScreen.kt rename to unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsScreen.kt index 6c52ece3e..4d29cf5ac 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsScreen.kt +++ b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsScreen.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions +package com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.slideInVertically @@ -58,10 +58,10 @@ import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigation import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs -import com.github.diegoberaldin.raccoonforlemmy.feature.search.di.getManageSubscriptionsViewModel -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail.MultiCommunityScreen -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor.MultiCommunityEditorScreen import com.github.diegoberaldin.raccoonforlemmy.resources.MR +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.di.getManageSubscriptionsViewModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail.MultiCommunityScreen +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor.MultiCommunityEditorScreen import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.launch diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsViewModel.kt b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsViewModel.kt similarity index 98% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsViewModel.kt rename to unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsViewModel.kt index ed7664d38..4ec9af914 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/managesubscriptions/ManageSubscriptionsViewModel.kt +++ b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/ManageSubscriptionsViewModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.managesubscriptions +package com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel diff --git a/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/ManageSubscriptionsModule.kt b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/ManageSubscriptionsModule.kt new file mode 100644 index 000000000..ff4fe3cf4 --- /dev/null +++ b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/ManageSubscriptionsModule.kt @@ -0,0 +1,24 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.di + +import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.ManageSubscriptionsMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.ManageSubscriptionsViewModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.di.multiCommunityModule +import org.koin.dsl.module + +val manageSubscriptionsModule = module { + includes(multiCommunityModule) + + factory { + ManageSubscriptionsViewModel( + mvi = DefaultMviModel(ManageSubscriptionsMviModel.UiState()), + identityRepository = get(), + communityRepository = get(), + accountRepository = get(), + multiCommunityRepository = get(), + hapticFeedback = get(), + notificationCenter = get(), + settingsRepository = get(), + ) + } +} \ No newline at end of file diff --git a/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt new file mode 100644 index 000000000..55d12cc11 --- /dev/null +++ b/unit-managesubscriptions/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt @@ -0,0 +1,5 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.di + +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.ManageSubscriptionsMviModel + +expect fun getManageSubscriptionsViewModel(): ManageSubscriptionsMviModel diff --git a/unit-managesubscriptions/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt b/unit-managesubscriptions/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt new file mode 100644 index 000000000..e52ea6221 --- /dev/null +++ b/unit-managesubscriptions/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/managesubscriptions/di/Utils.kt @@ -0,0 +1,12 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.di + +import com.github.diegoberaldin.raccoonforlemmy.unit.managesubscriptions.ManageSubscriptionsMviModel +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +actual fun getManageSubscriptionsViewModel(): ManageSubscriptionsMviModel = + UnitManageSubscriptionsDiHelper.manageSuscriptionsViewModel + +object UnitManageSubscriptionsDiHelper : KoinComponent { + val manageSuscriptionsViewModel: ManageSubscriptionsMviModel by inject() +} \ No newline at end of file diff --git a/unit-multicommunity/build.gradle.kts b/unit-multicommunity/build.gradle.kts new file mode 100644 index 000000000..c39c2eff8 --- /dev/null +++ b/unit-multicommunity/build.gradle.kts @@ -0,0 +1,80 @@ +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) +} + +@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) +kotlin { + applyDefaultHierarchyTemplate() + + androidTarget { + compilations.all { + kotlinOptions { + jvmTarget = "1.8" + } + } + } + iosX64() + iosArm64() + iosSimulatorArm64() + + sourceSets { + val commonMain by getting { + dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material) + implementation(compose.material3) + @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) + implementation(compose.components.resources) + implementation(compose.materialIconsExtended) + + implementation(libs.koin.core) + implementation(libs.voyager.screenmodel) + implementation(libs.voyager.navigator) + + implementation(projects.coreUtils) + implementation(projects.coreAppearance) + implementation(projects.coreArchitecture) + implementation(projects.coreCommonui.components) + implementation(projects.coreCommonui.lemmyui) + implementation(projects.coreCommonui.modals) + implementation(projects.unitZoomableimage) + implementation(projects.unitWeb) + implementation(projects.unitCreatereport) + implementation(projects.unitCreatecomment) + implementation(projects.unitCreatepost) + implementation(projects.unitRemove) + implementation(projects.unitBan) + implementation(projects.unitCommunityinfo) + implementation(projects.unitInstanceinfo) + implementation(projects.unitCreatereport) + implementation(projects.unitReportlist) + implementation(projects.coreCommonui.detailopenerApi) + implementation(projects.coreNavigation) + implementation(projects.corePersistence) + implementation(projects.coreNotifications) + + implementation(projects.domainIdentity) + implementation(projects.domainLemmy.data) + implementation(projects.domainLemmy.repository) + + implementation(projects.resources) + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } +} + +android { + namespace = "com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity" + compileSdk = libs.versions.android.targetSdk.get().toInt() + defaultConfig { + minSdk = libs.versions.android.minSdk.get().toInt() + } +} diff --git a/unit-multicommunity/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt b/unit-multicommunity/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt new file mode 100644 index 000000000..1111891c8 --- /dev/null +++ b/unit-multicommunity/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt @@ -0,0 +1,23 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.di + +import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.MultiCommunityModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail.MultiCommunityMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor.MultiCommunityEditorMviModel +import org.koin.core.parameter.parametersOf +import org.koin.java.KoinJavaComponent + +actual fun getMultiCommunityViewModel(community: MultiCommunityModel): MultiCommunityMviModel { + val res: MultiCommunityMviModel by KoinJavaComponent.inject( + MultiCommunityMviModel::class.java, + parameters = { parametersOf(community) } + ) + return res +} + +actual fun getMultiCommunityEditorViewModel(editedCommunity: MultiCommunityModel?): MultiCommunityEditorMviModel { + val res: MultiCommunityEditorMviModel by KoinJavaComponent.inject( + MultiCommunityEditorMviModel::class.java, + parameters = { parametersOf(editedCommunity) } + ) + return res +} diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityMviModel.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityMviModel.kt similarity index 95% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityMviModel.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityMviModel.kt index c3f0b5b8a..edd0732f5 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityMviModel.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityMviModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail import cafe.adriel.voyager.core.model.ScreenModel import com.github.diegoberaldin.raccoonforlemmy.core.appearance.data.PostLayout diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityScreen.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityScreen.kt similarity index 99% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityScreen.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityScreen.kt index 037a2425f..bbc9c4639 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityScreen.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityScreen.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.slideInVertically @@ -75,9 +75,9 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallb import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.getAdditionalLabel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toIcon -import com.github.diegoberaldin.raccoonforlemmy.feature.search.di.getMultiCommunityViewModel import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.unit.createreport.CreateReportScreen +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.di.getMultiCommunityViewModel import com.github.diegoberaldin.raccoonforlemmy.unit.web.WebViewScreen import com.github.diegoberaldin.raccoonforlemmy.unit.zoomableimage.ZoomableImageScreen import dev.icerock.moko.resources.compose.stringResource diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityViewModel.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityViewModel.kt similarity index 98% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityViewModel.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityViewModel.kt index 89e13367a..a80f1d27a 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/detail/MultiCommunityViewModel.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/detail/MultiCommunityViewModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.detail +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail import com.github.diegoberaldin.raccoonforlemmy.core.appearance.repository.ThemeRepository import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel @@ -19,7 +19,7 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toSortType import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.GetSortTypesUseCase import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PostRepository import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository -import com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.utils.MultiCommunityPaginator +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.utils.MultiCommunityPaginator import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import kotlinx.coroutines.flow.launchIn diff --git a/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/MultiCommunityModule.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/MultiCommunityModule.kt new file mode 100644 index 000000000..892ad363f --- /dev/null +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/MultiCommunityModule.kt @@ -0,0 +1,48 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.di + +import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail.MultiCommunityMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail.MultiCommunityViewModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor.MultiCommunityEditorMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor.MultiCommunityEditorViewModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.utils.DefaultMultiCommunityPaginator +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.utils.MultiCommunityPaginator +import org.koin.dsl.module + +val multiCommunityModule = module { + factory { params -> + MultiCommunityViewModel( + mvi = DefaultMviModel(MultiCommunityMviModel.UiState()), + community = params[0], + postRepository = get(), + identityRepository = get(), + apiConfigurationRepository = get(), + siteRepository = get(), + themeRepository = get(), + shareHelper = get(), + settingsRepository = get(), + notificationCenter = get(), + hapticFeedback = get(), + paginator = get(), + imagePreloadManager = get(), + getSortTypesUseCase = get(), + ) + } + factory { + DefaultMultiCommunityPaginator( + postRepository = get(), + ) + } + factory { params -> + MultiCommunityEditorViewModel( + mvi = DefaultMviModel(MultiCommunityEditorMviModel.UiState()), + editedCommunity = params[0], + identityRepository = get(), + communityRepository = get(), + accountRepository = get(), + multiCommunityRepository = get(), + notificationCenter = get(), + settingsRepository = get(), + ) + } +} \ No newline at end of file diff --git a/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt new file mode 100644 index 000000000..9b12f4ccd --- /dev/null +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt @@ -0,0 +1,9 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.di + +import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.MultiCommunityModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail.MultiCommunityMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor.MultiCommunityEditorMviModel + +expect fun getMultiCommunityViewModel(community: MultiCommunityModel): MultiCommunityMviModel + +expect fun getMultiCommunityEditorViewModel(editedCommunity: MultiCommunityModel?): MultiCommunityEditorMviModel diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorMviModel.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorMviModel.kt similarity index 93% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorMviModel.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorMviModel.kt index 9be274a6f..3084ee7d2 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorMviModel.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorMviModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor import cafe.adriel.voyager.core.model.ScreenModel import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorScreen.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorScreen.kt similarity index 98% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorScreen.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorScreen.kt index a21f1e432..c9a68f670 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorScreen.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorScreen.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -63,8 +63,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigation import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.MultiCommunityModel import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback -import com.github.diegoberaldin.raccoonforlemmy.feature.search.di.getMultiCommunityEditorViewModel import com.github.diegoberaldin.raccoonforlemmy.resources.MR +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.di.getMultiCommunityEditorViewModel import dev.icerock.moko.resources.compose.localized import dev.icerock.moko.resources.compose.stringResource import kotlinx.coroutines.flow.launchIn diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorViewModel.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorViewModel.kt similarity index 98% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorViewModel.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorViewModel.kt index c398f7007..a09185355 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/editor/MultiCommunityEditorViewModel.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/editor/MultiCommunityEditorViewModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.editor +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/CommunityPaginator.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/CommunityPaginator.kt similarity index 95% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/CommunityPaginator.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/CommunityPaginator.kt index 3b14e52bc..55a249b85 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/CommunityPaginator.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/CommunityPaginator.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.utils +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.utils import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.ListingType import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/DefaultMultiCommunityPaginator.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/DefaultMultiCommunityPaginator.kt similarity index 93% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/DefaultMultiCommunityPaginator.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/DefaultMultiCommunityPaginator.kt index aeda29243..944783807 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/DefaultMultiCommunityPaginator.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/DefaultMultiCommunityPaginator.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.utils +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.utils import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType diff --git a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/MultiCommunityPaginator.kt b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/MultiCommunityPaginator.kt similarity index 83% rename from feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/MultiCommunityPaginator.kt rename to unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/MultiCommunityPaginator.kt index 21fb7460b..2ea75ad48 100644 --- a/feature-search/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/search/multicommunity/utils/MultiCommunityPaginator.kt +++ b/unit-multicommunity/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/utils/MultiCommunityPaginator.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.search.multicommunity.utils +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.utils import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType diff --git a/unit-multicommunity/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt b/unit-multicommunity/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt new file mode 100644 index 000000000..7329efd9c --- /dev/null +++ b/unit-multicommunity/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/multicommunity/di/Utils.kt @@ -0,0 +1,26 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.di + +import com.github.diegoberaldin.raccoonforlemmy.core.persistence.data.MultiCommunityModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.detail.MultiCommunityMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.multicommunity.editor.MultiCommunityEditorMviModel +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject +import org.koin.core.parameter.parametersOf + +actual fun getMultiCommunityViewModel(community: MultiCommunityModel): MultiCommunityMviModel = + UnitMultiCommunityDiHelper.getMultiCommunityViewModel(community) + +actual fun getMultiCommunityEditorViewModel(editedCommunity: MultiCommunityModel?): MultiCommunityEditorMviModel = + UnitMultiCommunityDiHelper.getMultiCommunityEditorViewModel(editedCommunity) + +object UnitMultiCommunityDiHelper : KoinComponent { + internal fun getMultiCommunityViewModel(community: MultiCommunityModel): MultiCommunityMviModel { + val res: MultiCommunityMviModel by inject(parameters = { parametersOf(community) }) + return res + } + + internal fun getMultiCommunityEditorViewModel(editedCommunity: MultiCommunityModel?): MultiCommunityEditorMviModel { + val res: MultiCommunityEditorMviModel by inject(parameters = { parametersOf(editedCommunity) }) + return res + } +} \ No newline at end of file diff --git a/unit-postlist/build.gradle.kts b/unit-postlist/build.gradle.kts new file mode 100644 index 000000000..d4a9e5bbf --- /dev/null +++ b/unit-postlist/build.gradle.kts @@ -0,0 +1,80 @@ +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) +} + +@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) +kotlin { + applyDefaultHierarchyTemplate() + + androidTarget { + compilations.all { + kotlinOptions { + jvmTarget = "1.8" + } + } + } + iosX64() + iosArm64() + iosSimulatorArm64() + + sourceSets { + val commonMain by getting { + dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material) + implementation(compose.material3) + @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) + implementation(compose.components.resources) + implementation(compose.materialIconsExtended) + + implementation(libs.koin.core) + implementation(libs.voyager.screenmodel) + implementation(libs.voyager.navigator) + + implementation(projects.coreUtils) + implementation(projects.coreAppearance) + implementation(projects.coreArchitecture) + implementation(projects.coreCommonui.components) + implementation(projects.coreCommonui.lemmyui) + implementation(projects.coreCommonui.modals) + implementation(projects.unitZoomableimage) + implementation(projects.unitWeb) + implementation(projects.unitCreatereport) + implementation(projects.unitCreatecomment) + implementation(projects.unitCreatepost) + implementation(projects.unitRemove) + implementation(projects.unitBan) + implementation(projects.unitCommunityinfo) + implementation(projects.unitInstanceinfo) + implementation(projects.unitCreatereport) + implementation(projects.unitReportlist) + implementation(projects.coreCommonui.detailopenerApi) + implementation(projects.coreNavigation) + implementation(projects.corePersistence) + implementation(projects.coreNotifications) + + implementation(projects.domainIdentity) + implementation(projects.domainLemmy.data) + implementation(projects.domainLemmy.repository) + + implementation(projects.resources) + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + } +} + +android { + namespace = "com.github.diegoberaldin.raccoonforlemmy.unit.postlist" + compileSdk = libs.versions.android.targetSdk.get().toInt() + defaultConfig { + minSdk = libs.versions.android.minSdk.get().toInt() + } +} diff --git a/feature-home/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt b/unit-postlist/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt similarity index 54% rename from feature-home/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt rename to unit-postlist/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt index 3a50138ad..95f9242b9 100644 --- a/feature-home/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/di/Utils.kt +++ b/unit-postlist/src/androidMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt @@ -1,6 +1,6 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.home.di +package com.github.diegoberaldin.raccoonforlemmy.unit.postlist.di -import com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist.PostListMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.postlist.PostListMviModel import org.koin.java.KoinJavaComponent.inject actual fun getHomeScreenModel(): PostListMviModel { diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListMviModel.kt b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListMviModel.kt similarity index 97% rename from feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListMviModel.kt rename to unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListMviModel.kt index d0064778b..9284acacc 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListMviModel.kt +++ b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListMviModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist +package com.github.diegoberaldin.raccoonforlemmy.unit.postlist import androidx.compose.runtime.Stable import cafe.adriel.voyager.core.model.ScreenModel diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListScreen.kt b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListScreen.kt similarity index 99% rename from feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListScreen.kt rename to unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListScreen.kt index c1e927950..b3b11d30a 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListScreen.kt +++ b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListScreen.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist +package com.github.diegoberaldin.raccoonforlemmy.unit.postlist import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween @@ -69,6 +69,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.lemmyui.di.getFabN import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.RawContentDialog import com.github.diegoberaldin.raccoonforlemmy.core.commonui.modals.SortBottomSheet +import com.github.diegoberaldin.raccoonforlemmy.core.navigation.TabNavigationSection import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getDrawerCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.navigation.di.getNavigationCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.persistence.di.getSettingsRepository @@ -76,12 +77,11 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallb import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs import com.github.diegoberaldin.raccoonforlemmy.core.utils.keepscreenon.rememberKeepScreenOn import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel -import com.github.diegoberaldin.raccoonforlemmy.feature.home.di.getHomeScreenModel -import com.github.diegoberaldin.raccoonforlemmy.feature.home.ui.HomeTab import com.github.diegoberaldin.raccoonforlemmy.resources.MR import com.github.diegoberaldin.raccoonforlemmy.unit.createcomment.CreateCommentScreen import com.github.diegoberaldin.raccoonforlemmy.unit.createpost.CreatePostScreen import com.github.diegoberaldin.raccoonforlemmy.unit.createreport.CreateReportScreen +import com.github.diegoberaldin.raccoonforlemmy.unit.postlist.di.getHomeScreenModel import com.github.diegoberaldin.raccoonforlemmy.unit.web.WebViewScreen import com.github.diegoberaldin.raccoonforlemmy.unit.zoomableimage.ZoomableImageScreen import dev.icerock.moko.resources.compose.stringResource @@ -117,8 +117,8 @@ class PostListScreen : Screen { val detailOpener = remember { getDetailOpener() } LaunchedEffect(navigationCoordinator) { - navigationCoordinator.onDoubleTabSelection.onEach { tab -> - if (tab == HomeTab) { + navigationCoordinator.onDoubleTabSelection.onEach { section -> + if (section == TabNavigationSection.Home) { lazyListState.scrollToItem(0) topAppBarState.heightOffset = 0f topAppBarState.contentOffset = 0f diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListViewModel.kt b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListViewModel.kt similarity index 99% rename from feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListViewModel.kt rename to unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListViewModel.kt index f0bfca513..a9f7c4180 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostListViewModel.kt +++ b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostListViewModel.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist +package com.github.diegoberaldin.raccoonforlemmy.unit.postlist import com.github.diegoberaldin.raccoonforlemmy.core.appearance.repository.ThemeRepository import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel diff --git a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostsTopBar.kt b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostsTopBar.kt similarity index 98% rename from feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostsTopBar.kt rename to unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostsTopBar.kt index cf4aaeb06..42cead828 100644 --- a/feature-home/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/home/postlist/PostsTopBar.kt +++ b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/PostsTopBar.kt @@ -1,4 +1,4 @@ -package com.github.diegoberaldin.raccoonforlemmy.feature.home.postlist +package com.github.diegoberaldin.raccoonforlemmy.unit.postlist import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box diff --git a/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/PostListModule.kt b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/PostListModule.kt new file mode 100644 index 000000000..bdf060efb --- /dev/null +++ b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/PostListModule.kt @@ -0,0 +1,27 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.postlist.di + +import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.postlist.PostListMviModel +import com.github.diegoberaldin.raccoonforlemmy.unit.postlist.PostListViewModel +import org.koin.dsl.module + +val postListModule = module { + factory { + PostListViewModel( + mvi = DefaultMviModel(PostListMviModel.UiState()), + postRepository = get(), + apiConfigurationRepository = get(), + identityRepository = get(), + siteRepository = get(), + themeRepository = get(), + settingsRepository = get(), + shareHelper = get(), + notificationCenter = get(), + hapticFeedback = get(), + zombieModeHelper = get(), + imagePreloadManager = get(), + contentResetCoordinator = get(), + getSortTypesUseCase = get(), + ) + } +} \ No newline at end of file diff --git a/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt new file mode 100644 index 000000000..c78f9ac86 --- /dev/null +++ b/unit-postlist/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt @@ -0,0 +1,5 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.postlist.di + +import com.github.diegoberaldin.raccoonforlemmy.unit.postlist.PostListMviModel + +expect fun getHomeScreenModel(): PostListMviModel diff --git a/unit-postlist/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt b/unit-postlist/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt new file mode 100644 index 000000000..742d9b30a --- /dev/null +++ b/unit-postlist/src/iosMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/postlist/di/Utils.kt @@ -0,0 +1,11 @@ +package com.github.diegoberaldin.raccoonforlemmy.unit.postlist.di + +import com.github.diegoberaldin.raccoonforlemmy.unit.postlist.PostListMviModel +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +actual fun getHomeScreenModel(): PostListMviModel = UnitPostListDiHelper.model + +object UnitPostListDiHelper : KoinComponent { + val model: PostListMviModel by inject() +}