Files
dawarich/app/javascript/controllers/datetime_controller.js
2025-02-15 16:48:03 +01:00

74 lines
2.0 KiB
JavaScript

// This controller is being used on:
// - trips/new
// - trips/edit
import BaseController from "./base_controller"
export default class extends BaseController {
static targets = ["startedAt", "endedAt", "apiKey"]
static values = { tripsId: String }
connect() {
console.log("Datetime controller connected")
this.debounceTimer = null;
}
async updateCoordinates(event) {
// Clear any existing timeout
if (this.debounceTimer) {
clearTimeout(this.debounceTimer);
}
// Set new timeout
this.debounceTimer = setTimeout(async () => {
const startedAt = this.startedAtTarget.value
const endedAt = this.endedAtTarget.value
const apiKey = this.apiKeyTarget.value
if (startedAt && endedAt) {
try {
const params = new URLSearchParams({
start_at: startedAt,
end_at: endedAt,
api_key: apiKey,
slim: true
})
let allPoints = [];
let currentPage = 1;
const perPage = 1000;
do {
const paginatedParams = `${params}&page=${currentPage}&per_page=${perPage}`;
const response = await fetch(`/api/v1/points?${paginatedParams}`);
const data = await response.json();
allPoints = [...allPoints, ...data];
const totalPages = parseInt(response.headers.get('X-Total-Pages'));
currentPage++;
if (!totalPages || currentPage > totalPages) {
break;
}
} while (true);
const event = new CustomEvent('coordinates-updated', {
detail: { coordinates: allPoints },
bubbles: true,
composed: true
})
const tripsElement = document.querySelector('[data-controller="trips"]')
if (tripsElement) {
tripsElement.dispatchEvent(event)
} else {
console.error('Trips controller element not found')
}
} catch (error) {
console.error('Error:', error)
}
}
}, 500);
}
}