{ "version": 3, "sources": ["formation_controller-467a33d879b51fe6f0e611af953b24a72e96f5b65cf9808bd471453ed448b3f9.js"], "sourcesContent": ["import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"formation\"\nexport default class extends Controller {\n static targets = [\"primary\", \"partner\", \"instructor\"];\n\n connect() {\n this.students = [...this.partnerTarget.querySelectorAll(\"option\")].map(option => option.value);\n this.instructors = [...this.instructorTarget.querySelectorAll(\"option\")].map(option => option.value);\n\n this.boxes = [this.primaryTarget, this.partnerTarget].concat(this.instructorTargets);\n this.preventDupes();\n\n // if there is only one instructor, that instructor can't be the partner\n if (this.instructors.length == 1) {\n for (let option of this.partnerTarget.querySelectorAll(\"option\")) {\n if (option.value == this.instructors[0]) {\n option.disabled = true;\n }\n }\n }\n\n for (let box of this.boxes) {\n box.addEventListener(\"change\", this.preventDupes);\n let option = document.createElement(\"option\");\n option.textContent = \"--delete--\";\n option.setAttribute(\"value\", \"x\");\n if (box == this.instructorTarget || box == this.partnerTarget) option.disabled = true;\n box.appendChild(option);\n }\n\n let adds = this.element.querySelectorAll(\"div.absolute a\");\n for (let add of adds) {\n add.addEventListener(\"click\", _event => {\n if (add.style.opacity) return;\n\n let lastBox = this.boxes[this.boxes.length - 1];\n\n let base = add.textContent.includes(\"instructor\") ? this.instructorTarget : this.partnerTarget;\n\n let box = base.cloneNode(true);\n box.classList.remove(\"hidden\");\n box.disabled = false;\n\n if (add.dataset.list) {\n for (let option of box.querySelectorAll(\"option\")) {\n if (option.value != \"x\") {\n option.remove();\n } else {\n option.disabled = false;\n }\n }\n\n for (let [name, id] of Object.entries(JSON.parse(add.dataset.list)).reverse()) {\n if (name.includes(\",\")) {\n let parts = name.split(/,\\s*/);\n name = [...parts.slice(-1), ...parts.slice(0, 1)].join(\" \");\n }\n\n let option = document.createElement(\"option\");\n option.value = id;\n option.textContent = name;\n box.prepend(option);\n }\n }\n\n box.id = `solo_formation[${this.boxes.length - 1}]`;\n box.setAttribute(\"name\", `solo[formation][${this.boxes.length}]`);\n box.removeAttribute(\"data-formation-target\");\n box.addEventListener(\"change\", this.preventDupes);\n\n lastBox.parentNode.insertBefore(box, lastBox.nextSibling);\n this.boxes.push(box);\n this.preventDupes();\n\n if ([...box.children].every(child => child.disabled || child.value === \"x\")) {\n this.boxes.pop().remove();\n }\n });\n }\n }\n\n preventDupes = (event) => {\n if (event && event.target.value == \"x\") {\n event.target.remove();\n this.boxes = this.boxes.filter(item => item != event.target);\n }\n\n let taken = [];\n if (this.boxes.length <= 3) taken.push(\"x\");\n for (let box of this.boxes) {\n if (box.classList.contains(\"hidden\") || box.disabled) continue;\n let avail = \"\";\n let options = box.querySelectorAll(\"option\");\n for (let option of options) {\n if (taken.includes(option.value)) {\n option.disabled = true;\n if (option.value == box.value) box.value = avail;\n } else if (option.value == \"x\") {\n if (!box.value) {\n let option = [...options].find(option => !option.disabled && option.value !== \"x\");\n if (option) {\n box.value = option.value;\n } else {\n this.boxes = this.boxes.filter(item => item != box);\n box.remove();\n }\n }\n } else {\n option.disabled = false;\n avail ||= option.value;\n if (!box.value && box.value == \"x\") box.value = avail;\n }\n }\n\n taken.push(box.value);\n }\n\n let adds = this.element.querySelectorAll(\"div.absolute a\");\n\n if (this.instructors.every(instructor => taken.includes(instructor))) {\n adds[0].style.cursor = \"not-allowed\";\n adds[0].style.opacity = \"50%\";\n } else {\n adds[0].style.cursor = \"\";\n adds[0].style.opacity = \"\";\n }\n\n if (adds[1]) {\n if (this.students.every(student => taken.includes(student) || this.instructors.includes(student))) {\n adds[1].style.cursor = \"not-allowed\";\n adds[1].style.opacity = \"50%\";\n } else {\n adds[1].style.cursor = \"\";\n adds[1].style.opacity = \"\";\n }\n }\n };\n};\n"], "mappings": "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", "names": ["Controller", "formation_controller_467a33d879b51fe6f0e611af953b24a72e96f5b65cf9808bd471453ed448b3f9_default", "__publicField", "event", "item", "taken", "box", "avail", "options", "option", "adds", "instructor", "student", "add", "_event", "lastBox", "name", "id", "parts", "child"] }