Skip to content

fix: מפה לפי קו - לא מוצגות נסיעות לאחר השעה 6 בערב #902

Closed
@witty-code

Description

@witty-code

יש כרגע בעיה עם הממשק בעמוד של מפה לפי קו, הוא לא מציג נסיעות שמתחילות לאחר השעה 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
}

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingfrontendfrontend developers issuegood first issueGood for newcomers

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions