feat(15): displaying existing answers in form step

This commit is contained in:
efim 2023-07-15 04:36:28 +00:00
parent bf33858e41
commit 5f260455cb
4 changed files with 27 additions and 3 deletions

View File

@ -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"

View File

@ -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>

View File

@ -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"

View File

@ -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