{"version":3,"file":"field_controller-7ss8wj1T.js","sources":["../../../app/javascript/controllers/popup/step/field_controller.js"],"sourcesContent":["import { Controller } from \"@hotwired/stimulus\"\nimport { useRemove } from \"../../mixins/useRemove\"\nimport { useDraggable } from \"../../mixins/useDraggable\"\n\nexport default class extends Controller {\n static values = {\n removeable: Boolean,\n placeholder: String,\n stepId: String,\n }\n\n static targets = [\n \"orderInput\",\n \"typeInput\",\n \"requiredInput\",\n \"requiredInputContainer\",\n \"input\",\n \"placeholderInput\",\n \"removeContainer\",\n \"menu\",\n \"reorderButton\",\n ]\n static classes = [\"drag\"]\n\n initialize() {\n this.mouseEnterListener = this.mouseEnterListener.bind(this)\n this.mouseLeaveListener = this.mouseLeaveListener.bind(this)\n\n if (!this.removeable) {\n this.reorderButtonTarget.classList.add(\"hidden\")\n }\n }\n\n connect() {\n useRemove(this, {\n afterRemove: () => {\n // drag_controller destroys and recreate the records behind the scenes when an element is being reordered\n // causing disconnect() to be invoked when we don't want to\n // we only want to dispatch these events when the Trash icon was clicked\n document\n .querySelectorAll(`[data-field-id='${this.element.dataset.fieldId}']`)\n .forEach((field) => field.remove())\n\n this.dispatch(\"removed\", {\n target: document.getElementById(this.stepIdValue),\n detail: this.element.dataset.fieldId,\n })\n },\n })\n\n this.inputTarget.style.fontSize = `${\n window.popupControls.font.base * this.inputTarget.dataset.size\n }px`\n\n useDraggable(this)\n\n if (this.element.previousElementSibling) {\n this.previousSibling = this.element.previousElementSibling\n this.dispatch(\"connected\", {\n target: this.element.previousElementSibling,\n })\n }\n\n this.dispatch(\"connected\", {\n target: document.getElementById(this.stepIdValue),\n detail: this.toObject\n })\n\n this.element.addEventListener(\"mouseenter\", this.mouseEnterListener)\n this.element.addEventListener(\"mouseleave\", this.mouseLeaveListener)\n\n if (this.element.nextElementSibling) {\n this.nextElement = this.element.nextElementSibling\n }\n }\n\n disconnect() {\n this.element.removeEventListener(\"mouseenter\", this.mouseEnterListener)\n this.element.removeEventListener(\"mouseleave\", this.mouseLeaveListener)\n\n if (this.previousSibling) {\n this.dispatch(\"disconnected\", {\n target: this.previousSibling,\n })\n }\n\n if (this.nextElement) {\n this.dispatch(\"disconnected\", {\n target: this.nextElement,\n })\n }\n }\n\n get draggable() {\n return this.inputTarget\n }\n\n afterDragEnabled() {\n this.element.classList.remove(\"not-draggable\")\n }\n\n afterDragDisabled() {\n this.changeStateToNotDraggable()\n }\n\n onDragEnd({ detail: newIndex }) {\n this.orderInputTarget.value = newIndex\n this.draggable.classList.remove(...this.dragClasses)\n this.changeStateToNotDraggable()\n\n this.dispatchSyncEvent()\n\n Array.from(this.element.parentElement.children).forEach((li, index) => {\n if (li !== this.element) {\n this.dispatch(\"drag-end\", {\n target: li,\n detail: index + 1,\n })\n }\n })\n }\n\n incrementOrder({ detail: newOrder }) {\n this.orderInputTarget.value = newOrder\n this.dispatchSyncEvent()\n }\n\n focus() {\n this.placeholderInputTarget.selectionStart =\n this.placeholderInputTarget.selectionEnd =\n this.placeholderInputTarget.value.length\n this.placeholderInputTarget.focus()\n }\n\n allowRemove() {\n this.removeContainerTarget.classList.remove(\"hidden\")\n this.requiredInputContainerTarget.classList.remove(\"hidden\")\n\n this.nextElement = this.element.nextElementSibling\n this.element.classList.remove(\"not-draggable\")\n this.element.addEventListener(\"mouseenter\", this.mouseEnterListener)\n this.element.addEventListener(\"mouseleave\", this.mouseLeaveListener)\n }\n\n disallowRemoveIfOnlyField() {\n if (this.onlyField) {\n this.removeContainerTarget.classList.add(\"hidden\")\n this.requiredInputContainerTarget.classList.add(\"hidden\")\n\n this.element.classList.add(\"not-draggable\")\n }\n }\n\n mouseEnterListener() {\n if (\n this.element.nextElementSibling ||\n (this.element.previousElementSibling &&\n this.reorderButtonTarget.classList.contains(\"hidden\"))\n ) {\n this.reorderButtonTarget.classList.remove(\"hidden\")\n }\n }\n\n mouseLeaveListener() {\n if (\n this.element.nextElementSibling ||\n (this.element.previousElementSibling && !this.dragging)\n ) {\n this.reorderButtonTarget.classList.add(\"hidden\")\n }\n }\n\n changePlaceholder(e) {\n this.inputTarget.innerText = e.target.value || this.placeholderValue\n }\n\n saveChanges(e) {\n if (\n this.menuTarget.contains(e.target) ||\n this.menuTarget.classList.contains(\"hidden\")\n ) {\n return\n }\n\n if (this.placeholderInputTarget.value.trim().length === 0) {\n this.inputTarget.innerText = this.placeholderInputTarget.value =\n this.placeholderValue\n } else {\n this.placeholderValue = this.placeholderInputTarget.value\n }\n\n this.changeStateToNotDraggable()\n this.dispatchSyncEvent()\n }\n\n replaceWithSavedVersion({ detail }) {\n console.log(detail)\n\n this.inputTarget.innerText =\n this.placeholderInputTarget.value =\n this.placeholderValue =\n detail.placeholder\n this.orderInputTarget.value = detail.order\n this.requiredInputTarget.checked = detail.required\n\n this.element.querySelector(`[data-type='${detail.type}']`).click()\n }\n\n changeType({ currentTarget }) {\n this.typeInputTarget.value = currentTarget.dataset.type\n this.placeholderValue =\n this.inputTarget.innerText =\n this.placeholderInputTarget.value =\n currentTarget.dataset.typePlaceholder\n }\n\n onRequiredChange() {\n this.dispatchSyncEvent()\n }\n\n // private\n\n changeStateToNotDraggable() {\n this.draggable.classList.remove(...this.dragClasses)\n this.element.classList.add(\"not-draggable\")\n this.reorderButtonTarget.classList.add(\"hidden\")\n }\n\n dispatchSyncEvent() {\n this.dispatch(\"sync\", {\n target: this.sameElementInOtherView,\n detail: this.toObject,\n })\n }\n\n get sameElementInOtherView() {\n return Array.from(\n document.querySelectorAll(\n `[data-field-id='${this.element.dataset.fieldId}']`\n )\n ).find((field) => field !== this.element)\n }\n\n get toObject() {\n return {\n order: this.orderInputTarget.value,\n type: this.typeInputTarget.value,\n placeholder: this.placeholderValue,\n required: this.requiredInputTarget.checked,\n id: this.element.dataset.fieldId,\n }\n }\n\n get onlyField() {\n return (\n !this.element.nextElementSibling || !this.element.previousElementSibling\n )\n }\n\n get hasUnsavedChanges() {\n this.inputTarget.value.trim()\n }\n}\n"],"names":["field_controller","Controller","useRemove","field","useDraggable","newIndex","li","index","newOrder","detail","currentTarget","__publicField"],"mappings":"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"}