Frontmatter
| id | 8546 |
| title | Fix TimelineCanvas crash on ticket switch (records.map is not a function) |
| state | Closed |
| labels | bugai |
| assignees | tobiu |
| createdAt | Jan 11, 2026, 3:21 PM |
| updatedAt | Jan 11, 2026, 3:29 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8546 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 8398 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 11, 2026, 3:29 PM |
Fix TimelineCanvas crash on ticket switch (records.map is not a function)

tobiu
Jan 11, 2026, 3:29 PM
Input from Gemini 3 Pro:
✦ Fixed the
records.map is not a functioncrash.Root Cause:
Neo.data.Storefires theloadevent with a payload object{items: [...], ...}, not a raw array. TheonTimelineDataLoadmethod was expecting a raw array, causingrecords.map(or similar array operations later in the logic) to fail when triggered by the store event.Fix: Updated
onTimelineDataLoadinTimelineCanvas.mjsto normalize the input. It now checks ifrecordsis an object with anitemsproperty and extracts the array if so, ensuring compatibility with both direct calls and store events.
tobiu added parent issue #8398 on Jan 11, 2026, 3:29 PM
tobiu closed this issue on Jan 11, 2026, 3:29 PM
tobiu assigned to @tobiu on Jan 11, 2026, 3:29 PM
TimelineCanvas.mjs.TypeError: records.map is not a function.recordsargument passed toonTimelineDataLoadis likely not an array, corruptingme.lastRecords.onTimelineDataLoadis triggered by thesectionsstoreloadevent oronResize.loadevent signature ofNeo.data.Storeand ensureonTimelineDataLoadcorrectly handles the arguments or validatesrecordsis an array.