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 ff5f2e959b4fb614a05e801f14c2c8eab8b63580..f2a7fcca1f805fb0081535195e1bcd9efe34e4cb 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 @@ -71,15 +71,15 @@ fun main() = preview( "error type" to PreviewUtils.Values( 0, listOf( - OwnLinkError(link), - RemoteInvalidError(link), - AliasInvalidError(link, ""), - LinkInvalidError(link), - PublicKeyInvalidError(link), - ErrorContactAlreadyExists(link, "David", "chuck"), - ErrorPendingAlreadyExists(link, "Frank", "chuck"), + OwnLinkError::class.simpleName!!, + RemoteInvalidError::class.simpleName!!, + AliasInvalidError::class.simpleName!!, + LinkInvalidError::class.simpleName!!, + PublicKeyInvalidError::class.simpleName!!, + ErrorContactAlreadyExists::class.simpleName!!, + ErrorPendingAlreadyExists::class.simpleName!!, ) - ) { error -> error.javaClass.simpleName }, + ), ) { val localLink = getStringParameter("local link") AddContactDialog( @@ -91,11 +91,26 @@ fun main() = preview( setAddContactAlias = { alias -> setStringParameter("alias", alias) }, handshakeLink = localLink, onSubmitAddContactDialog = { setBooleanParameter("error visible", true) }, - error = if (getBooleanParameter("error visible")) getGenericParameter("error type") else null, + error = if (getBooleanParameter("error visible")) mapErrors(getStringParameter("error type")) else null, onErrorDialogDismissed = { setBooleanParameter("error visible", false) }, ) } +fun PreviewUtils.PreviewScope.mapErrors(name: String?): AddContactError? = when (name) { + OwnLinkError::class.simpleName!! -> OwnLinkError(link) + RemoteInvalidError::class.simpleName!! -> RemoteInvalidError(link) + AliasInvalidError::class.simpleName!! -> AliasInvalidError(link, "") + LinkInvalidError::class.simpleName!! -> LinkInvalidError(link) + PublicKeyInvalidError::class.simpleName!! -> PublicKeyInvalidError(link) + ErrorContactAlreadyExists::class.simpleName!! -> ErrorContactAlreadyExists( + link, "David", getStringParameter("alias") + ) + ErrorPendingAlreadyExists::class.simpleName!! -> ErrorPendingAlreadyExists( + link, "Frank", getStringParameter("alias") + ) + else -> null +} + @Composable fun AddContactDialog( viewModel: AddContactViewModel = viewModel(), 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 d4337e68519e1b2e6af584b46e6c090b97496833..cbe270a48448d283db5a339c59574bd806c109f1 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt @@ -65,7 +65,7 @@ object PreviewUtils { val parameters = mutableMapOf<String, MutableState<Any>>() - inline fun <reified T> getDatatype(name: String): T { + private inline fun <reified T> getDatatype(name: String): 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}") return state.value as T @@ -97,8 +97,6 @@ object PreviewUtils { fun setFloatParameter(name: String, value: Float) = setDatatype(name, value) - inline fun <reified T : Any> getGenericParameter(name: String) = getDatatype<T>(name) - fun getRandomId() = random.nextBytes(UniqueId.LENGTH) @Composable @@ -162,18 +160,18 @@ object PreviewUtils { } @Composable - private fun <T> PreviewScope.addDropDownParameter( + private fun PreviewScope.addDropDownParameter( name: String, - initial: Values<T>, + initial: Values, ) { var expanded by remember { mutableStateOf(false) } val items = initial.values val initialValue = items[initial.initial] var selectedIndex by remember { mutableStateOf(initial.initial) } - addParameter(name, initialValue!!) { value -> + addParameter(name, initialValue) { value -> Box(modifier = Modifier.fillMaxSize().wrapContentSize(Alignment.TopStart)) { Text( - initial.toString(items[selectedIndex]), + items[selectedIndex], modifier = Modifier.fillMaxWidth().clickable(onClick = { expanded = true }) ) DropdownMenu( @@ -186,10 +184,10 @@ object PreviewUtils { onClick = { selectedIndex = index expanded = false - value.value = items[index]!! + value.value = items[index] } ) { - Text(text = initial.toString(s)) + Text(text = s) } } } @@ -222,7 +220,7 @@ object PreviewUtils { is Long -> scope.addLongParameter(name, initial) is Float -> scope.addFloatParameter(name, initial) is FloatSlider -> scope.addFloatSliderParameter(name, initial) - is Values<*> -> scope.addDropDownParameter(name, initial) + is Values -> scope.addDropDownParameter(name, initial) else -> throw IllegalArgumentException("Type ${initial::class.simpleName} is not supported for previewing.") } } @@ -246,9 +244,8 @@ object PreviewUtils { val max: Float, ) - data class Values<T>( + data class Values( val initial: Int, - val values: List<T>, - val toString: (T) -> String, + val values: List<String>, ) }