feat: add Gantt chart view for boards#7812
Conversation
1f25f7f to
e1f6cb4
Compare
|
@grnd-alt I ran Claude again and worked on the fixes. Since this is mostly AI generating (somewhat usable) things, I understand that this quickly starts to waste your time. In other words, please feel free to close this PR until someone comes along with actual web dev knowledge to create a proper implementation. |
|
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |
Add a timeline/Gantt view as an alternative to the kanban board view, allowing users to visualize card schedules across time using frappe-gantt. - Add GanttView component with Day/Week/Month view modes - Add Kanban/Gantt view toggle in board controls - Store view mode preference in localStorage via Vuex - Stack-based color coding with legend and undated cards section - Drag-and-drop support for rescheduling cards - Auto-fit column width to fill container on wider views - Add frappe-gantt dependency and webpack resolve alias for its CSS Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Paul Spooren <mail@aparcar.org>
09311b2 to
683a88f
Compare
Signed-off-by: grnd-alt <git@belakkaf.net>
mejo-
left a comment
There was a problem hiding this comment.
Overall a great addition ❤️
I tested a bit, skimmed through the code changes and made some comments.
|
|
||
| <div v-if="ganttTasks.length > 0" ref="ganttContainer" class="gantt-chart" /> | ||
|
|
||
| <NcEmptyContent v-if="!ganttTasks.length && !undatedCards.length"> |
There was a problem hiding this comment.
For an empty board, it might be better to switch back to the kanban view, no? When I create a list using this interface, I cannot really do anything with it afterwards, as the gantt view doesn't allow to add another list or cards anyway.
| } | ||
| }, | ||
| on_date_change: (task, start, end) => { | ||
| this.isDragging = true |
There was a problem hiding this comment.
The whole isDragging and _pendingChange implementation looks a bit overly complex to me. Maybe it's required that way, but since the PR was initially generated by AI, I wonder whether it really is. on_date_change seems to be a callback from the gantt library used here. Why doesn't it work to make it call onDateChange() directly? Why the need to track isDragging and pending changes in Vue explicitly?
There was a problem hiding this comment.
I personally would drop all dragging functionality and just allow the user to click a task and then manually modify the specific dates.
There was a problem hiding this comment.
@mejo- I refactored that logic to only have pendingChange, that is required so we only update when the dragging ends and not in between all the time. The logic is now in the global mouseUp listener as the library's on_click seems to not be in the same event chain as the global mouseUp/click so we can't stop propagation between them, and we would have ending drags open the modal, which is quite annoying when you only want to change the date.
Signed-off-by: grnd-alt <git@belakkaf.net>
523729b to
5e4cd63
Compare
Signed-off-by: grnd-alt <git@belakkaf.net>
|
Discussing this with colleagues, they asked for direct links to the gantt or deck view. Could this be added to the url handling? |

Summary
Add a timeline/Gantt view as an alternative to the kanban board view, allowing users to visualize card schedules across time using frappe-gantt.
This is inspired by https://github.com/nextcloud-community/ncgantt
TODO
Checklist