feat(tracker): Gantt chart for the issue tracker - #10992
Conversation
|
Hi @MichaelUray packages/ui: SearchInputAdvanced (field-prefixed field:value search), HighlightedText 2. A separate package for Gantt engine |
|
Understood. I'll split the shared search/filter rework into a separate PR. For the Gantt code, I'll extract a tracker-agnostic engine package with generic item, dependency, scheduling, layout and viewport interfaces. Tracker-specific adapters, Huly actions, notifications and the Svelte integration will remain in I'll move this PR back to Draft while restructuring it and update it once both boundaries build and test independently. |
…t empty state Adds SearchInputAdvanced (field:value prefixes routed to Elasticsearch query_string), match highlighting, inline filter chips with overflow popover, a reusable zero-hit empty state in view-resources, and search-scope/highlight view options for List and Kanban. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Stacked on the search/filter rework. Introduces @hcengineering/gantt, a dependency-free scheduling/zoom/drag/viewport engine package (with a neutral GanttDependency contract), and wires the tracker-specific adapter, Svelte UI, model schema, dependency-shift notifications and sanity coverage in tracker-resources. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
3d959ca to
42c196d
Compare
Restructured following review feedback: the shared search/filter rework is split into its own PR (#10998), and the Gantt engine now lives in a reusable package. Stacked on #10998 — until that merges, this PR shows both commits against
develop; review #10998 first.What it adds
A Gantt viewlet for the Tracker: time-scale canvas with day/week/month/quarter zoom, sidebar columns, today marker and jump navigation; editable bars (drag, resize, schedule an unscheduled row) with confirm prompts and permission/conflict handling; FS/SS/FF/SF dependencies with lag, a dependency editor, cascade shifting with cycle detection, and critical-path plus slack; visual polish (bar labels, quick-info popover, milestone and deadline markers, non-working-day shading, shortcut help); undo/redo, saved views, bulk select and bulk drag, auto-scheduling with manual pinning; row virtualization for large projects; a read-only mobile layout, tree view with hierarchy breadcrumbs and a predecessor column; bar coloring by status/priority/assignee/component/milestone with overdue and blocked overlays and sub-issue progress fill; PNG and PDF export plus a fullscreen toggle. A dependency shift raises a server-side notification for the affected assignees; the trigger resolves the sender, the shifted issues and their metadata server-side and scopes everything to the request's own space.
The engine package
Introduces
@hcengineering/gantt, a runtime-dependency-free package for the domain-neutral part of the former Gantt library. It contains time-scale and working-day calculations, zoom and viewport primitives, drag/pointer state, responsive toolbar helpers, and the neutralGanttItem,GanttDependency, andWorkingCalendarcontracts.Tracker-specific scheduling, layout, critical-path and dependency-routing logic remains in the Tracker adapter. The Svelte UI, model schema, Huly actions, notifications, persistence and sanity coverage remain in their corresponding Tracker packages.
New runtime dependencies
In
plugins/tracker-resources, both MIT:@tanstack/svelte-virtual(row virtualization) andjspdf(PDF export). Export re-renders the chart from the data model into an SVG rather than capturing the DOM; the PDF is paginated into bounded pages so large charts stay within the browser canvas and jsPDF size limits.Locales
en,deandrucarry the full set of new strings, and a unit test enforces ICU placeholder parity across all locale files. Other locales fall back to English at runtime.Testing
Full CI is green on a fork mirror of this head —
build,svelte-check, unittest,formatting,docker-build,uitest,uitest-pg,uitest-workspaces,uitest-qms. The feature also went through several manual review rounds and a security pass; the dependency-shift notification validates the sender and the shifted issues server-side rather than trusting client-supplied metadata.