{"version":3,"file":"message_controller-D1-IzwBR.js","sources":["../../../app/javascript/controllers/message_controller.js"],"sourcesContent":["import { post, destroy } from \"@rails/request.js\"\n\nimport ApplicationController from \"./application_controller\"\n\nexport default class extends ApplicationController {\n static values = {\n url: String,\n seen: Boolean,\n id: String,\n creator: String,\n address: String,\n body: String,\n location: Boolean,\n type: String,\n multiple: Boolean,\n caption: Boolean,\n originalId: String,\n hasAttachment: Boolean,\n conversationElementId: String,\n reactionUrl: String,\n reactionsUrl: String,\n }\n\n static targets = [\"toggleButton\", \"location\", \"body\", \"kebabIcon\", \"emoji\", \"reactionContainer\"]\n\n initialize() {\n this.messageViewedObserver = this.messageViewedObserver.bind(this)\n this.observer = new IntersectionObserver(this.messageViewedObserver, {\n root: null,\n threshold: 0.1,\n })\n }\n\n connect() {\n if(this.hasLocationTarget) {\n const link = this.locationTarget.querySelector(\"a\")\n const image = this.locationTarget.querySelector(\"img\")\n\n link.href = link.href.replace(\":locale\", this.userLocale)\n image.src = image.src.replace(\":locale\", this.userLocale)\n\n this.delayed(() => {\n this.show(this.locationTarget)\n }, 1000)\n }\n\n this.observer.observe(this.element)\n\n this.element.querySelectorAll('a').forEach(link => {\n link.target = '_blank'\n })\n }\n\n reply() {\n if(this.captionValue) {\n this.dispatch(\"reply\", {\n target: document.getElementById(this.originalIdValue),\n })\n } else {\n this.dispatch(\n \"reply\",\n {\n target: document.querySelector(\"x-reply-to-container\"),\n detail: {\n id: this.idValue,\n body: this.hasBodyTarget ? this.bodyTarget.innerHTML : this.bodyValue || this.addressValue,\n creator: this.creatorValue,\n attachedLocation: this.locationValue,\n type: this.typeValue,\n isMultiple: this.multipleValue,\n element: this.element\n }\n }\n )\n }\n }\n\n displayTimestamps({ target }) {\n this.toggleButtonTarget.click()\n }\n\n onDropdownToggle({ detail: visible }) {\n if(visible) {\n this.removeClass(this.kebabIconTarget, \"invisible\")\n } else {\n this.addClass(this.kebabIconTarget, \"invisible\")\n }\n }\n\n async messageViewedObserver(entry) {\n if (entry[0].isIntersecting && !this.seenValue && this.readable) {\n const response = await post(this.urlValue, { responseKind: \"turbo-stream\" })\n\n if(response.ok) {\n this.seenValue = true\n\n this.dispatch(\"seen\", {\n target: document.getElementById(this.conversationElementIdValue),\n })\n\n this.dispatch(\"seen\", {\n target: document.getElementById('inbox-link'),\n })\n }\n }\n }\n\n addReaction({ detail: reaction }) {\n const data = {\n emoji: reaction.native,\n metadata: {\n ...reaction,\n }\n }\n\n if(this.hasReaction(reaction.native)) {\n this.hide(this.reactionContainerTarget)\n return destroy(this.reactionUrlValue.replace(':id', reaction.native))\n }\n\n this.reactionContainerTarget.innerHTML = \"\"\n const span = document.createElement(\"span\")\n span.innerHTML = reaction.native\n\n this.reactionContainerTarget.appendChild(span)\n this.show(this.reactionContainerTarget)\n\n post(this.reactionsUrlValue, { body: data })\n }\n\n emojiTargetConnected() {\n this.show(this.reactionContainerTarget)\n }\n\n emojiTargetDisconnected() {\n if(this.emojiTargets.length > 0) return\n this.hide(this.reactionContainerTarget)\n }\n\n hasReaction(native) {\n return this.reactionContainerTarget.firstElementChild?.innerText === native\n }\n\n get readable() {\n return this.urlValue\n }\n}\n"],"names":["message_controller","ApplicationController","link","image","target","visible","entry","post","reaction","data","destroy","span","native","_a","__publicField"],"mappings":"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"}