import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
// The Calender thing is mostly vibe coded, pls check
handleExport(event) {
event.preventDefault()
this.showDateThing()
}
showDateThing() {
const modalHTML = `
`
document.body.insertAdjacentHTML("beforeend", modalHTML)
document.getElementById("cancel-export").addEventListener("click", this.closeme)
document.getElementById("export-form").addEventListener("submit", this.exportIT.bind(this))
document.getElementById("export-modal").addEventListener("click", (event) => {
if (event.target.id === "export-modal") {
this.closeme()
}
})
}
getDefaultStartDate() {
const date = new Date()
date.setDate(date.getDate() - 30)
return date.toISOString().split("T")[0]
}
getDefaultEndDate() {
return new Date().toISOString().split("T")[0]
}
closeme() {
const modal = document.getElementById("export-modal")
if (modal) {
modal.remove()
}
}
async exportIT(event) {
event.preventDefault()
const startDate = document.getElementById("start-date").value
const endDate = document.getElementById("end-date").value
if (!startDate || !endDate) {
alert("Please select both start and end dates")
return
}
if (new Date(startDate) > new Date(endDate)) {
alert("Start date must be before end date")
return
}
const submitButton = document.getElementById("confirm-export")
const originalText = submitButton.textContent
submitButton.textContent = "Exporting..."
submitButton.disabled = true
try {
const exportUrl = `/my/heartbeats/export.json?start_date=${startDate}&end_date=${endDate}`
const link = document.createElement("a")
link.href = exportUrl
link.download = `heartbeats_${startDate}_${endDate}.json`
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
setTimeout(() => {
this.closeme()
}, 1000)
} catch (error) {
console.error("Export failed:", error)
alert("Export failed. Please try again. :(")
submitButton.textContent = originalText
submitButton.disabled = false
}
}
}