Description
יש כרגע בעיה עם הממשק בעמוד של מפה לפי קו, הוא לא מציג נסיעות שמתחילות לאחר השעה 6 בערב.
לאחר בדיקה איתרתי את הבאג: הפונקציה useSingleLineData יוצרת זמן התחלה לתחילת היום וזמן סיום עבור הרגע האחרון של היום:
const { locations, isLoading: locationsAreLoading } = useVehicleLocations({
from: +new Date(timestamp).setHours(0, 0, 0, 0),
to: +new Date(timestamp).setHours(23, 59, 59, 999),
lineRef,
splitMinutes: 360,
pause: !lineRef,
})
הפונקציה useVehicleLocations מחלקת את טווח הזמן לחלקים שווים לפי הערך split באמצעות הפונקציה getMinutesInRange:
function getMinutesInRange(from: Dateable, to: Dateable, gap = 1) {
const start = moment(from).startOf('minute')
const end = moment(to).startOf('minute')
// array of minutes to load
const minutes = Array.from({ length: end.diff(start, 'minutes') / gap }, (_, i) => ({
from: start.clone().add(i * gap, 'minutes'),
to: start.clone().add((i + 1) * gap, 'minutes'),
}))
return minutes
}
הבעיה שנוצרת היא שהקוד:
length: end.diff(start, 'minutes') / gap
מחזיר במקרה הזה את הערך 3.9972222222222222, אשר מתורגם כנראה בתור ערך מספרי 3, נסה:
parseInt(end.diff(start, 'minutes') / gap)
זה גורם לכך שנשלחות לשרת בקשות של 3 טווחי זמן של 6 שעות, במקום 4 כפי הנדרש.
יש 2 פתרונות אפשריים, אבל מכיוון שלא חקרתי את כל הקוד אינני יכול להמליץ על אחד מהם, ולכן אני מניח כאן את הדברים במקום לבצע Fork פשוט:
א. לבצע שינוי בפונקציה useSingleLineData כך שערך הסיום יוגדר לשנייה הראשונה של היום הבא, לדוגמא:
to: +new Date(timestamp + 24 * 60 * 60 * 1000).setHours(0, 0, 0, 0);
ב. לשנות את הפונקציה getMinutesInRange ולהחיל round על תוצאות החלוקה ב-gap (נראה פחות מומלץ, יש לבדוק את ההשלכות על כל מקרי השימוש במרבי הממשק):
function getMinutesInRange(from, to, gap = 1) {
const start = moment(from).startOf('minute')
const end = moment(to).startOf('minute')
// array of minutes to load
const minutes = Array.from({ length: Math.round(end.diff(start, 'minutes') / gap) }, (_, i) => ({
from: start.clone().add(i * gap, 'minutes'),
to: start.clone().add((i + 1) * gap, 'minutes'),
}))
return minutes
}