{ "version": 3, "sources": ["tito_form_controller-ff0e2e64.js"], "sourcesContent": ["import { Controller } from \"@hotwired/stimulus\"\nimport { getStoredSourcesForConcertID, clearSourcesForConcertID } from \"@concerto/ticket_source_tracking\"\nimport { getRandomMember } from \"@concerto/utilities\"\n\nconst UNKNOWN_SOURCE = \"UNKNOWN\"\n\nexport default class extends Controller {\n static targets = [ \"loader\", \"form\", \"formWrapper\", \"notLoading\" ]\n static classes = [\n \"ticketName\",\n \"ticketType\",\n \"ticketDescription\",\n \"donationTicketPrice\",\n \"regularTicketPrice\",\n \"times\",\n \"ticketQuantity\",\n \"customDescription\",\n \"customPricing\",\n \"customPricingOuterWrapper\",\n \"hidden\",\n \"donationTicketType\",\n \"standardTicketType\",\n \"donationValue\"\n ]\n \n static values = {\n emailPlaceholder: String,\n namePlaceholder: String,\n eventCode: String,\n concertId: String,\n source: { type: String, default: UNKNOWN_SOURCE },\n releases: String,\n removablePrefix: String,\n donationTicketName: String,\n redirectUrl: String,\n appendSlugToRedirect: Boolean\n }\n \n initialize() {\n this.restructured = false\n this.failsafe = null\n this.waitingPeriod = 0\n this.processedTicketTypes = []\n this.donationValueField = null\n this.donationQuantityFieldWrapper = null\n this.donationQuantityField = null\n }\n \n get tito() {\n return window.tito\n }\n \n formTargetConnected() {\n const elementID = this.formTarget.id\n this.elementID = elementID\n \n this.hideFormWrapperTarget()\n this.mountWidget()\n this.restructurePageOnWidgetLoad()\n this.attachRegistrationListener()\n }\n \n mountWidget() {\n this.tito(\"widget.mount\", {\n el: `#${this.elementID}`,\n event: this.eventCodeValue,\n namePlaceholder: this.namePlaceholderValue,\n emailPlaceholder: this.emailPlaceholderValue,\n inline: true,\n source: this.pickSource(),\n releases: this.releasesValue === '*' ? null : this.releasesValue\n })\n\n this.failsafeWidgetLoad()\n this.clearSourcesAfterTicketsPurchased()\n }\n\n pickSource() {\n if (this.sourceValue && this.sourceValue !== UNKNOWN_SOURCE) {\n return this.sourceValue\n }\n\n const storedSources = getStoredSourcesForConcertID(this.concertIdValue)\n \n if (storedSources.length > 0) {\n const randomSource = getRandomMember(storedSources)\n return randomSource\n }\n\n return undefined\n }\n \n restructurePageOnWidgetLoad() {\n this.tito(\"on:widget:loaded\", (_data) => {\n this.changeWidgetAsNeeded()\n })\n }\n\n changeWidgetAsNeeded() {\n const widgetDetailsHaveLoaded = this.checkWidgetDetailsHaveLoaded()\n\n if (widgetDetailsHaveLoaded) {\n // First load is itself just the loading symbol\n // The second load is the actual tickets\n this.restructureWidgetAndMakeVisible()\n this.removeFailsafe()\n this.hideWaitingMessage()\n }\n }\n\n failsafeWidgetLoad() {\n const waitingPeriodInMilliseconds = 500\n\n if (!this.failsafe && !this.restructured) {\n this.failsafe = setInterval(() => {\n this.changeWidgetAsNeeded()\n }, waitingPeriodInMilliseconds)\n }\n }\n\n hideWaitingMessage() {\n this.notLoadingTarget.classList.add(this.hiddenClass)\n }\n\n removeFailsafe() {\n if (this.failsafe && this.restructured) {\n clearTimeout(this.failsafe)\n }\n }\n \n checkWidgetDetailsHaveLoaded() {\n const widget = document.getElementsByClassName(this.ticketTypeClass)\n return widget.length > 0\n }\n \n hideFormWrapperTarget() {\n this.formWrapperTarget.classList.add(this.hiddenClass)\n }\n \n restructureWidgetAndMakeVisible() {\n if (!this.restructured) {\n this.processTicketTypes()\n this.hideLoader()\n this.unhideFormWrapperTarget()\n this.restructured = true\n }\n }\n\n clearSourcesAfterTicketsPurchased() {\n this.tito(\"on:registration:finished\", () => {\n if (this.concertIdValue) {\n clearSourcesForConcertID(this.concertIdValue)\n }\n })\n }\n \n hideLoader() {\n this.loaderTarget.classList.add(this.hiddenClass)\n }\n \n unhideFormWrapperTarget() {\n this.formWrapperTarget.classList.remove(this.hiddenClass)\n }\n \n processTicketTypes() {\n const titoTickets = document.getElementsByClassName(this.ticketTypeClass)\n \n for (const ticketType of titoTickets) {\n this.restructureTicketType(ticketType)\n }\n }\n \n correctName(ticketTypeElement) {\n const ticketNameElement = ticketTypeElement.getElementsByClassName(this.ticketNameClass)[0]\n const baseTicketName = ticketNameElement.textContent.trim()\n\n if (this.removablePrefixValue) {\n const correctedTicketName = baseTicketName.replaceAll(this.removablePrefixValue, '')\n ticketNameElement.textContent = correctedTicketName\n }\n }\n\n getTicketNameFromElement(ticketTypeElement) {\n const ticketNameElement = ticketTypeElement.getElementsByClassName(this.ticketNameClass)[0]\n return ticketNameElement.textContent.trim()\n }\n\n getPriceElement(ticketTypeElement) {\n const donationPrice = ticketTypeElement.getElementsByClassName(this.donationTicketPriceClass)[0]\n const regularPrice = ticketTypeElement.getElementsByClassName(this.regularTicketPriceClass)[0]\n return donationPrice || regularPrice\n }\n \n restructureTicketType(ticketTypeElement) {\n const ticketName = this.getTicketNameFromElement(ticketTypeElement)\n\n if (!this.processedTicketTypes.includes(ticketName)) {\n this.correctName(ticketTypeElement)\n\n const donationTicket = this.donationTicketNameValue === ticketName\n\n if (donationTicket) {\n ticketTypeElement.classList.add(this.donationTicketTypeClass)\n // this.processDonationTicketTypeElement(ticketTypeElement)\n } else if (this.standardTicketTypeClass) {\n ticketTypeElement.classList.add(this.standardTicketTypeClass)\n }\n\n const description = ticketTypeElement.getElementsByClassName(this.ticketDescriptionClass)[0]\n const price = this.getPriceElement(ticketTypeElement)\n const times = ticketTypeElement.getElementsByClassName(this.timesClass)[0]\n const quantity = ticketTypeElement.getElementsByClassName(this.ticketQuantityClass)[0]\n \n const descriptionWrapper = document.createElement(\"div\")\n descriptionWrapper.appendChild(description)\n descriptionWrapper.classList.add(this.customDescriptionClass)\n \n const pricingWrapper = document.createElement(\"div\")\n\n pricingWrapper.appendChild(price)\n\n // if (!donationTicket) {\n pricingWrapper.appendChild(times)\n // }\n\n pricingWrapper.appendChild(quantity)\n \n pricingWrapper.classList.add(this.customPricingClass)\n \n const pricingOuterWrapper = document.createElement(\"div\")\n pricingOuterWrapper.classList.add(this.customPricingOuterWrapperClass)\n pricingOuterWrapper.appendChild(pricingWrapper)\n\n ticketTypeElement.appendChild(descriptionWrapper)\n ticketTypeElement.appendChild(pricingOuterWrapper)\n\n this.processedTicketTypes.push(ticketName)\n }\n }\n\n attachRegistrationListener() {\n this.tito(\"on:registration:finished\", (data) => {\n if (data && this.hasRedirectUrlValue) {\n const { finished, slug } = data\n\n if (finished && (!this.appendSlugToRedirectValue || slug)) {\n const redirectTo = this.appendSlugToRedirectValue ? `${this.redirectUrlValue}/${slug}` : this.redirectUrlValue\n Turbo.visit(redirectTo)\n }\n }\n })\n }\n\n /*\n processDonationTicketTypeElement(donationTicketTypeElement) {\n this.assignDonationFields(donationTicketTypeElement)\n\n if (this.donationQuantityFieldWrapper && this.donationQuantityField && this.donationValueField) {\n this.addHandlerToDonationValueField()\n // this.donationQuantityFieldWrapper.setAttribute(\"hidden\", \"hidden\")\n this.donationQuantityFieldWrapper.classList.add(this.hiddenClass)\n }\n }\n\n assignDonationFields(donationTicketTypeElement) {\n const quantityWrappers = donationTicketTypeElement.getElementsByClassName(this.ticketQuantityClass)\n\n if (quantityWrappers.length > 0) {\n const targetDonationFieldWrapper = quantityWrappers[0]\n\n for (const child of targetDonationFieldWrapper.children) {\n if (child.nodeName === \"INPUT\" && child.type === \"checkbox\") {\n this.donationQuantityFieldWrapper = targetDonationFieldWrapper\n this.donationQuantityField = child\n }\n }\n }\n\n if (this.donationQuantityFieldWrapper) {\n const donationValueFields = donationTicketTypeElement.getElementsByClassName(this.donationValueClass)\n\n if (donationValueFields.length > 0) {\n this.donationValueField = donationValueFields[0]\n }\n }\n }\n\n addHandlerToDonationValueField() {\n this.donationValueField.addEventListener(\"input\", (event) => {\n const { target: { value } } = event\n\n if (Number(value) > 0) {\n if (!this.donationQuantityField.checked) {\n this.donationQuantityField.click()\n }\n } else { \n if (this.donationQuantityField.checked) {\n this.donationQuantityField.click()\n }\n // console.log('deactivation donation...')\n // this.donationQuantityField.removeAttribute(\"checked\")\n // this.donationQuantityField.checked = false\n }\n })\n } */\n}\n"], "mappings": "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", "names": [] }