Ressourcen-Zeitleiste

@dayflow-pro/resource-timeline ergänzt DayFlow um eine horizontale Zeitleiste im Stil eines Planungswerkzeugs. Die Zeit verläuft von links nach rechts, jede Ressource erhält eine eigene Zeile, und die Ansicht ist auf die Planung von Arbeit ßber Personen, Räume, Projekte oder Geräte hinweg ausgelegt.

Probieren Sie die Live-Demo aus

GegenĂźber den eingebauten Kalenderansichten ist die Ressourcen-Zeitleiste optimiert fĂźr:

  • lang laufende Aufgaben und Projektpläne,
  • die Verteilung von Ressourcen Ăźber mehrere Spuren,
  • Meilensteine und Fortschrittsverfolgung,
  • hierarchische oder gruppierte Ressourcenlisten.

Installation

npm install @dayflow-pro/resource-timeline
pnpm add @dayflow-pro/resource-timeline
yarn add @dayflow-pro/resource-timeline
bun add @dayflow-pro/resource-timeline

Die Installationsschritte finden Sie im Leitfaden Pro-Installation.

Grundlegende Verwendung

import { DayFlowCalendar, useCalendarApp } from '@dayflow/react';
import { createResourceTimelineView } from '@dayflow-pro/resource-timeline';

function App() {
  const calendar = useCalendarApp({
    views: [
      createResourceTimelineView({
        resources: [
          {
            id: 'eng-alice',
            name: 'Alice Chen',
            groupId: 'engineering',
            groupName: 'Engineering',
            subtitle: 'Frontend',
          },
          {
            id: 'eng-bob',
            name: 'Bob Torres',
            groupId: 'engineering',
            groupName: 'Engineering',
            subtitle: 'Platform',
          },
        ],
        defaultView: 'week',
        height: 640,
        getResourceId: event =>
          (event as { resourceId?: string }).resourceId ?? event.calendarId,
      }),
    ],
  });

  return <DayFlowCalendar calendar={calendar} />;
}
<template>
  <DayFlowCalendar :calendar="calendar" />
</template>

<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import { createResourceTimelineView } from '@dayflow-pro/resource-timeline';

const calendar = useCalendarApp({
  views: [
    createResourceTimelineView({
      resources: [
        {
          id: 'eng-alice',
          name: 'Alice Chen',
          groupId: 'engineering',
          groupName: 'Engineering',
          subtitle: 'Frontend',
        },
        {
          id: 'eng-bob',
          name: 'Bob Torres',
          groupId: 'engineering',
          groupName: 'Engineering',
          subtitle: 'Platform',
        },
      ],
      defaultView: 'week',
      height: 640,
      getResourceId: event => event.resourceId ?? event.calendarId,
    }),
  ],
});
</script>
import { Component } from '@angular/core';
import { createResourceTimelineView } from '@dayflow-pro/resource-timeline';
import { DayFlowCalendarModule } from '@dayflow/angular';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DayFlowCalendarModule],
  template: `
    <dayflow-calendar [calendar]="calendar"></dayflow-calendar>
  `
})
export class AppComponent {
  calendar = {
    views: [
      createResourceTimelineView({
        resources: [
          {
            id: 'eng-alice',
            name: 'Alice Chen',
            groupId: 'engineering',
            groupName: 'Engineering',
            subtitle: 'Frontend',
          },
          {
            id: 'eng-bob',
            name: 'Bob Torres',
            groupId: 'engineering',
            groupName: 'Engineering',
            subtitle: 'Platform',
          },
        ],
        defaultView: 'week',
        height: 640,
        getResourceId: (event: any) => event.resourceId ?? event.calendarId,
      }),
    ],
  };
}
<script>
  import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
  import { createResourceTimelineView } from '@dayflow-pro/resource-timeline';

  const calendar = useCalendarApp({
    views: [
      createResourceTimelineView({
        resources: [
          {
            id: 'eng-alice',
            name: 'Alice Chen',
            groupId: 'engineering',
            groupName: 'Engineering',
            subtitle: 'Frontend',
          },
          {
            id: 'eng-bob',
            name: 'Bob Torres',
            groupId: 'engineering',
            groupName: 'Engineering',
            subtitle: 'Platform',
          },
        ],
        defaultView: 'week',
        height: 640,
        getResourceId: event => event.resourceId ?? event.calendarId,
      }),
    ],
  });
</script>

<DayFlowCalendar {calendar} />

Skalen der Zeitleiste

SkalaBeschreibung
dayEin Tag mit Stundenspalten.
weekEine Woche mit Tagesspalten.
monthEin Monat mit Tagesspalten.
quarterDrei Monate, nach Woche oder Monat gruppiert.
yearEin ganzes Jahr fĂźr Roadmap-artige Planung.

Mit defaultView legen Sie die Anfangsskala fest. Über viewSwitcherMode steuern Sie außerdem die Darstellung des Umschalters; unterstützt werden buttons, select und filter.

Ressourcenmodell

Ressourcen sind einfache Objekte. Der Code unterstĂźtzt deutlich mehr als nur id und name:

type Resource = {
  id: string;
  name: string;
  parentId?: string;
  collapsed?: boolean;
  groupId?: string;
  groupName?: string;
  order?: number;
  subtitle?: string;
  avatar?: string;
  color?: string;
  style?: {
    colors: { color: string; textColor?: string };
    darkColors?: { color: string; textColor?: string };
    opacity?: number;
    borderRadius?: number;
  };
  meta?: Record<string, unknown>;
};

NĂźtzliche Felder:

  • groupId und groupName gliedern Ressourcen in gruppierte Abschnitte.
  • parentId und collapsed ermĂśglichen hierarchische Ressourcenbäume.
  • subtitle, avatar, color und style bereichern die Darstellung in der Seitenleiste.
  • meta dient häufig dazu, eine externe Kennung wie calendarId abzulegen.

Termine an Ressourcen binden

Die Ansicht ermittelt die Zeile eines Termins in dieser Reihenfolge:

  1. getResourceId(event), sofern angegeben
  2. event.resourceId
  3. event.meta?.resourceId
  4. event.calendarId

Sie kĂśnnen resourceId also direkt an Ihren Terminobjekten hinterlegen oder bestehende DayFlow-Termine per Callback auf Ressourcen abbilden.

const event = {
  id: 'task-1',
  title: 'Build export flow',
  start: new Date(2026, 4, 10, 9, 0),
  end: new Date(2026, 4, 12, 18, 0),
  resourceId: 'eng-alice',
  progress: 65,
};

Meilensteine und Termingestaltung

Termine, bei denen start und end identisch sind, werden automatisch als Meilensteine dargestellt.

const milestone = {
  id: 'release-gate',
  title: 'Release approval',
  start: new Date(2026, 4, 14, 10, 0),
  end: new Date(2026, 4, 14, 10, 0),
  resourceId: 'eng-bob',
};
EigenschaftTypHinweise
milestoneLabelDisplay'hover' | 'always'Legt fest, ob Meilenstein-Beschriftungen nur beim Überfahren erscheinen oder dauerhaft sichtbar bleiben.
milestoneLaneBehavior'smart' | 'overlay'Legt fest, ob Meilensteine sich nach MĂśglichkeit normale Spuren teilen oder diese Ăźberlagern.
getEventType(event) => ResourceEventTypeOrdnet Termine zeitleistenspezifischen Typen zu.
getEventTooltip(event) => string | undefinedLiefert den Tooltip-Text eines Termins.
styleRegistryRecord<string, EventStyle>Registriert eigene Stil-Voreinstellungen.
getEventStyleId(event) => string | undefinedWählt die Stil-Voreinstellung fßr einen Termin aus.

ResourceTimelineViewConfig

Grundlagen

EigenschaftTypHinweise
resourcesResource[]Erforderliche Ressourcenliste der Zeitleiste.
licensePackageLicenseConfigOptionale Angabe, wenn Sie keine globale Registrierung verwenden.
defaultViewday | week | month | quarter | yearAnfangsskala der Zeitleiste.
viewsSchedulerTimelineView[]Überschreibt die verfügbaren Skalen.
viewTypeViewType | stringEigener Ansichtstyp bei der Integration in fortgeschrittene Hosts.
viewSwitcherMode'buttons' | 'select' | 'filter'Steuert die Oberfläche des Skalenumschalters.
heightnumber | stringHĂśhe der gerenderten Ansicht.

Layout

EigenschaftTypHinweise
resourcePanelWidthnumberBevorzugte Breite der Seitenleiste.
resourcePanelMinWidthnumberMindestbreite der Seitenleiste.
resourcePanelMaxWidthnumberMaximale Breite der Seitenleiste.
rowHeightnumberHĂśhe jeder Ressourcenzeile.
headerHeightnumberHĂśhe der Kopfzeile der Zeitleiste.
hourWidthnumberBreite der Stundenskala im Modus day.
weekDayWidthnumberBreite pro Tag im Modus week.
dayWidthnumberBreite pro Tag im Modus month.
monthDayWidthnumberBreite pro Tag bei dichten Monatsbereichen.
quarterMonthWidthnumberBreite pro Monat im Modus quarter.
yearCellWidthnumberBreite pro Einheit im Modus year.
yearRangePastnumberZusätzliche Jahre vor dem aktuellen Jahr.
yearRangeFuturenumberZusätzliche Jahre nach dem aktuellen Jahr.
overscanRowsnumberZusätzlich gerenderte Zeilen außerhalb des sichtbaren Bereichs.
bufferCellsnumberZusätzliche Zeitzellen fßr flßssigeres Scrollen.

Sichtbarkeit und Synchronisierung von Ressourcen

EigenschaftTypHinweise
resourceSorter(left, right) => numberEigene Sortierung der Zeilen.
syncResourceVisibilityWithCalendarsbooleanBlendet die Zeile einer Ressource aus, wenn der zugeordnete Kalender ausgeblendet ist.
getCalendarIdForResource(resource) => string | undefinedÜberschreibt die Zuordnung einer Ressource zur Kalendersichtbarkeit.
onResourcesUpdate(resources) => voidWird ausgelÜst, wenn Ressourcen in der Oberfläche umsortiert oder eingeklappt werden.

Wenn die Kalendersynchronisierung aktiviert ist, lautet die Ersatzzuordnung von Ressource zu Kalender resource.meta?.calendarId ?? resource.id.

Fokus, Seitenleiste und Integrationen

Die Zeitleiste bietet einige Integrationspunkte, die leicht Ăźbersehen werden:

  • focusRequest erlaubt der Host-Anwendung, die Zeitleiste programmgesteuert zu einem bestimmten Termin und Datum zu bewegen.
  • sidebar reicht die Konfiguration der Planungs-Seitenleiste durch, etwa Aktionen des KontextmenĂźs.
  • customDetailPanelContent und customEventDetailDialog lassen sich Ăźber die Ansichts-Props Ăźbergeben, wenn Sie eine eigene Detailoberfläche benĂśtigen.
  • timeFormat unterstĂźtzt 24h und 12h.
  • resizeTimeFormat passt die Beschriftung an, die beim Ändern der Termingröße angezeigt wird.

Auf dieser Seite