4 changed files with 91 additions and 2 deletions
@ -0,0 +1,46 @@ |
|||||||
|
package com.utun.chat.ui.screens |
||||||
|
|
||||||
|
import androidx.compose.foundation.clickable |
||||||
|
import androidx.compose.foundation.layout.* |
||||||
|
import androidx.compose.foundation.rememberScrollState |
||||||
|
import androidx.compose.foundation.verticalScroll |
||||||
|
import androidx.compose.material3.* |
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.ui.Alignment |
||||||
|
import androidx.compose.ui.Modifier |
||||||
|
import androidx.compose.ui.res.stringResource |
||||||
|
import androidx.compose.ui.unit.dp |
||||||
|
import com.utun.chat.R |
||||||
|
import com.utun.chat.viewmodel.ChatViewModel |
||||||
|
|
||||||
|
/** Один диалог для строки участника и шапки PM; адресат и выбор переживают пересоздание Activity. */ |
||||||
|
@Composable |
||||||
|
fun PmInviteDialog(state: ChatViewModel.PmInviteState, onChoose: (String) -> Unit, onSend: () -> Unit, onDismiss: () -> Unit) { |
||||||
|
AlertDialog( |
||||||
|
onDismissRequest = onDismiss, |
||||||
|
title = { Text(stringResource(R.string.invite_to_group)) }, |
||||||
|
text = { |
||||||
|
Column(Modifier.verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.spacedBy(8.dp)) { |
||||||
|
Text(stringResource(R.string.invite_recipient, state.name)) |
||||||
|
Text(stringResource(R.string.invite_lifetime), style = MaterialTheme.typography.bodySmall) |
||||||
|
Text(stringResource(if (state.groups.isEmpty()) R.string.invite_no_groups else R.string.invite_choose_group)) |
||||||
|
state.groups.forEach { group -> |
||||||
|
Row(Modifier.fillMaxWidth().clickable(enabled = !state.pending) { onChoose(group.id) }, |
||||||
|
verticalAlignment = Alignment.CenterVertically) { |
||||||
|
RadioButton(selected = state.groupId == group.id, onClick = { onChoose(group.id) }, enabled = !state.pending) |
||||||
|
Text(group.name, modifier = Modifier.weight(1f)) |
||||||
|
} |
||||||
|
} |
||||||
|
if (state.pending) { |
||||||
|
LinearProgressIndicator(Modifier.fillMaxWidth()) |
||||||
|
Text(stringResource(R.string.invite_sending)) |
||||||
|
} |
||||||
|
if (state.errorRes != 0) Text(stringResource(state.errorRes), color = MaterialTheme.colorScheme.error) |
||||||
|
} |
||||||
|
}, |
||||||
|
confirmButton = { |
||||||
|
TextButton(onClick = onSend, enabled = !state.pending && state.groupId.isNotEmpty()) { Text(stringResource(R.string.invite)) } |
||||||
|
}, |
||||||
|
dismissButton = { TextButton(onClick = onDismiss) { Text(stringResource(R.string.cancel)) } } |
||||||
|
) |
||||||
|
} |
||||||
Loading…
Reference in new issue