11package com.amrdeveloper.linkhub.ui.explorer
22
3- import androidx.compose.foundation.layout.Column
43import androidx.compose.foundation.layout.Row
54import androidx.compose.foundation.layout.Spacer
65import androidx.compose.foundation.layout.fillMaxSize
76import androidx.compose.foundation.layout.fillMaxWidth
87import androidx.compose.foundation.layout.height
98import androidx.compose.foundation.layout.padding
109import androidx.compose.foundation.layout.width
10+ import androidx.compose.foundation.lazy.LazyColumn
11+ import androidx.compose.foundation.lazy.items
1112import androidx.compose.material3.Icon
1213import androidx.compose.material3.LinearProgressIndicator
1314import androidx.compose.material3.Scaffold
@@ -31,10 +32,9 @@ import androidx.navigation.NavController
3132import com.amrdeveloper.linkhub.R
3233import com.amrdeveloper.linkhub.data.Folder
3334import com.amrdeveloper.linkhub.data.Link
34- import com.amrdeveloper.linkhub.ui.components.FolderList
35- import com.amrdeveloper.linkhub.ui.components.FolderViewKind
35+ import com.amrdeveloper.linkhub.ui.components.FolderItem
3636import com.amrdeveloper.linkhub.ui.components.LinkActionsBottomSheet
37- import com.amrdeveloper.linkhub.ui.components.LinkList
37+ import com.amrdeveloper.linkhub.ui.components.LinkItem
3838import com.amrdeveloper.linkhub.ui.components.LinkhubToolbar
3939import com.amrdeveloper.linkhub.util.UiPreferences
4040import com.amrdeveloper.linkhub.util.openLinkIntent
@@ -57,76 +57,89 @@ fun ExplorerScreen(
5757 val sortedFoldersState by viewModel.sortedFoldersState.collectAsStateWithLifecycle()
5858 val sortedLinksState by viewModel.sortedLinksState.collectAsStateWithLifecycle()
5959 Scaffold (topBar = { LinkhubToolbar (viewModel(), uiPreferences, navController) }) { padding ->
60- Column (
60+ LazyColumn (
6161 modifier = Modifier
6262 .fillMaxSize()
6363 .padding(padding)
6464 ) {
65- currentFolder?.let { FolderHeader (it) }
65+ item {
66+ currentFolder?.let { FolderHeader (it) }
67+ }
6668
6769 if (sortedFoldersState.isLoading || sortedLinksState.isLoading) {
68- LinearProgressIndicator (
70+ item {
71+ LinearProgressIndicator (
72+ modifier = Modifier
73+ .fillMaxWidth()
74+ .height(6 .dp)
75+ )
76+ }
77+ return @LazyColumn
78+ }
79+
80+ items(sortedFoldersState.data) { folder ->
81+ FolderItem (
82+ folder = folder,
83+ onClick = {
84+ viewModel.incrementFolderClickCount(folder)
85+ val bundle = bundleOf(" folder" to folder)
86+ navController.navigate(
87+ R .id.linkListFragment,
88+ bundle
89+ )
90+ },
91+ onLongClick = {
92+ val bundle = bundleOf(" folder" to folder)
93+ navController.navigate(
94+ R .id.folderFragment,
95+ bundle
96+ )
97+ },
98+ minimalModeEnabled = uiPreferences.isMinimalModeEnabled(),
6999 modifier = Modifier
70100 .fillMaxWidth()
71- .height( 6 .dp)
101+ .padding( 4 .dp)
72102 )
73- return @Column
74103 }
75104
76- FolderList (
77- folders = sortedFoldersState.data,
78- viewKind = FolderViewKind .List ,
79- onClick = { folder ->
80- viewModel.incrementFolderClickCount(folder)
81- val bundle = bundleOf(" folder" to folder)
82- navController.navigate(
83- R .id.linkListFragment,
84- bundle
85- )
86- },
87- onLongClick = { folder ->
88- val bundle = bundleOf(" folder" to folder)
89- navController.navigate(
90- R .id.folderFragment,
91- bundle
92- )
93- },
94- minimalModeEnabled = uiPreferences.isMinimalModeEnabled()
95- )
96-
97- LinkList (
98- links = sortedLinksState.data,
99- onClick = { link ->
100- viewModel.incrementLinkClickCount(link)
101- lastClickedLink = link
102- if (uiPreferences.isOpenLinkByClickOptionEnabled()) {
103- try {
104- openLinkIntent(context = context, link = link.url)
105- } catch (_: Exception ) {
105+ items(sortedLinksState.data) { link ->
106+ LinkItem (
107+ link = link,
108+ onClick = {
109+ viewModel.incrementLinkClickCount(link)
110+ lastClickedLink = link
111+ if (uiPreferences.isOpenLinkByClickOptionEnabled()) {
112+ try {
113+ openLinkIntent(context = context, link = link.url)
114+ } catch (_: Exception ) {
106115
116+ }
117+ } else {
118+ showLinkActionsDialog = true
107119 }
108- } else {
109- showLinkActionsDialog = true
110- }
111- },
112- onLongClick = { link ->
113- val bundle = bundleOf(" link" to link)
114- navController.navigate(
115- R .id.linkFragment,
116- bundle
117- )
118- },
119- showClickCount = uiPreferences.isClickCounterEnabled(),
120- minimalModeEnabled = uiPreferences.isMinimalModeEnabled()
121- )
120+ },
121+ onLongClick = {
122+ val bundle = bundleOf(" link" to link)
123+ navController.navigate(
124+ R .id.linkFragment,
125+ bundle
126+ )
127+ },
128+ showClickCount = uiPreferences.isClickCounterEnabled(),
129+ minimalModeEnabled = uiPreferences.isMinimalModeEnabled(),
130+ modifier = Modifier
131+ .fillMaxWidth()
132+ .padding(4 .dp)
133+ )
134+ }
135+ }
122136
123- if (showLinkActionsDialog) {
124- lastClickedLink?.let { link ->
125- LinkActionsBottomSheet (
126- link = link,
127- navController = navController,
128- onDialogDismiss = { showLinkActionsDialog = false })
129- }
137+ if (showLinkActionsDialog) {
138+ lastClickedLink?.let { link ->
139+ LinkActionsBottomSheet (
140+ link = link,
141+ navController = navController,
142+ onDialogDismiss = { showLinkActionsDialog = false })
130143 }
131144 }
132145 }
@@ -145,4 +158,4 @@ private fun FolderHeader(folder: Folder) {
145158
146159 Text (text = " /${folder.name} " )
147160 }
148- }
161+ }
0 commit comments