Package-level declarations
Types
Link copied to clipboard
Represents the state of the UserInvitationScreen. This extends UserSelectionState to handle user selection.
Link copied to clipboard
class UserInvitationViewModel(repository: UserInvitationScreenResourceRepository, savedStateHandle: SavedStateHandle) : ViewModel, SendbirdViewModelContract
ViewModel class for UserInvitationScreen.
Link copied to clipboard
class UserInvitationViewModelParams @JvmOverloads constructor(val channelUrl: String, val applicationUserListQueryParams: ApplicationUserListQueryParams = ApplicationUserListQueryParams()) : SendbirdViewModelParams
Represents the parameters for the UserInvitationViewModel.
Functions
Link copied to clipboard
Link copied to clipboard
fun UserInvitationScreen(navController: NavController?, channelUrl: String, modifier: Modifier = Modifier, userInvitationScreenState: UserInvitationScreenState = rememberUserInvitationScreenState(), viewModel: UserInvitationViewModel = viewModel(
factory = UserInvitationViewModel.factory(
UserInvitationViewModelParams(channelUrl)
)
), onTopBarNavigationIconClick: () -> Unit = { navController?.popBackStack() }, onTopBarActionClick: (UserInvitationScreenState, UserInvitationViewModel) -> Unit = { state, vm ->
vm.invite(state.selectedUserIds)
}, onInvited: (channelUrl: String) -> Unit = {
navController?.popBackStack(SendbirdNavigationRoute.Channel(it).route, inclusive = false)
}, onChannelRemoved: (channelUrl: String) -> Unit = {
navController?.popBackStack(SendbirdNavigationRoute.Channels.route, inclusive = false)
}, topBar: @Composable (selectedUserCount: Int, onNavigationIconClick: () -> Unit, onActionClick: () -> Unit) -> Unit = { selectedUserCount, onNavigationIconClick, onActionClick ->
UserInvitationTopBar(
selectedUserCount,
onNavigationIconClick = onNavigationIconClick,
onActionClick = onActionClick
)
}, loading: @Composable () -> Unit = {
LoadingScreen()
}, failure: @Composable (e: Throwable) -> Unit = { e ->
if (e !is ChannelRemovedException) {
FailurePlaceholder(
onRetryClick = { viewModel.prepare() }
)
}
}, empty: @Composable () -> Unit = {
ScreenPlaceholder(
icon = painterResource(id = R.drawable.icon_members),
text = stringResource(id = R.string.sb_text_user_list_empty)
)
}, userItem: @Composable (user: UikitUser, isSelected: Boolean, isMember: Boolean, onCheckedChange: (user: UikitUser) -> Unit) -> Unit = { user, isSelected, isMember, onCheckedChange ->
UserInvitationItem(
user,
isSelected,
modifier = Modifier.clickable {
if (isMember.not()) onCheckedChange(user)
},
isMember = isMember
) {
onCheckedChange(it)
}
HorizontalDivider(
modifier = Modifier.padding(start = 68.dp),
color = MaterialTheme.colorScheme.onBackground.copy(alpha = SendbirdOpacity.ExtraLowOpacity)
)
})
Represents the screen for inviting users to a channel.
Link copied to clipboard
fun UserInvitationTopBar(selectedUserCount: Int, modifier: Modifier = Modifier, onNavigationIconClick: () -> Unit = {}, onActionClick: () -> Unit = {}, title: @Composable () -> Unit = {
TopBarTitleText(
stringResource(id = R.string.sb_text_header_invite_member),
modifier = Modifier.padding(12.dp)
)
}, navigationIcon: @Composable () -> Unit = {
BackButton(onClick = onNavigationIconClick)
}, action: @Composable () -> Unit = {
SendbirdTextButton(
text = if (selectedUserCount == 0) {
stringResource(id = R.string.sb_text_button_invite)
} else {
"${stringResource(id = R.string.sb_text_button_invite)} ($selectedUserCount)"
},
onClick = onActionClick,
enabled = selectedUserCount > 0
)
})
The top bar for the UserInvitationScreen.