mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-01 18:59:47 -06:00
74 lines
2.0 KiB
JavaScript
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);
|
|
}
|
|
}
|