import { Controller } from "@hotwired/stimulus"
|
|
|
|
export default class extends Controller {
|
|
|
|
static targets = ["select", "current"]
|
|
static values = { url: String }
|
|
|
|
connect() {
|
|
|
|
}
|
|
|
|
disconnect() {
|
|
}
|
|
|
|
|
|
changeLocale() {
|
|
|
|
this.currentTarget.textContent = this.selectTarget.options[this.selectTarget.selectedIndex].textContent
|
|
|
|
// Create form data to send
|
|
const formData = new FormData()
|
|
formData.append("locale", this.selectTarget.value)
|
|
|
|
// Make the PUT request using fetch
|
|
fetch(this.urlValue, {
|
|
method: "PUT",
|
|
headers: {
|
|
'Accept': "text/vnd.turbo-stream.html",
|
|
"X-CSRF-Token": this.getMetaValue("csrf-token")
|
|
},
|
|
body: formData
|
|
})
|
|
.then (response => response.text())
|
|
.then(html => {
|
|
Turbo.renderStreamMessage(html)
|
|
document.documentElement.setAttribute('lang', this.selectTarget.value)
|
|
})
|
|
.catch((err) => {
|
|
console.info('rejected', err)
|
|
})
|
|
|
|
}
|
|
|
|
|
|
// Helper method to get CSRF token
|
|
getMetaValue(name) {
|
|
const element = document.head.querySelector(`meta[name="${name}"]`)
|
|
return element.getAttribute("content")
|
|
}
|
|
}
|