feat(15): displaying existing answers in form step
This commit is contained in:
parent
bf33858e41
commit
5f260455cb
|
@ -105,6 +105,7 @@
|
||||||
<label for="name" class="pt-3 text-sm md:pt-5 md:pb-2 text-marine-blue">Name</label>
|
<label for="name" class="pt-3 text-sm md:pt-5 md:pb-2 text-marine-blue">Name</label>
|
||||||
<input
|
<input
|
||||||
id="name"
|
id="name"
|
||||||
|
th:value="${formData.step1.name}"
|
||||||
name="name"
|
name="name"
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="e.g. Stephen King"
|
placeholder="e.g. Stephen King"
|
||||||
|
@ -115,6 +116,7 @@
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
id="email"
|
id="email"
|
||||||
|
th:value="${formData.step1.email}"
|
||||||
name="email"
|
name="email"
|
||||||
type="email"
|
type="email"
|
||||||
placeholder="e.g. stephenking@lorem.com"
|
placeholder="e.g. stephenking@lorem.com"
|
||||||
|
@ -125,6 +127,7 @@
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
id="phone"
|
id="phone"
|
||||||
|
th:value="${formData.step1.phone}"
|
||||||
name="phone"
|
name="phone"
|
||||||
type="tel"
|
type="tel"
|
||||||
placeholder="e.g. +1 234 567 890"
|
placeholder="e.g. +1 234 567 890"
|
||||||
|
|
|
@ -119,6 +119,7 @@
|
||||||
name="plan-type"
|
name="plan-type"
|
||||||
value="Arcade"
|
value="Arcade"
|
||||||
class="hidden peer"
|
class="hidden peer"
|
||||||
|
th:checked="${formData.step2.planType.toString()} == 'Acrade'"
|
||||||
checked
|
checked
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
|
@ -135,6 +136,7 @@
|
||||||
name="plan-type"
|
name="plan-type"
|
||||||
value="Advanced"
|
value="Advanced"
|
||||||
class="hidden peer"
|
class="hidden peer"
|
||||||
|
th:checked="${formData.step2.planType.toString()} == 'Advanced'"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia"
|
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia"
|
||||||
|
@ -150,6 +152,7 @@
|
||||||
name="plan-type"
|
name="plan-type"
|
||||||
value="Pro"
|
value="Pro"
|
||||||
class="hidden peer"
|
class="hidden peer"
|
||||||
|
th:checked="${formData.step2.planType.toString()} == 'Pro'"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia"
|
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia"
|
||||||
|
@ -169,6 +172,7 @@
|
||||||
name="isPackageYearly"
|
name="isPackageYearly"
|
||||||
role="switch"
|
role="switch"
|
||||||
id="packageDuration"
|
id="packageDuration"
|
||||||
|
th:checked="${formData.step2.isYearly}"
|
||||||
/>
|
/>
|
||||||
<span class="row-start-1 text-marine-blue peer-checked:text-cool-gray">Monthly</span>
|
<span class="row-start-1 text-marine-blue peer-checked:text-cool-gray">Monthly</span>
|
||||||
<span class="row-start-1 text-cool-gray peer-checked:text-marine-blue">Yearly</span>
|
<span class="row-start-1 text-cool-gray peer-checked:text-marine-blue">Yearly</span>
|
||||||
|
|
|
@ -117,6 +117,7 @@
|
||||||
value="OnlineService"
|
value="OnlineService"
|
||||||
name="addon-services"
|
name="addon-services"
|
||||||
class="my-7 w-6 h-6 peer"
|
class="my-7 w-6 h-6 peer"
|
||||||
|
th:checked="${formData.step3.containsAddon('OnlineService')}"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia/50"
|
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia/50"
|
||||||
|
@ -140,6 +141,7 @@
|
||||||
name="addon-services"
|
name="addon-services"
|
||||||
value="LargerStorage"
|
value="LargerStorage"
|
||||||
class="my-7 w-6 h-6 peer"
|
class="my-7 w-6 h-6 peer"
|
||||||
|
th:checked="${formData.step3.containsAddon('LargerStorage')}"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia/50"
|
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia/50"
|
||||||
|
@ -163,6 +165,7 @@
|
||||||
name="addon-services"
|
name="addon-services"
|
||||||
value="CustomProfile"
|
value="CustomProfile"
|
||||||
class="my-7 w-6 h-6 peer"
|
class="my-7 w-6 h-6 peer"
|
||||||
|
th:checked="${formData.step3.containsAddon('CustomProfile')}"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia/50"
|
class="absolute inset-y-0 inset-x-0 rounded-lg border border-cool-gray peer-checked:border-purplish-blue peer-checked:bg-magnolia/50"
|
||||||
|
|
|
@ -3,12 +3,21 @@ package multistepform
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
object Models {
|
object Models {
|
||||||
|
val testAnsw = Answers(
|
||||||
|
sessionId= "id1",
|
||||||
|
currentStep = 1,
|
||||||
|
step1 = StepAnswers.Step1("Test Name", "some@email.com", "+9876", true),
|
||||||
|
step2 = StepAnswers.Step2(PlanType.Advanced, true, true),
|
||||||
|
step3 = StepAnswers.Step3(Set(Addons.LargerStorage), true),
|
||||||
|
step4 = StepAnswers.Step4(true)
|
||||||
|
)
|
||||||
|
|
||||||
final case class Answers(
|
final case class Answers(
|
||||||
sessionId: String = "id1",
|
sessionId: String = "id1",
|
||||||
currentStep: Int = 1,
|
currentStep: Int = 1,
|
||||||
step1: StepAnswers.Step1 = StepAnswers.Step1(),
|
step1: StepAnswers.Step1 = StepAnswers.Step1("Test Name", "some@email.com", "+9876", true),
|
||||||
step2: StepAnswers.Step2 = StepAnswers.Step2(),
|
step2: StepAnswers.Step2 = StepAnswers.Step2(PlanType.Advanced, true, true),
|
||||||
step3: StepAnswers.Step3 = StepAnswers.Step3(),
|
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
|
||||||
|
@ -100,6 +109,11 @@ object Models {
|
||||||
addons: Set[Addons] = Set.empty,
|
addons: Set[Addons] = Set.empty,
|
||||||
override val submitted: Boolean = false
|
override val submitted: Boolean = false
|
||||||
) extends StepAnswers {
|
) extends StepAnswers {
|
||||||
|
|
||||||
|
def containsAddon(addonName: String): Boolean = {
|
||||||
|
addons.contains(Addons.valueOf(addonName))
|
||||||
|
}
|
||||||
|
|
||||||
override def fromFormData(rawData: String): Step3 = {
|
override def fromFormData(rawData: String): Step3 = {
|
||||||
println(s"parsing step 3 data $rawData")
|
println(s"parsing step 3 data $rawData")
|
||||||
// for multiple checkboxes data comes in form of
|
// for multiple checkboxes data comes in form of
|
||||||
|
|
Loading…
Reference in New Issue