mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-05-07 12:37:14 -05:00
[PR #2294] [CLOSED] Feature/gantt ux duplicate tasks template tasks autogenerate task chain tasks #9885
Closed
opened 2026-04-23 09:15:55 -05:00 by GiteaMirror
·
0 comments
No Branch/Tag Specified
main
feat-huma-api-v2-migration
feat-v2-foundation
spike-huma-openapi3
claude/investigate-swagger3-support-nyyUa
feat-list-view-buckets
ci-mysql-8-test
codex/analyze-codebase-for-email-task-feature
feat-project-templates
csv-import-feature
claude/email-reply-comments-wpdcQ
fix-oidc-pkce-support
fix/overview-subtasks-expand
feat/bucket-select-task-detail
feat-soft-delete-projects
claude/review-bot-design-plan-cf5C3
claude/project-scoped-api-tokens-KTqR3
claude/explore-openclaw-integration-KQEzg
claude/project-scoped-api-tokens-yv5KS
fix-duplicate-close-button
feat-list-view-sorting
feat/official-vite-sentry-plugin
feat/highlight-overdue-tasks
feat/add-enter-key-form-submission-handling
feat/TipTap-nits
feat/update-caldavtimetotimestamp-parsing
feat-phosphor-icons
wip-plans
claude/investigate-issue-2173-llKme
fix-description-text-drag
feat-custom-keyboard-shortcuts
pr-1845-ci
codex/fix-drag-and-drop-behavior-inconsistency
copilot/add-clickable-labels-for-filtering
copilot/fix-issue-1786
playwright-migration
fix-kanban-repeating-wip
copilot/fix-1498
feature/replace-axios
codex/upgrade-to-tailwind-4.1.8-using-pnpm
codex/add-cypress-test-for-avatar-types
feature/biome
feature/oxc
codex/update-flexsearch-to-0.8.205
4r6ni9-codex/fix-deprecated-sass-@import-usage
codex/fix-deprecated-sass-@import-usage
codex/add-cypress-test-for-task-list-refresh-fix
codex/fix-quick-add-magic-not-adding-tasks
codex/fix-all-type-errors
codex/fix-mimetype-for-docs.json
feature/caldav-from-scratch
feature/gh-actions-hetzner
fix-ci
feat/new-logger
jyte-better-dev-config
feat/add-team-member-with-enter
fix/button-and-icon-types
fix/notifications-component-name-collision
feature/null-time
renovate/tailwindcss-4.x
feature/unplugin-vue-router
fix/deprecated-import
feature/zod-schema
renovate/golangci-golangci-lint-1.x
fix/tiptap-editor-reactive-destructuring
release/0.24
feat/improve-add-task
fix/saved-filter-search
feat/webp-and-avif-attachment-previews
feature/migrate-back-to-bulma
fix/sass-add-missing-list-import
feature/sticky-demo-bar
fix/gantt-view-switch
feature/typesense-position-join
feature/focus-visible
dependencies/golangci-lint
feature/better-filter-syntax
fix/tiptap-task-list
renovate/github.com-golang-jwt-jwt-v4-5.x
feature/hide-forbidden-related-tasks
renovate/golang-1.x
release/0.20
release/0.17
release/0.16
release/0.15
release/0.14
v2.3.0
v2.2.2
v2.2.1
v2.2.0
v2.1.0
v2.0.0
v1.1.0
v1.0.0
v1.0.0-rc4
v1.0.0-rc3
v1.0.0-rc2
v1.0.0-rc1
v1.0.0-rc0
v0.24.6
v0.24.5
v0.24.4
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.0
v0.22.1
v0.22.0
0.21.0
v0.21.0
v0.20.4
v0.20.5
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.2
v0.19.1
v0.19.0
vue3
v0.18.1
v0.18.0
v0.17.1
v0.17.0
v0.16.1
v0.16.0
v0.15.1
v0.15.0
v0.14.1
v0.14.0
v0.13.1
v0.13
v0.12
v0.11
v0.10
v0.9
v0.8
v0.7
v0.6
v0.5
v0.4
v0.3
v0.2
v0.1
Labels
Clear labels
area/api
area/attachments
area/auth
area/avatars
area/backup-restore
area/caldav
area/calendar-view
area/comments
area/config
area/database
area/desktop
area/docker
area/email
area/favorites
area/filters
area/frontend
area/gantt
area/i18n
area/import-export
area/internal-code
area/kanban
area/labels
area/list-view
area/mobile
area/notifications
area/permissions
area/projects
area/pwa
area/recurring-tasks
area/reminders
area/search
area/shortcuts
area/subtasks
area/sync
area/table-view
area/task-editor
area/task-metadata
area/task-relations
area/teams
area/theming
area/time-tracking
area/typesense
area/views
area/webhooks
bug
changes requested
concern/accessibility
concern/performance
concern/regression
concern/ux
confirmed
db/mysql
dependencies
enhancement
good first issue
help wanted
integration/inbound
integration/outbound
kind/bug
kind/feature
needs reproduction
pull-request
question
security
support
upstream issue
waiting for reply
wontfix
Mirrored from GitHub Pull Request
No Label
pull-request
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/vikunja#9885
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/go-vikunja/vikunja/pull/2294
Author: @trbom5c
Created: 2/25/2026
Status: ❌ Closed
Base:
main← Head:feature/ganttUX-duplicateTasks-templateTasks-autogenerateTask-chainTasks📝 Commits (10+)
044f2f3fix(task): require explicit confirmation before saving remindersa200b5etest(task): add e2e tests for reminder confirm-before-save behaviorafe449cfix(test): update existing reminder tests to click Confirm after date selection1e446b5fix(task): disable Confirm button when no date is selected in absolute reminder pickerb8cd3affix: prevent cursor reset when typing in filter input (#2287)1cf0b62fix: wait for router before dismissing loading screen0fbe708fix: replace tx.Sync() with explicit ALTER TABLE in webhooks migrationbdaa627fix: make teams oidc_id rename migration idempotentd579e58fix: add comprehensive catchup for bucket and filter format migrations9adb1f9fix: cast bucket_configuration to text in postgres catchup query📊 Changes
184 files changed (+51852 additions, -8149 deletions)
View changed files
📝
CHANGELOG.md(+106 -6612)➕
deploy-config.json(+7 -0)➕
docs/AUTO_TASKS.md(+153 -0)➕
docs/PATCH_MANIFEST.md(+87 -0)➕
files.zip(+0 -0)➕
frontend/src/components/gantt/GanttArrowSettings.vue(+506 -0)📝
frontend/src/components/gantt/GanttChart.vue(+61 -5)➕
frontend/src/components/gantt/GanttDependencyArrows.vue(+340 -0)📝
frontend/src/components/gantt/GanttRowBars.vue(+89 -8)📝
frontend/src/components/gantt/GanttTimelineHeader.vue(+19 -0)📝
frontend/src/components/gantt/GanttVerticalGridLines.vue(+330 -2)📝
frontend/src/components/home/Navigation.vue(+10 -0)📝
frontend/src/components/home/PoweredByLink.vue(+55 -10)📝
frontend/src/components/project/partials/ProjectCard.vue(+25 -0)➕
frontend/src/components/project/partials/SubprojectFilter.vue(+346 -0)📝
frontend/src/components/project/views/ProjectGantt.vue(+119 -21)📝
frontend/src/components/project/views/ProjectKanban.vue(+70 -0)📝
frontend/src/components/project/views/ProjectList.vue(+70 -0)📝
frontend/src/components/project/views/ProjectTable.vue(+73 -2)➕
frontend/src/components/tasks/partials/AutoTaskEditor.vue(+1176 -0)...and 80 more files
📄 Description
Feature: Gantt UX, Task Templates, Auto-Generated Tasks & Chain Workflows
Summary
This PR adds a comprehensive task automation and Gantt visualization overhaul to Vikunja. It introduces task templates with duplication, chain workflows for sequenced task creation, auto-generated recurring tasks, and significant Gantt chart UX improvements including configurable dependency arrows, interactive filters, and bar tooltips.
The changes span both Go backend (models, handlers, migrations, routes) and Vue 3 frontend (components, composables, stores, i18n).
Features
1. Task Templates & Duplication (Phase 1)
Reusable task templates that can be saved from any existing task and used to quickly create new tasks across projects.
/templateswith card-based UI2. Task Chain Workflows (Phase 2b–2d)
Define sequences of dependent tasks with relative timing offsets, then instantiate all tasks at once from an anchor date.
ChainEditor.vue) — Define ordered steps with title, offset, duration, description, and file attachmentschain_step_attachment.gouseDragReorder.tscomposablelocalStorageviauseStorage('chainDefaultTimeUnit', 'days')CreateFromChainModal.vue) — Set anchor date, select target project, generate all tasks linked via precedes/follows relationsProjectName_YYMMDD-HHmm_task_chain.go(model),task_from_chain.go(creation with unit-aware date math)20260224050000.go—task_chain_step_attachmentstable20260224060000.go—offset_unit,duration_unitcolumns ontask_chain_steps3. Auto-Generated Recurring Tasks (Phase 2g)
Task templates that automatically materialize task instances only when they become due — no board clutter from future tasks.
Core behavior:
next_due_atrecalculates from completion time, not creation time (prevents cascading backlog)done_by_idcolumn on tasks table records who marked a task done; displayed in generation log with username resolutionOnAutoTaskCompletedfires when a task withauto_template_idis marked done, advancing the template'snext_due_atimmediatelyBackend:
auto_task_template.go— Model, CRUD, permissions (owner-only), log enrichment withtask_done_by_nameauto_task_create.go— Check logic, trigger, completion handler, attachment copyingauto_task_cron.go— Background cron goroutine registered inpkg/initialize/init.goauto_task_handler.go— API handlers for trigger and check endpoints (echo v5)tasks.go—done_by_idfield added to Task struct, set on task completion, cleared on undo;auto_template_idfield exposed in API JSON;OnAutoTaskCompletedhook inupdateSingleTask20260224070000.go—auto_task_templates,auto_task_log,auto_task_template_attachmentstables +tasks.auto_template_idcolumn20260224080000.go—tasks.done_by_idcolumn20260224090000.go— Log truncation supportAPI Endpoints:
4. Gantt Chart UX Improvements
Build Compatibility
All new handler files are compatible with Vikunja's current stack:
c *echo.Context(pointer style)(statusCode, message)auth2.GetAuthFromClaims(c)frompkg/modules/authcreateTaskcalled with correct 5-arg signature(s, task, auth, false, false)TaskAssgineematches Vikunja's upstream spellingReadAllreturns(interface{}, int, int64, error)PermissionAdmin(notweb.RightAdmin)Previously Known TODOs — All Resolved ✅
auto_task_cron.goregistered ininit.go, runs every minute, checks all usersOnAutoTaskCompletedinto task update path whendonefield changes — Added toupdateSingleTaskintasks.go, fires whenupdateDoneAt && t.DonecopyAutoTaskTemplateAttachments()inauto_task_create.go, uses same pattern asproject_duplicate.goSingleTaskInProject.vuewhentask.autoTemplateId > 0, backed byAutoTemplateIDfield on Task structGanttArrowSettings.vuereplaced with$t()calls viauseI18n, 60+gantt.arrows.*keys added toen.jsonTesting
All features have been tested on a self-hosted Vikunja instance with:
patch-phase2.ps1Screenshots
Screenshots available upon request for: Gantt arrow configurator, auto-task editor, chain editor with time units, generation log modal, template tabs, modernized layout pages.
</html> </html><html> <html><head></head>Feature: Gantt UX, Task Templates, Auto-Generated Tasks & Chain Workflows
Summary
This PR adds a comprehensive task automation and Gantt visualization overhaul to Vikunja. It introduces task templates with duplication, chain workflows for sequenced task creation, auto-generated recurring tasks, and significant Gantt chart UX improvements including configurable dependency arrows, interactive filters, and bar tooltips.
The changes span both Go backend (models, handlers, migrations, routes) and Vue 3 frontend (components, composables, stores, i18n).
Features
1. Task Templates & Duplication (Phase 1)
Reusable task templates that can be saved from any existing task and used to quickly create new tasks across projects.
/templateswith card-based UI2. Task Chain Workflows (Phase 2b–2d)
Define sequences of dependent tasks with relative timing offsets, then instantiate all tasks at once from an anchor date.
ChainEditor.vue) — Define ordered steps with title, offset, duration, description, and file attachmentschain_step_attachment.gouseDragReorder.tscomposablelocalStorageviauseStorage('chainDefaultTimeUnit', 'days')CreateFromChainModal.vue) — Set anchor date, select target project, generate all tasks linked via precedes/follows relationsProjectName_YYMMDD-HHmm_task_chain.go(model),task_from_chain.go(creation with unit-aware date math)20260224050000.go—task_chain_step_attachmentstable20260224060000.go—offset_unit,duration_unitcolumns ontask_chain_steps3. Auto-Generated Recurring Tasks (Phase 2g)
Task templates that automatically materialize task instances only when they become due — no board clutter from future tasks.
Core behavior:
next_due_atrecalculates from completion time, not creation time (prevents cascading backlog)done_by_idcolumn on tasks table records who marked a task done; displayed in generation log with username resolutionOnAutoTaskCompletedfires when a task withauto_template_idis marked done, advancing the template'snext_due_atimmediatelyBackend:
auto_task_template.go— Model, CRUD, permissions (owner-only), log enrichment withtask_done_by_nameauto_task_create.go— Check logic, trigger, completion handler, attachment copyingauto_task_cron.go— Background cron goroutine registered inpkg/initialize/init.goauto_task_handler.go— API handlers for trigger and check endpoints (echo v5)tasks.go—done_by_idfield added to Task struct, set on task completion, cleared on undo;auto_template_idfield exposed in API JSON;OnAutoTaskCompletedhook inupdateSingleTask20260224070000.go—auto_task_templates,auto_task_log,auto_task_template_attachmentstables +tasks.auto_template_idcolumn20260224080000.go—tasks.done_by_idcolumn20260224090000.go— Log truncation supportAPI Endpoints:
4. Gantt Chart UX Improvements
Build Compatibility
All new handler files are compatible with Vikunja's current stack:
c *echo.Context(pointer style)(statusCode, message)auth2.GetAuthFromClaims(c)frompkg/modules/authcreateTaskcalled with correct 5-arg signature(s, task, auth, false, false)TaskAssgineematches Vikunja's upstream spellingReadAllreturns(interface{}, int, int64, error)PermissionAdmin(notweb.RightAdmin)Previously Known TODOs — All Resolved ✅
auto_task_cron.goregistered ininit.go, runs every minute, checks all usersOnAutoTaskCompletedinto task update path whendonefield changes — Added toupdateSingleTaskintasks.go, fires whenupdateDoneAt && t.DonecopyAutoTaskTemplateAttachments()inauto_task_create.go, uses same pattern asproject_duplicate.goSingleTaskInProject.vuewhentask.autoTemplateId > 0, backed byAutoTemplateIDfield on Task structGanttArrowSettings.vuereplaced with$t()calls viauseI18n, 60+gantt.arrows.*keys added toen.jsonTesting
All features have been tested on a self-hosted Vikunja instance with:
patch-phase2.ps1Screenshots
Screenshots available upon request for: Gantt arrow configurator, auto-task editor, chain editor with time units, generation log modal, template tabs, modernized layout pages.
</html> </html>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.