diff --git a/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/AddContactDialog.kt b/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/AddContactDialog.kt index c66906e7ae9096d63fbd4613fb542979ef4e8a06..2537cc8bca1550548ec86384157fe67d6e619bcc 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/AddContactDialog.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/contact/add/remote/AddContactDialog.kt @@ -19,13 +19,52 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import org.briarproject.briar.desktop.utils.PreviewUtils.preview import org.briarproject.briar.desktop.viewmodel.viewModel -@OptIn(ExperimentalMaterialApi::class) +fun main() = preview( + "visible" to true, + "remote link" to "", + "local link" to "briar://ady23gvb2r76afe5zhxh5kvnh4b22zrcnxibn63tfknrdcwrw7zrs", + "alias" to "Alice", +) { + if (getBooleanParameter("visible")) { + AddContactDialog( + onClose = { setBooleanParameter("visible", false) }, + remoteHandshakeLink = getStringParameter("remote link"), + setRemoteHandshakeLink = { link -> setStringParameter("remote link", link) }, + alias = getStringParameter("alias"), + setAddContactAlias = { alias -> setStringParameter("alias", alias) }, + handshakeLink = getStringParameter("local link"), + onSubmitAddContactDialog = {} + ) + } +} + @Composable fun AddContactDialog( onClose: () -> Unit, viewModel: AddContactViewModel = viewModel(), +) = AddContactDialog( + onClose = onClose, + viewModel.remoteHandshakeLink.value, + viewModel::setRemoteHandshakeLink, + viewModel.alias.value, + viewModel::setAddContactAlias, + viewModel.handshakeLink.value, + viewModel::onSubmitAddContactDialog, +) + +@OptIn(ExperimentalMaterialApi::class) +@Composable +fun AddContactDialog( + onClose: () -> Unit, + remoteHandshakeLink: String, + setRemoteHandshakeLink: (String) -> Unit, + alias: String, + setAddContactAlias: (String) -> Unit, + handshakeLink: String, + onSubmitAddContactDialog: () -> Unit, ) { AlertDialog( onDismissRequest = onClose, @@ -44,8 +83,8 @@ fun AddContactDialog( Modifier.width(128.dp).align(Alignment.CenterVertically), ) TextField( - viewModel.remoteHandshakeLink.value, - viewModel::setRemoteHandshakeLink, + remoteHandshakeLink, + setRemoteHandshakeLink, modifier = Modifier.fillMaxWidth() ) } @@ -55,8 +94,8 @@ fun AddContactDialog( Modifier.width(128.dp).align(Alignment.CenterVertically), ) TextField( - viewModel.alias.value, - viewModel::setAddContactAlias, + alias, + setAddContactAlias, modifier = Modifier.fillMaxWidth() ) } @@ -66,7 +105,7 @@ fun AddContactDialog( modifier = Modifier.width(128.dp).align(Alignment.CenterVertically), ) TextField( - viewModel.handshakeLink.value, + handshakeLink, onValueChange = {}, modifier = Modifier.fillMaxWidth() ) @@ -74,7 +113,7 @@ fun AddContactDialog( } }, confirmButton = { - Button(onClick = { viewModel.onSubmitAddContactDialog(); onClose() }) { + Button(onClick = { onSubmitAddContactDialog(); onClose() }) { Text("Add") } }, diff --git a/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt b/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt index d03fd2bc25692a112236c9fbbf7efd4ea3ca0723..2af666641ee99b47d5684ad439af973ad828128e 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt @@ -34,7 +34,7 @@ object PreviewUtils { class PreviewScope { private val random = Random(0) - val parameters = mutableMapOf<String, State<Any>>() + val parameters = mutableMapOf<String, MutableState<Any>>() private inline fun <reified T> getDatatype(name: String): T { val state = parameters[name] ?: throw IllegalArgumentException("No parameter found with name '$name'") @@ -42,14 +42,28 @@ object PreviewUtils { return state.value as T } + private inline fun <reified T> setDatatype(name: String, value: T) { + val state = parameters[name] ?: throw IllegalArgumentException("No parameter found with name '$name'") + if (state.value !is T) throw IllegalArgumentException("Parameter '$name' is not of type ${T::class.simpleName}") + state.value = value!! + } + fun getStringParameter(name: String) = getDatatype<String>(name) + fun setStringParameter(name: String, value: String) = setDatatype(name, value) + fun getBooleanParameter(name: String) = getDatatype<Boolean>(name) + fun setBooleanParameter(name: String, value: Boolean) = setDatatype(name, value) + fun getIntParameter(name: String) = getDatatype<Int>(name) + fun setIntParameter(name: String, value: Int) = setDatatype(name, value) + fun getLongParameter(name: String) = getDatatype<Long>(name) + fun setLongParameter(name: String, value: Long) = setDatatype(name, value) + @Composable fun getRandomId() = remember { random.nextBytes(UniqueId.LENGTH) } @@ -68,7 +82,7 @@ object PreviewUtils { editField(value) } - parameters[name] = value + parameters[name] = value as MutableState<Any> } @Composable