at Elemica, so as we run into issues we'll be addressing them.
hopefully by the end of the year.
I'll drop a slightly simplified version of the first form that Ari built using lift-formality
val processingMode =
selectField[ProcessingMode](
".upload-processing-mode",
processingModes,
asRadioButtons = true
) ? { mode: Box[ProcessingMode] =>
mode match {
case Full(_) => Empty
case _ => Full(S ? "validation.notEmpty")
}
}
val connectionGroup = field[String]("#connection-configuration-value") ? notEmpty
val uploadedFileField = fileUploadField("#message-file-upload")
val pastedTextField = field[String]("#paste-message")
val inboundConfigurationIdGroup =
fieldGroup(".inbound-configuration").withFields(
processingMode,
connectionGroup
).withBoxedConverter { (processingMode: Box[ProcessingMode], connectionGroupId: Box[String]) =>
for {
mode <- processingMode
connectionGroupId <- connectionGroupId
connectionGroup <- ConnectionGroup.get(connectionGroupId)
inboundGroup <- connectionGroup.inboundConnectionModeGroup
configurationId <- Box(inboundGroup.getConfigurationIdForProcessingMode(mode)) ?~ (S ? "messageSubmission-configurationNotAvailableForMode") ~> "inbound-configuration"
} yield {
configurationId
}
}
val messageContentGroup =
fieldGroup(".upload-message-container").withFields(
uploadedFileField,
pastedTextField
).withBoxedConverter { (file: Box[FileParamHolder], text: Box[String]) =>
val textBytes = text.filter(! _.isEmpty).map(_.getBytes(Charsets.UTF_8))
val fileBytes = file.map(_.file)
textBytes or fileBytes match {
case empty: EmptyBox =>
S.error("upload-message-container", S ? "submitMessageModal-mustHaveEitherFileOrMessage")
Empty
case bytes =>
bytes
}
}
val messageSubmissionForm =
form withAjaxFields(
inboundConfigurationIdGroup,
messageContentGroup
) onSuccess { (inboundConfigurationId, messageContent) =>
handleSubmitResult(submitMessage(inboundConfigurationId, messageContent))
MessageProcessed
}
"form" #> messageSubmissionForm.binder