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 = `

Export Heartbeats

` 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 } } }