Skip to content

Commit 46d9a79

Browse files
committed
Make the Explorer screen scrollable
1 parent c1dea5b commit 46d9a79

1 file changed

Lines changed: 74 additions & 61 deletions

File tree

Lines changed: 74 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.amrdeveloper.linkhub.ui.explorer
22

3-
import androidx.compose.foundation.layout.Column
43
import androidx.compose.foundation.layout.Row
54
import androidx.compose.foundation.layout.Spacer
65
import androidx.compose.foundation.layout.fillMaxSize
76
import androidx.compose.foundation.layout.fillMaxWidth
87
import androidx.compose.foundation.layout.height
98
import androidx.compose.foundation.layout.padding
109
import androidx.compose.foundation.layout.width
10+
import androidx.compose.foundation.lazy.LazyColumn
11+
import androidx.compose.foundation.lazy.items
1112
import androidx.compose.material3.Icon
1213
import androidx.compose.material3.LinearProgressIndicator
1314
import androidx.compose.material3.Scaffold
@@ -31,10 +32,9 @@ import androidx.navigation.NavController
3132
import com.amrdeveloper.linkhub.R
3233
import com.amrdeveloper.linkhub.data.Folder
3334
import 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
3636
import com.amrdeveloper.linkhub.ui.components.LinkActionsBottomSheet
37-
import com.amrdeveloper.linkhub.ui.components.LinkList
37+
import com.amrdeveloper.linkhub.ui.components.LinkItem
3838
import com.amrdeveloper.linkhub.ui.components.LinkhubToolbar
3939
import com.amrdeveloper.linkhub.util.UiPreferences
4040
import 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

Comments
 (0)