{"version":3,"file":"popup_controller-IL8JQpBZ.js","sources":["../../../app/javascript/controllers/popup_controller.js"],"sourcesContent":["import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static values = {\n unsavedChanges: { type: Boolean, default: false },\n persisted: { type: Boolean, default: false },\n config: Object,\n display: String,\n capturesUrl: String,\n newCaptureUrl: String,\n name: String,\n backgroundImageUrl: String,\n }\n\n static targets = [\n \"previewTokenInput\",\n \"previewLink\",\n \"openModalButton\",\n \"modalBackButton\",\n \"removedStepInput\",\n \"overlayRemovedCheckbox\",\n \"overlayReplacedCheckbox\",\n \"backgroundRemovedCheckbox\",\n \"backgroundReplacedCheckbox\",\n ]\n\n initialize() {\n this.popupValue = {}\n this.changedConfig = Object.assign({}, this.configValue)\n this.changedDisplay = this.displayValue\n this.changedNameValue = this.nameValue\n\n if (this.backgroundImageUrlValue) {\n this.popupValue = {\n image: {\n path: this.backgroundImageUrlValue,\n },\n }\n }\n\n this.replaceFontFamilyWith(this.configValue.font.family)\n }\n\n connect() {\n if (!this.unsavedChangesValue) {\n // when the journey is being edited\n // steps are added and connected to each other via JS. Which sets this.changedValue to true\n // although the journey hasn't changed.\n // Wait until all steps are connected to each other and set this.changedValue back to false\n setTimeout(() => {\n this.unsavedChangesValue = false\n this.changedConfig = this.configValue\n }, 10)\n }\n }\n\n setTextColor({ detail }) {\n this.popupValue.color = detail.color\n this.changedConfig.font.color = detail.color\n this.unsavedChangesValue = true\n window.popup = this.popupValue\n }\n\n setBackgroundColor({ detail }) {\n this.popupValue.backgroundColor = detail.color\n window.popup = this.popupValue\n }\n\n setFontSize({ detail }) {\n this.popupValue.fontSizeBase = detail.size\n this.changedConfig.font.base_size = Number.parseFloat(detail.size)\n window.popup = this.popupValue\n }\n\n setBackgroundImage(e) {\n this.popupValue.image = {\n path: e.target.files[0]\n ? URL.createObjectURL(e.target.files[0])\n : undefined,\n fit: \"fill\",\n }\n\n window.popup = this.popupValue\n this.changedConfig.background.attachment = e.target.files[0]\n if (this.persistedValue) {\n this.backgroundRemovedCheckboxTarget.checked = false\n this.backgroundReplacedCheckboxTarget.checked = true\n }\n }\n\n setBackgroundImageFitToMosaic() {\n this.popupValue.image.fit = \"mosaic\"\n this.changedConfig.background.background_size = \"contain\"\n window.popup = this.popupValue\n }\n\n setBackgroundImageFitToFill() {\n this.popupValue.image.fit = \"fill\"\n this.changedConfig.background.background_size = \"cover\"\n window.popup = this.popupValue\n }\n\n onImageSelect(e) {\n const imagePath = URL.createObjectURL(e.target.files[0])\n this.setOverlayImageTo(imagePath)\n\n if (this.persistedValue) {\n this.overlayRemovedCheckboxTarget.checked = false\n this.overlayReplacedCheckboxTarget.checked = true\n }\n }\n\n setImageFitToCover() {\n this.popupValue.headerImage.fit = \"cover\"\n this.dispatch(\"sync:header-image-fit\", {\n target: document.documentElement,\n detail: this.popupValue.headerImage,\n })\n\n this.changedConfig.overlay.object_fit = \"cover\"\n window.popup = this.popupValue\n }\n\n setImageFitToContain() {\n this.popupValue.headerImage.fit = \"contain\"\n this.dispatch(\"sync:header-image-fit\", {\n target: document.documentElement,\n detail: this.popupValue.headerImage,\n })\n\n window.popup = this.popupValue\n }\n\n openPreview(e) {\n if (this.previewTokenInputTarget.value.trim().length === 0) {\n this.previewTokenInputTarget.value = e.dataset.token\n this.url = e.dataset.url\n }\n\n this.previewLinkTarget.href = this.url\n this.previewLinkTarget.click()\n this.previewLinkTarget.href = \"\"\n }\n\n removeBackgroundImage() {\n this.popupValue.image = undefined\n window.popup = this.popupValue\n\n if (this.persistedValue) {\n this.backgroundRemovedCheckboxTarget.checked = true\n this.backgroundReplacedCheckboxTarget.checked = false\n }\n }\n\n removeOverlayImage() {\n if (this.persistedValue) {\n this.overlayRemovedCheckboxTarget.checked = true\n }\n\n this.setOverlayImageTo(\"\")\n }\n\n changeFontFamily({ target }) {\n this.changedConfig.font.family = target.value\n this.replaceFontFamilyWith(target.value)\n }\n\n showModalIfHasUnsavedChanges({ detail: originalEvent }) {\n if (\n JSON.stringify(this.configValue) !== JSON.stringify(this.changedConfig) ||\n this.displayValue !== this.changedDisplay ||\n this.nameValue !== this.changedNameValue ||\n this.unsavedChangesValue\n ) {\n originalEvent.preventDefault()\n this.openModalButtonTarget.click()\n }\n }\n\n setHasUnsavedChangesToTrue() {\n this.unsavedChangesValue = true\n }\n\n changePopupBubbleProps({ detail }) {\n this.changedConfig.bubble[detail.attribute] = detail.value\n }\n\n changePopupButtonProps({ detail }) {\n this.changedConfig.button_style[detail.attribute] = detail.value\n }\n\n changePopupDisplayProps({ detail: newDisplaySettings }) {\n this.changedDisplay = newDisplaySettings\n }\n\n setOverlayBackgroundColor({ detail: color }) {\n this.changedConfig.overlay.background_color = color\n }\n\n setNameValue({ dataset }) {\n this.changedNameValue = dataset.value\n }\n\n resetNameToDefaultValue() {\n this.changedNameValue = this.nameValue\n }\n\n overwriteHistoryEntry(e) {\n const { result } = e.detail.formSubmission\n\n if (\n result.success &&\n result.fetchResponse.location.href.includes(\"/assign-coupon\") &&\n !this.persistedValue\n ) {\n const url = result.fetchResponse.location.href.replace(\n \"/assign-coupon\",\n \"/edit\"\n )\n\n history.replaceState(\n { turbo_stream_response: true },\n window.location.title,\n url\n )\n }\n }\n\n // private\n\n replaceFontFamilyWith(newFontFamily) {\n document\n .querySelectorAll(\"[data-controller='popup--step']\")\n .forEach((el) => {\n el.style.fontFamily = newFontFamily\n })\n\n window.fontFamily = newFontFamily\n }\n\n setOverlayImageTo(path) {\n this.popupValue.headerImage = {\n path: path,\n fit: \"cover\",\n }\n\n this.dispatch(\"sync:header-image\", {\n target: document.documentElement,\n detail: this.popupValue.headerImage,\n })\n\n window.popup = this.popupValue\n }\n}\n"],"names":["popup_controller","Controller","detail","imagePath","target","originalEvent","newDisplaySettings","color","dataset","result","url","newFontFamily","el","path","__publicField"],"mappings":"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"}