Pārlūkot izejas kodu

Worked on add new items navigation and routes & DI

Khubaib 4 mēneši atpakaļ
vecāks
revīzija
6f8c19de52

+ 19 - 0
app/src/main/java/com/fastest/pass/home/di/AddNewItemModule.kt

@@ -0,0 +1,19 @@
+package com.fastest.pass.home.di
+
+import com.fastest.pass.home.utils.AddNewItemsNavigation
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object AddNewItemModule {
+
+    @Provides
+    @Singleton
+    fun provideNavigation() : AddNewItemsNavigation {
+        return AddNewItemsNavigation()
+    }
+}

+ 10 - 5
app/src/main/java/com/fastest/pass/home/presentation/ui/components/AddNewItemsScreen.kt

@@ -25,7 +25,6 @@ import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.alpha
@@ -41,8 +40,12 @@ import com.fastest.pass.R
 import com.fastest.pass.home.domain.model.AddNewItem
 import com.fastest.pass.login.presentation.ui.components.ClickType
 
+enum class ClickTypeAddNewItem {
+    GOTO_HOME
+}
+
 @Composable
-fun AddNewItemsScreen() {
+fun AddNewItemsScreen(clickType: (ClickTypeAddNewItem) -> Unit) {
     Column(
         modifier = Modifier
             .fillMaxSize()
@@ -58,7 +61,9 @@ fun AddNewItemsScreen() {
         ) { }
 
         Spacer(modifier = Modifier.height(20.dp))
-        ShowAddNewItemsHeader(text = stringResource(id = R.string.add_new_items)) {}
+        ShowAddNewItemsHeader(text = stringResource(id = R.string.add_new_items)) { clickTypeAddNewItem ->
+            clickType(clickTypeAddNewItem)
+        }
         Spacer(modifier = Modifier.height(20.dp))
         GapLineANI()
         Spacer(modifier = Modifier.height(0.dp))
@@ -67,7 +72,7 @@ fun AddNewItemsScreen() {
 }
 
 @Composable
-fun ColumnScope.ShowAddNewItemsHeader(text: String, clickType: (ClickType) -> Unit) {
+fun ColumnScope.ShowAddNewItemsHeader(text: String, clickType: (ClickTypeAddNewItem) -> Unit) {
     val c = LocalContext.current
     Row(
         modifier = Modifier
@@ -77,7 +82,7 @@ fun ColumnScope.ShowAddNewItemsHeader(text: String, clickType: (ClickType) -> Un
     ) {
         IconButton(
             onClick = {
-                clickType.invoke(ClickType.GO_BACK)
+                clickType.invoke(ClickTypeAddNewItem.GOTO_HOME)
             },
             modifier = Modifier
                 .padding(start = 30.dp)

+ 21 - 4
app/src/main/java/com/fastest/pass/home/presentation/ui/fragment/AddNewItemsFragment.kt

@@ -12,18 +12,29 @@ import androidx.compose.material.Scaffold
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.ComposeView
 import androidx.compose.ui.res.colorResource
+import androidx.fragment.app.viewModels
 import com.fastest.pass.BaseFragment
 import com.fastest.pass.R
 import com.fastest.pass.home.presentation.ui.components.AddNewItemsScreen
-import com.fastest.pass.home.presentation.ui.components.ClickType
-import com.fastest.pass.home.presentation.ui.components.HomeScreen
-import com.fastest.pass.home.utils.HomeRoute
+import com.fastest.pass.home.presentation.ui.components.ClickTypeAddNewItem
+import com.fastest.pass.home.presentation.viewmodels.AddNewItemsViewModel
+import com.fastest.pass.home.utils.AddNewItemsNavigation
+import com.fastest.pass.home.utils.AddNewItemsRoute
 import com.fastest.pass.ui.theme.FastestPassTheme
+import dagger.hilt.android.AndroidEntryPoint
+import javax.inject.Inject
 
+@AndroidEntryPoint
 class AddNewItemsFragment : BaseFragment() {
 
+    val viewmodel: AddNewItemsViewModel by viewModels()
+
+    @Inject
+    lateinit var navigation: AddNewItemsNavigation
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        navigation.navigate(this)
     }
 
     override fun onCreateView(
@@ -43,7 +54,13 @@ class AddNewItemsFragment : BaseFragment() {
                                 .background(colorResource(id = R.color.white))
                                 .padding(paddingValues.calculateBottomPadding())
                         ) {
-                            AddNewItemsScreen()
+                            AddNewItemsScreen { clickTypeAddNewItem ->
+                                when (clickTypeAddNewItem) {
+                                    ClickTypeAddNewItem.GOTO_HOME -> {
+                                        viewmodel.navigateTo(AddNewItemsRoute.Go_Back_Home)
+                                    }
+                                }
+                            }
                         }
                     }
                 }

+ 8 - 0
app/src/main/java/com/fastest/pass/home/presentation/viewmodels/AddNewItemsViewModel.kt

@@ -1,6 +1,14 @@
 package com.fastest.pass.home.presentation.viewmodels
 
 import androidx.lifecycle.ViewModel
+import com.fastest.pass.home.utils.AddNewItemsRoute
+import kotlinx.coroutines.flow.MutableStateFlow
 
 class AddNewItemsViewModel : ViewModel() {
+    private val _router = MutableStateFlow<AddNewItemsRoute>(AddNewItemsRoute.OpenNoneScreen)
+    val router: MutableStateFlow<AddNewItemsRoute> = _router
+
+    fun navigateTo(addNewItemsRoute: AddNewItemsRoute) {
+        _router.value = addNewItemsRoute
+    }
 }

+ 20 - 0
app/src/main/java/com/fastest/pass/home/utils/AddNewItemsNavigation.kt

@@ -0,0 +1,20 @@
+package com.fastest.pass.home.utils
+
+import androidx.lifecycle.lifecycleScope
+import androidx.navigation.fragment.findNavController
+import com.fastest.pass.home.presentation.ui.fragment.AddNewItemsFragment
+
+class AddNewItemsNavigation {
+    fun navigate(addNewItemsFragment: AddNewItemsFragment) {
+        addNewItemsFragment.lifecycleScope.launchWhenStarted {
+            addNewItemsFragment.viewmodel.router.collect { router ->
+                when (router) {
+                    AddNewItemsRoute.Go_Back_Home -> {
+                        addNewItemsFragment.findNavController().popBackStack()
+                    }
+                    AddNewItemsRoute.OpenNoneScreen -> {}
+                }
+            }
+        }
+    }
+}

+ 6 - 0
app/src/main/java/com/fastest/pass/home/utils/AddNewItemsRoute.kt

@@ -0,0 +1,6 @@
+package com.fastest.pass.home.utils
+
+sealed class AddNewItemsRoute {
+    data object Go_Back_Home : AddNewItemsRoute()
+    data object OpenNoneScreen : AddNewItemsRoute()
+}