feat(15): adding only required validation

This commit is contained in:
efim 2023-07-15 17:31:25 +00:00
parent dd590e1530
commit 96edd50450
2 changed files with 17 additions and 14 deletions

View File

@ -134,6 +134,7 @@
th:value="${formData.userAnswers.step1.name}" th:value="${formData.userAnswers.step1.name}"
name="name" name="name"
type="text" type="text"
required
placeholder="e.g. Stephen King" placeholder="e.g. Stephen King"
class="p-1 px-4 h-10 text-sm font-semibold rounded border md:p-6 md:px-4 md:text-base md:rounded-lg placeholder:text-cool-gray" class="p-1 px-4 h-10 text-sm font-semibold rounded border md:p-6 md:px-4 md:text-base md:rounded-lg placeholder:text-cool-gray"
/> />
@ -145,6 +146,7 @@
th:value="${formData.userAnswers.step1.email}" th:value="${formData.userAnswers.step1.email}"
name="email" name="email"
type="email" type="email"
required
placeholder="e.g. stephenking@lorem.com" placeholder="e.g. stephenking@lorem.com"
class="p-1 px-4 h-10 text-sm font-semibold rounded border md:p-6 md:px-4 md:text-base md:rounded-lg placeholder:text-cool-gray" class="p-1 px-4 h-10 text-sm font-semibold rounded border md:p-6 md:px-4 md:text-base md:rounded-lg placeholder:text-cool-gray"
/> />
@ -156,6 +158,7 @@
th:value="${formData.userAnswers.step1.phone}" th:value="${formData.userAnswers.step1.phone}"
name="phone" name="phone"
type="tel" type="tel"
required
placeholder="e.g. +1 234 567 890" placeholder="e.g. +1 234 567 890"
class="p-1 px-4 h-10 text-sm font-semibold rounded border md:p-6 md:px-4 md:text-base md:rounded-lg placeholder:text-cool-gray" class="p-1 px-4 h-10 text-sm font-semibold rounded border md:p-6 md:px-4 md:text-base md:rounded-lg placeholder:text-cool-gray"
/> />

View File

@ -4,6 +4,7 @@ import java.util.UUID
import scala.jdk.CollectionConverters._ import scala.jdk.CollectionConverters._
object Models { object Models {
/** Labels and form info which dynamically depend on user answers e.g plan /** Labels and form info which dynamically depend on user answers e.g plan
* name 'Arcade (Yearly)' vs 'Pro (Monthly)' * name 'Arcade (Yearly)' vs 'Pro (Monthly)'
*/ */
@ -47,14 +48,11 @@ object Models {
} }
final case class Answers( final case class Answers(
sessionId: String = "id1", sessionId: String = "",
currentStep: Int = 1, currentStep: Int = 1,
step1: StepAnswers.Step1 = step1: StepAnswers.Step1 = StepAnswers.Step1(),
StepAnswers.Step1("Test Name", "some@email.com", "+9876", true), step2: StepAnswers.Step2 = StepAnswers.Step2(),
step2: StepAnswers.Step2 = step3: StepAnswers.Step3 = StepAnswers.Step3(),
StepAnswers.Step2(PlanType.Advanced, true, true),
step3: StepAnswers.Step3 =
StepAnswers.Step3(Set(Addons.LargerStorage), true),
step4: StepAnswers.Step4 = StepAnswers.Step4() step4: StepAnswers.Step4 = StepAnswers.Step4()
) { ) {
// this is not enforced by compiler, sad, maintain by hand in html template files // this is not enforced by compiler, sad, maintain by hand in html template files
@ -87,9 +85,8 @@ object Models {
} }
} }
/** /** TODO would be nice to connect answers to the steps enum in some helpful
* TODO would be nice to connect answers to the steps enum * way.
* in some helpful way.
*/ */
enum Steps(val index: Int, val name: String): enum Steps(val index: Int, val name: String):
case Step1 extends Steps(1, "Your info") case Step1 extends Steps(1, "Your info")
@ -132,6 +129,7 @@ object Models {
println(s"parsing step 1 data $rawData") println(s"parsing step 1 data $rawData")
val fieldValues = rawData val fieldValues = rawData
.split("&") .split("&")
.filterNot(_.isEmpty())
.map { field => .map { field =>
val Array(name, value) = field.split("=") val Array(name, value) = field.split("=")
name -> value name -> value
@ -154,6 +152,7 @@ object Models {
println(s"parsing step 2 data $rawData") println(s"parsing step 2 data $rawData")
val fieldValues = rawData val fieldValues = rawData
.split("&") .split("&")
.filterNot(_.isEmpty())
.map { field => .map { field =>
val Array(name, value) = field.split("=") val Array(name, value) = field.split("=")
name -> value name -> value
@ -183,6 +182,7 @@ object Models {
// addon-services=OnlineService&addon-services=CustomProfile // addon-services=OnlineService&addon-services=CustomProfile
val fieldValues = rawData val fieldValues = rawData
.split("&") .split("&")
.filterNot(_.isEmpty())
.map { field => .map { field =>
val Array(name, value) = field.split("=") val Array(name, value) = field.split("=")
name -> value name -> value
@ -200,10 +200,10 @@ object Models {
final case class Step4( final case class Step4(
override val submitted: Boolean = false override val submitted: Boolean = false
) extends StepAnswers { ) extends StepAnswers {
override def fromFormData(rawData: String): Step4 = override def fromFormData(rawData: String): Step4 = {
{
val fieldValues = rawData val fieldValues = rawData
.split("&").filterNot(_.isEmpty()) .split("&")
.filterNot(_.isEmpty())
.map { field => .map { field =>
println(s"working with field $field") println(s"working with field $field")
val Array(name, value) = field.split("=") val Array(name, value) = field.split("=")