{"version":3,"sources":["webpack:///./app/javascript/packs/follow.js"],"names":["setFollowIdState","setModalVisibilityState","FollowService","FollowButton","FollowModal","followId","document","dispatchEvent","CustomEvent","detail","isVisible","followableData","fetch","method","body","JSON","stringify","followable","headers","alert","element","handleClicked","event","preventDefault","classList","contains","dataset","then","handleFollowIdStateChanged","followButtonMessageElement","querySelector","toggle","textContent","unfollowMessage","followMessage","this","addEventListener","handleSubmitButtonClicked","optInField","emailField","email","value","user_id","userId","program_id","programId","metro_id","metroId","checked","opt_in","res","json","errors","Error","id","follow","exception","message","handleModalVisibilityStateChanged","querySelectorAll","forEach","selector","getAttribute","label","input","remove","add","window","followButtons","Array","from","followModal","followModalCloseButton"],"mappings":"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","file":"js/11-83c92a4619f33658724c.chunk.js","sourcesContent":["(() => {\n const setFollowIdState = followId =>\n document.dispatchEvent(\n new CustomEvent(\"followIdStateChanged\", { detail: { followId } })\n );\n\n const setModalVisibilityState = isVisible =>\n document.dispatchEvent(\n new CustomEvent(\"modalVisibilityStateChanged\", { detail: { isVisible } })\n );\n\n const FollowService = {\n follow: followableData =>\n fetch(\"/api/follows\", {\n method: \"POST\",\n body: JSON.stringify({ followable: followableData }),\n headers: { 'Content-Type': 'application/json' }\n }).catch(() => alert(\"An error occurred while attempting to follow this instance. Please try again.\")),\n unfollow: followId =>\n fetch(`/api/follows/${followId}`, { method: \"DELETE\" })\n .catch(() => alert(\"An error occurred while attempting to follow this instance. Please try again.\"))\n }\n\n class FollowButton {\n constructor(element) {\n this.element = element\n this.element.addEventListener(\"click\", this.handleClicked);\n document.addEventListener(\"followIdStateChanged\", this.handleFollowIdStateChanged)\n }\n\n handleClicked = event => {\n event.preventDefault();\n\n if (this.element.classList.contains(\"not-followed\")) {\n setModalVisibilityState(true)\n return;\n }\n\n FollowService.unfollow(this.element.dataset.followId)\n .then(() => setFollowIdState(null))\n }\n\n handleFollowIdStateChanged = ({ detail: { followId }}) => {\n const followButtonMessageElement = this.element.querySelector(\".js-follow-message\");\n this.element.dataset.followId = followId;\n this.element.classList.toggle(\"not-followed\", !followId);\n this.element.classList.toggle(\"followed\", followId);\n followButtonMessageElement.textContent = followId ?\n followButtonMessageElement.dataset.unfollowMessage :\n followButtonMessageElement.dataset.followMessage;\n }\n }\n\n class FollowModal {\n constructor(element) {\n this.element = element\n document.addEventListener(\"modalVisibilityStateChanged\", this.handleModalVisibilityStateChanged)\n this.element.querySelector(\".cwe-js-follow-submit\")\n .addEventListener(\"click\", this.handleSubmitButtonClicked);\n\n this.element.querySelectorAll(\".js-form-field\")\n .forEach((element) => {\n const selector = element.getAttribute(\"data-selector\");\n const label = element.querySelector(\"label\");\n const input = element.querySelector(selector);\n\n input.addEventListener(\"focus\", () => {\n label.classList.remove(\"translate-y-2.5\");\n label.classList.add(\"text-sm\");\n });\n\n input.addEventListener(\"blur\", () => {\n if (input.value === \"\") {\n label.classList.add(\"translate-y-2.5\");\n label.classList.remove(\"text-sm\");\n }\n else {\n label.classList.remove(\"translate-y-2.5\");\n label.classList.add(\"text-sm\");\n }\n });\n });\n }\n\n handleSubmitButtonClicked = event => {\n event.preventDefault();\n\n const optInField = document.querySelector('#follow-modal #opt_in');\n const emailField = document.querySelector(\"#follow-email\");\n const followableData = {\n email: this.element.dataset.email || emailField.value,\n user_id: this.element.dataset.userId,\n program_id: this.element.dataset.programId,\n metro_id: this.element.dataset.metroId\n }\n\n if (optInField.checked) {\n followableData.opt_in = \"on\"\n }\n\n FollowService.follow(followableData)\n .then(res => res.json())\n .then(json => {\n if (json.errors && json.errors.email) {\n throw new Error(\"You must use a valid email. Please try again\");\n }\n\n return json;\n })\n .then(({ follow: { id }}) => {\n setFollowIdState(id);\n setModalVisibilityState(false);\n })\n .catch(exception => alert(exception.message));\n }\n\n handleModalVisibilityStateChanged = ({ detail: { isVisible } }) => {\n this.element.classList.toggle(\"hidden\", !isVisible);\n }\n }\n\n function initializeFollow() {\n const followButtons = Array.from(document.querySelectorAll(\".cwe-js-follow\"));\n const followModal = document.querySelector(\"#follow-modal\");\n\n const followModalCloseButton = document.querySelector(\".close-follow-modal\");\n\n followButtons.forEach(element => new FollowButton(element));\n\n if (followModalCloseButton) {\n followModalCloseButton.addEventListener(\"click\", () => {\n setModalVisibilityState(false)\n });\n }\n\n if (followModal) {\n new FollowModal(followModal);\n }\n };\n\n window.addEventListener(\"load\", initializeFollow);\n})();\n"],"sourceRoot":""}