Files
bit/app/javascript/controllers/links_controller.js
T
2021-06-16 10:24:33 -05:00

61 lines
1.8 KiB
JavaScript

import { Controller } from "stimulus"
import Turbolinks from "turbolinks"
export default class extends Controller {
static targets = ["url", "output", "userLinks"]
initialize() {
this.lastLink = null
this.sessionUsername = localStorage.getItem("session-username")
}
onCreateLinkSuccess(event) {
const [, , xhr] = event.detail
this.outputTarget.innerHTML = xhr.response
if (this.sessionUsername && this.lastLink && this.lastLink.includes(this.sessionUsername)
&& !this.userLinksTarget.innerHTML.includes(this.lastLink)) {
this.userLinksTarget.innerHTML = this.lastLink + this.userLinksTarget.innerHTML
}
this.lastLink = xhr.response
}
onCreateLinkError(event) {
const [data, ,] = event.detail
const urlError = `Url: ${data.url.join(' ')}`
alert(urlError)
}
async updateLinkCounter(counterElem, slug) {
const clickCounter = await fetch(`links/${slug}/counter`, {
headers: {
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
}
}).then((res) => res.json());
if (clickCounter) {
counterElem.innerText = clickCounter
}
}
openLink(event) {
const counterElem = event.target.parentElement.parentElement.parentElement.getElementsByClassName("counter")[0]
const link = event.target.innerText
let visibilitychange = 0
const visibilitychangeListener = () => {
if(visibilitychange > 0) {
document.removeEventListener("visibilitychange", visibilitychangeListener)
this.updateLinkCounter(counterElem, link.substring(link.lastIndexOf('/') + 1))
return
}
visibilitychange += 1
}
document.addEventListener("visibilitychange", visibilitychangeListener)
window.open(link, "_blank")
}
}