diff --git a/15-multi-step-form/src/main/resources/templates/step2.html b/15-multi-step-form/src/main/resources/templates/step2.html
index 75f0d7e..0601aa7 100644
--- a/15-multi-step-form/src/main/resources/templates/step2.html
+++ b/15-multi-step-form/src/main/resources/templates/step2.html
@@ -166,6 +166,7 @@
diff --git a/15-multi-step-form/src/main/resources/templates/step3.html b/15-multi-step-form/src/main/resources/templates/step3.html
index 954c770..6cd8a04 100644
--- a/15-multi-step-form/src/main/resources/templates/step3.html
+++ b/15-multi-step-form/src/main/resources/templates/step3.html
@@ -114,6 +114,7 @@
@@ -137,6 +138,7 @@
id="larger-storage"
type="checkbox"
name="addon-services"
+ value="LargerStorage"
class="my-7 w-6 h-6 peer"
/>
this.copy(
- step1 = this.step1.fromFormData(rawData),
- currentStep = stepNum + 1
- )
- case 2 => this.copy(
- step2 = this.step2.fromFormData(rawData),
- currentStep = stepNum + 1
- )
- case 3 => this.copy(
- step3 = this.step3.fromFormData(rawData),
- currentStep = stepNum + 1
- )
- case 4 => this.copy(
- currentStep = stepNum + 1
- )
+ case 1 =>
+ this.copy(
+ step1 = this.step1.fromFormData(rawData),
+ currentStep = stepNum + 1
+ )
+ case 2 =>
+ this.copy(
+ step2 = this.step2.fromFormData(rawData),
+ currentStep = stepNum + 1
+ )
+ case 3 =>
+ this.copy(
+ step3 = this.step3.fromFormData(rawData),
+ currentStep = stepNum + 1
+ )
+ case 4 =>
+ this.copy(
+ currentStep = stepNum + 1
+ )
case _ => this
}
}
@@ -50,10 +54,14 @@ object Models {
phone: String = ""
) extends StepAnswers {
override def fromFormData(rawData: String): Step1 = {
- val fieldValues = rawData.split("&").map { field =>
- val Array(name, value) = field.split("=")
- name -> value
- }.toMap
+ println(s"parsing step 1 data $rawData")
+ val fieldValues = rawData
+ .split("&")
+ .map { field =>
+ val Array(name, value) = field.split("=")
+ name -> value
+ }
+ .toMap
val name = fieldValues.getOrElse("name", "")
val email = fieldValues.getOrElse("email", "")
@@ -67,15 +75,41 @@ object Models {
isYearly: Boolean = false
) extends StepAnswers {
override def fromFormData(rawData: String): Step2 = {
- val a = 1
- Step2()
+ println(s"parsing step 2 data $rawData")
+ val fieldValues = rawData
+ .split("&")
+ .map { field =>
+ val Array(name, value) = field.split("=")
+ name -> value
+ }
+ .toMap
+
+ val planType =
+ PlanType.valueOf(fieldValues.getOrElse("plan-type", "Arcade"))
+ val isYearly = fieldValues.get("isPackageYearly").contains("on")
+
+ Step2(planType, isYearly)
}
}
final case class Step3(addons: Set[Addons] = Set.empty)
extends StepAnswers {
override def fromFormData(rawData: String): Step3 = {
- val a = 1
- Step3()
+ println(s"parsing step 3 data $rawData")
+ // for multiple checkboxes data comes in form of
+ // addon-services=OnlineService&addon-services=CustomProfile
+ val fieldValues = rawData
+ .split("&")
+ .map { field =>
+ val Array(name, value) = field.split("=")
+ name -> value
+ }
+
+ val addonsStrings = fieldValues.groupMap(_._1)(_._2)
+ .getOrElse("addon-services", Array.empty[String])
+ println(s"in step 3 got strings $addonsStrings")
+ val addons = addonsStrings.map(Addons.valueOf(_)).toSet
+
+ Step3(addons)
}
}
}
diff --git a/15-multi-step-form/src/main/scala/multistepform/Routes.scala b/15-multi-step-form/src/main/scala/multistepform/Routes.scala
index 61d7f33..0201045 100644
--- a/15-multi-step-form/src/main/scala/multistepform/Routes.scala
+++ b/15-multi-step-form/src/main/scala/multistepform/Routes.scala
@@ -69,7 +69,9 @@ case class Routes()(implicit cc: castor.Context, log: cask.Logger)
*/
@cask.get("/get-form")
def getForm(sessionId: cask.Cookie) = {
- val state = Models.Answers(currentStep = 1)
+ val id = sessionId.value
+ val state = Sessions.sessionReplies.getOrElse(id, Answers(id))
+ println(s"starting form for $state")
val context = new Context()
context.setVariable(formDataContextVarName, state)
val formFragment = templateEngine.process(
@@ -96,6 +98,9 @@ case class Routes()(implicit cc: castor.Context, log: cask.Logger)
val userAnswers = Sessions.sessionReplies.getOrElse(id, Answers(id))
val updatedAnswers = userAnswers.updateStep(stepNum, request.text())
+
+ Sessions.sessionReplies.update(id, updatedAnswers)
+
val context = new Context()
context.setVariable(formDataContextVarName, updatedAnswers)
val nextFormFragment = templateEngine.process(