{"version":3,"file":"application.22aebb47.js","sources":["../../../app/javascript/entrypoints/application.ts"],"sourcesContent":["import \"../style.css\"\nimport \"whatwg-fetch\"\nimport { Application, Controller } from \"@hotwired/stimulus\"\n\nclass TooltipController extends Controller {\n  static targets = [`tip`]\n  declare readonly tipTarget: HTMLElement\n\n  showTip() {\n    this.tipTarget.hidden = false\n  }\n\n  hideTip() {\n    this.tipTarget.hidden = true\n  }\n\n  toggleTip() {\n    this.tipTarget.hidden = !this.tipTarget.hidden\n  }\n}\n\nclass FormController extends Controller {\n  static targets = [`button`, `stepIndicator`, `stepContent`, `productOptions`, `form`]\n  step: number = 0\n  declare readonly stepIndicatorTargets: HTMLElement[]\n  declare readonly stepContentTargets: HTMLElement[]\n  declare readonly productOptionsTarget: HTMLElement\n  declare readonly formTarget: HTMLFormElement\n\n  connect() {\n    this.refresh()\n    this.element.addEventListener(`keydown`, this.keydown.bind(this))\n  }\n\n  disconnect() {\n    this.element.removeEventListener(`keydown`, this.keydown.bind(this))\n  }\n\n  keydown(event: KeyboardEvent) {\n    if (event.key === `Enter`) {\n      event.preventDefault()\n    }\n  }\n\n  refresh() {\n    this.stepIndicatorTargets.forEach((el) => {\n      if (parseInt(el.dataset.step as string) === this.step) {\n        el.classList.remove(el.dataset.inactiveClass as string)\n        el.classList.add(el.dataset.activeClass as string)\n      } else {\n        el.classList.add(el.dataset.inactiveClass as string)\n        el.classList.remove(el.dataset.activeClass as string)\n      }\n    })\n    this.stepContentTargets.forEach((el) => {\n      if (parseInt(el.dataset.step as string) === this.step) {\n        el.hidden = false\n      } else {\n        el.hidden = true\n      }\n    })\n  }\n\n  nextStep(e: MouseEvent) {\n    const el = e.currentTarget as HTMLDivElement\n    const stepContent = this.getStepContent(e)\n    const inputs = Array.from(stepContent.querySelectorAll(`input, select`)) as Array<\n      HTMLInputElement | HTMLSelectElement\n    >\n    if (inputs.every((input) => input.reportValidity())) {\n      const step = parseInt(el.dataset.step as string)\n      this.step = step\n      this.refresh()\n    }\n  }\n\n  async submit(e: MouseEvent) {\n    e.preventDefault()\n    const stepContent = this.getStepContent(e)\n    const inputs = Array.from(stepContent.querySelectorAll(`input, textarea`))\n    if (!inputs.every((input) => input.reportValidity())) {\n      return\n    }\n    const formData = new FormData(this.element)\n    const hash = Object.fromEntries(formData.entries())\n    const resource = (e.currentTarget as HTMLButtonElement).dataset[`resource`]\n    let body = {}\n    body[resource] = hash\n    const resp = await fetch(`/${resource}s`, {\n      method: `POST`,\n      body: JSON.stringify(body),\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]').getAttribute(\"content\"),\n      },\n    })\n    if (resp.redirected) {\n      window.location.href = resp.url\n    } else {\n      this.element.querySelectorAll(`input`).forEach((input) => (input.value = ``))\n      this.element.querySelectorAll(`textarea`).forEach((textarea) => (textarea.value = ``))\n      this.element.querySelectorAll(`select`).forEach((select) => (select.value = ``))\n      this.step = 2\n      this.refresh()\n    }\n  }\n\n  prevStep(e: MouseEvent) {\n    const el = e.currentTarget as HTMLDivElement\n    const step = parseInt(el.dataset.step as string)\n    if (this.step !== 3 && step < this.step) {\n      this.step = step\n      this.refresh()\n    }\n  }\n\n  private getStepContent(event: Event): Element {\n    let el = event.target as HTMLElement\n    while (true) {\n      if (this.stepContentTargets.includes(el)) {\n        break\n      }\n      el = el.parentElement as HTMLElement\n    }\n    return el\n  }\n\n  seedProductOptions(event: InputEvent) {\n    const select = event.target as HTMLSelectElement\n    this.productOptionsTarget.querySelectorAll(\"option:not([value=''])\").forEach((option) => option.remove())\n    if (select.value === ``) {\n      this.productOptionsTarget.hidden = true\n    } else {\n      this.optionsForProductType(select.value).forEach((value) => {\n        const option = document.createElement(`option`)\n        option.value = value\n        option.innerText = value\n        this.productOptionsTarget.appendChild(option)\n      })\n\n      this.productOptionsTarget.hidden = false\n    }\n  }\n\n  optionsForProductType(productType: string) {\n    switch (productType) {\n      case `Submersible Pool Cover Pump`:\n        return [\n          `Black & Decker 350 GPH Pool Cover Pump`,\n          `Black & Decker 800 GPH Pool Cover Pump`,\n          `Black & Decker 1500 GPH Automatic Pool Cover Pump`,\n        ]\n      case `Variable Speed Pool Pump`:\n        return [\n          `Black & Decker 1HP V.S. Above Ground Swimming Pool Pump`,\n          `Black & Decker 1.5HP V.S. Inground Swimming Pool Pump`,\n          `Black & Decker 2HP V.S. Inground Swimming Pool Pump`,\n          `Black & Decker 3HP V.S. Inground Swimming Pool Pump`,\n        ]\n      case `Pool Brush`:\n        return [`Black & Decker 360-Degree Bristles Pool Brush 18\" `]\n      case `Pool Alarm`:\n        return [`Black & Decker Swimming Pool Alarm`]\n      case `Heat Pump`:\n        return [\n          `BDXBT53 - 53,000 BTU`,\n          `BDXBT80 - 80,000 BTU`,\n          `BDXBT110 - 110,000 BTU`,\n          `BDXBT137 - 137,000 BTU`,\n        ]\n      default:\n        return []\n    }\n  }\n}\n\nclass NavigationController extends Controller {\n  static targets = [`registration`, `contact`, `registrationLink`, `contactLink`]\n  declare readonly registrationTarget: HTMLElement\n  declare readonly contactTarget: HTMLElement\n  declare readonly registrationLinkTarget: HTMLElement\n  declare readonly contactLinkTarget: HTMLElement\n  activeClasses = [\n    `bg-bd-orange`,\n    `text-white`,\n    `border-orange-600`,\n    `hover:border-orange-900`,\n    `hover:shadow-sm`,\n  ]\n\n  showRegistration() {\n    this.registrationTarget.hidden = false\n    this.contactTarget.hidden = true\n    this.registrationLinkTarget.classList.remove(...this.activeClasses)\n    this.contactLinkTarget.classList.add(...this.activeClasses)\n    window.scroll(0, 0)\n  }\n\n  showContact() {\n    this.registrationTarget.hidden = true\n    this.contactTarget.hidden = false\n    this.registrationLinkTarget.classList.add(...this.activeClasses)\n    this.contactLinkTarget.classList.remove(...this.activeClasses)\n    window.scroll(0, 0)\n  }\n}\n\n// @ts-ignore\nwindow.Stimulus = Application.start()\n// @ts-ignore\nStimulus.register(\"form\", FormController)\n// @ts-ignore\nStimulus.register(\"tooltip\", TooltipController)\n// @ts-ignore\nStimulus.register(\"navigation\", NavigationController)\n"],"names":[],"mappings":"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"}