{"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":"wNAIA,eAAgC,EAAW,CAIzC,SAAU,MACH,UAAU,OAAS,GAG1B,SAAU,MACH,UAAU,OAAS,GAG1B,WAAY,MACL,UAAU,OAAS,CAAC,KAAK,UAAU,QAZnC,EADT,EACS,UAAU,CAAC,QAgBpB,eAA6B,EAAW,CAAxC,cAAA,oBAEE,cAAe,GAMf,SAAU,MACH,eACA,QAAQ,iBAAiB,UAAW,KAAK,QAAQ,KAAK,OAG7D,YAAa,MACN,QAAQ,oBAAoB,UAAW,KAAK,QAAQ,KAAK,OAGhE,QAAQ,EAAsB,CACxB,EAAM,MAAQ,WACV,iBAIV,SAAU,MACH,qBAAqB,QAAQ,AAAC,GAAO,CACpC,SAAS,EAAG,QAAQ,QAAoB,KAAK,QAC5C,UAAU,OAAO,EAAG,QAAQ,iBAC5B,UAAU,IAAI,EAAG,QAAQ,iBAEzB,UAAU,IAAI,EAAG,QAAQ,iBACzB,UAAU,OAAO,EAAG,QAAQ,qBAG9B,mBAAmB,QAAQ,AAAC,GAAO,CAClC,SAAS,EAAG,QAAQ,QAAoB,KAAK,OAC5C,OAAS,KAET,OAAS,KAKlB,SAAS,EAAe,MAChB,GAAK,EAAE,cACP,EAAc,KAAK,eAAe,MAIpC,AAHW,MAAM,KAAK,EAAY,iBAAiB,kBAG5C,MAAM,AAAC,GAAU,EAAM,kBAAmB,MAC7C,GAAO,SAAS,EAAG,QAAQ,WAC5B,KAAO,OACP,gBAIH,QAAO,EAAe,GACxB,sBACI,GAAc,KAAK,eAAe,MAEpC,CAAC,AADU,MAAM,KAAK,EAAY,iBAAiB,oBAC3C,MAAM,AAAC,GAAU,EAAM,8BAG7B,GAAW,GAAI,UAAS,KAAK,SAC7B,EAAO,OAAO,YAAY,EAAS,WACnC,EAAY,EAAE,cAAoC,QAAQ,YAC5D,GAAO,KACN,GAAY,OACX,GAAO,KAAM,OAAM,IAAI,KAAa,CACxC,OAAQ,OACR,KAAM,KAAK,UAAU,GACrB,QAAS,CACP,eAAgB,mBAChB,eAAgB,SAAS,cAAc,2BAA2B,aAAa,cAG/E,EAAK,kBACA,SAAS,KAAO,EAAK,UAEvB,QAAQ,iBAAiB,SAAS,QAAQ,AAAC,GAAW,EAAM,MAAQ,SACpE,QAAQ,iBAAiB,YAAY,QAAQ,AAAC,GAAc,EAAS,MAAQ,SAC7E,QAAQ,iBAAiB,UAAU,QAAQ,AAAC,GAAY,EAAO,MAAQ,SACvE,KAAO,OACP,WAIT,SAAS,EAAe,MAChB,GAAK,EAAE,cACP,EAAO,SAAS,EAAG,QAAQ,MAC7B,KAAK,OAAS,GAAK,EAAO,KAAK,YAC5B,KAAO,OACP,WAID,eAAe,EAAuB,IACxC,GAAK,EAAM,YAET,MAAK,mBAAmB,SAAS,MAGhC,EAAG,oBAEH,GAGT,mBAAmB,EAAmB,MAC9B,GAAS,EAAM,YAChB,qBAAqB,iBAAiB,0BAA0B,QAAQ,AAAC,GAAW,EAAO,UAC5F,EAAO,QAAU,QACd,qBAAqB,OAAS,SAE9B,sBAAsB,EAAO,OAAO,QAAQ,AAAC,GAAU,MACpD,GAAS,SAAS,cAAc,YAC/B,MAAQ,IACR,UAAY,OACd,qBAAqB,YAAY,UAGnC,qBAAqB,OAAS,IAIvC,sBAAsB,EAAqB,QACjC,OACD,oCACI,CACL,yCACA,yCACA,yDAEC,iCACI,CACL,0DACA,wDACA,sDACA,2DAEC,mBACI,CAAC,0DACL,mBACI,CAAC,0CACL,kBACI,CACL,uBACA,uBACA,yBACA,wCAGK,KArJN,EADT,EACS,UAAU,CAAC,SAAU,gBAAiB,cAAe,iBAAkB,SA0JhF,eAAmC,EAAW,CAA9C,cAAA,oBAME,uBAAgB,CACd,eACA,aACA,oBACA,0BACA,oBAGF,kBAAmB,MACZ,mBAAmB,OAAS,QAC5B,cAAc,OAAS,QACvB,uBAAuB,UAAU,OAAO,GAAG,KAAK,oBAChD,kBAAkB,UAAU,IAAI,GAAG,KAAK,sBACtC,OAAO,EAAG,GAGnB,aAAc,MACP,mBAAmB,OAAS,QAC5B,cAAc,OAAS,QACvB,uBAAuB,UAAU,IAAI,GAAG,KAAK,oBAC7C,kBAAkB,UAAU,OAAO,GAAG,KAAK,sBACzC,OAAO,EAAG,IA1BZ,EADT,EACS,UAAU,CAAC,eAAgB,UAAW,mBAAoB,gBA+BnE,OAAO,SAAW,EAAY,QAE9B,SAAS,SAAS,OAAQ,GAE1B,SAAS,SAAS,UAAW,GAE7B,SAAS,SAAS,aAAc"}