- Inverts public and private tabs

- adds number of users in the tab title
This commit is contained in:
Vitor Pamplona
2025-11-06 16:19:43 -05:00
parent d17f39e85b
commit 26a6b5d219
2 changed files with 49 additions and 25 deletions
@@ -151,24 +151,7 @@ fun PeopleListScreen(
containerColor = MaterialTheme.colorScheme.surface,
),
)
TabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
selectedTabIndex = pagerState.currentPage,
modifier = TabRowHeight,
) {
val scope = rememberCoroutineScope()
Tab(
selected = pagerState.currentPage == 0,
onClick = { scope.launch { pagerState.animateScrollToPage(0) } },
text = { Text(text = stringRes(R.string.private_members)) },
)
Tab(
selected = pagerState.currentPage == 1,
onClick = { scope.launch { pagerState.animateScrollToPage(1) } },
text = { Text(text = stringRes(R.string.public_members)) },
)
}
TopAppTabs(viewModel, pagerState)
}
},
) { padding ->
@@ -189,6 +172,45 @@ fun PeopleListScreen(
}
}
@Composable
fun TopAppTabs(
viewModel: PeopleListViewModel,
pagerState: PagerState,
) {
TabRow(
containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground,
selectedTabIndex = pagerState.currentPage,
modifier = TabRowHeight,
) {
val scope = rememberCoroutineScope()
Tab(
selected = pagerState.currentPage == 0,
onClick = { scope.launch { pagerState.animateScrollToPage(0) } },
text = {
val list = viewModel.selectedList.collectAsStateWithLifecycle()
val labelPublic =
list.value?.let {
stringRes(R.string.public_members_count, it.publicMembers.size)
} ?: stringRes(R.string.public_members)
Text(labelPublic)
},
)
Tab(
selected = pagerState.currentPage == 1,
onClick = { scope.launch { pagerState.animateScrollToPage(1) } },
text = {
val list = viewModel.selectedList.collectAsStateWithLifecycle()
val labelPrivate =
list.value?.let {
stringRes(R.string.private_members_count, it.privateMembersList.size)
} ?: stringRes(R.string.private_members)
Text(labelPrivate)
},
)
}
}
@Composable
fun TitleAndDescription(viewModel: PeopleListViewModel) {
val selectedSetState = viewModel.selectedList.collectAsStateWithLifecycle()
@@ -278,11 +300,11 @@ private fun RenderAddUserFieldAndSuggestions(
ShowUserSuggestions(
userSuggestions = viewModel.userSuggestions,
hasUserFlow = { user ->
viewModel.hasUserFlow(user, pagerState.currentPage == 0)
viewModel.hasUserFlow(user, pagerState.currentPage == 1)
},
onSelect = { user ->
accountViewModel.runIOCatching {
viewModel.addUserToSet(user, pagerState.currentPage == 0)
viewModel.addUserToSet(user, pagerState.currentPage == 1)
}
userName =
userName.copy(
@@ -291,7 +313,7 @@ private fun RenderAddUserFieldAndSuggestions(
},
onDelete = { user ->
accountViewModel.runIOCatching {
viewModel.removeUserFromSet(user, pagerState.currentPage == 0)
viewModel.removeUserFromSet(user, pagerState.currentPage == 1)
}
userName =
userName.copy(
@@ -317,9 +339,9 @@ private fun PeopleListPager(
when (page) {
0 ->
PeopleListView(
memberList = selectedSet.privateMembersList,
memberList = selectedSet.publicMembersList,
onDeleteUser = { user ->
onDeleteUser(user, true)
onDeleteUser(user, false)
},
modifier = Modifier.fillMaxSize(),
accountViewModel = accountViewModel,
@@ -328,9 +350,9 @@ private fun PeopleListPager(
1 ->
PeopleListView(
memberList = selectedSet.publicMembersList,
memberList = selectedSet.privateMembersList,
onDeleteUser = { user ->
onDeleteUser(user, false)
onDeleteUser(user, true)
},
modifier = Modifier.fillMaxSize(),
accountViewModel = accountViewModel,
+2
View File
@@ -1346,6 +1346,8 @@
<string name="in_the_list">Already in the list</string>
<string name="private_members">Private Members</string>
<string name="public_members">Public Members</string>
<string name="private_members_count">Private Members (%1$s)</string>
<string name="public_members_count">Public Members (%1$s)</string>
<string name="add_user_to_the_list">Add user to the list</string>
<string name="remove_user_from_the_list">Add user to the list</string>
</resources>