From 1547b08e067738308db4db14484f639d74cef039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de> Date: Sun, 26 Dec 2021 10:54:09 +0100 Subject: [PATCH] Add preview for AddContactDialog --- .../contact/add/remote/AddContactDialog.kt | 53 ++++++++++++++++--- .../briar/desktop/utils/PreviewUtils.kt | 18 ++++++- 2 files changed, 62 insertions(+), 9 deletions(-) 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 c66906e7ae..2537cc8bca 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 d03fd2bc25..2af666641e 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 -- GitLab