refactor(web): split TimelineContext into data, view, and display contexts
Reduces unnecessary re-renders by separating the monolithic 20+ property context into TimelineDataContext, TimelineViewContext, and TimelineDisplayContext. Panel components now subscribe only to the slices they need. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,12 @@
|
||||
import { clsx } from "clsx";
|
||||
import { memo, startTransition, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
||||
import { useVirtualizer } from "@tanstack/react-virtual";
|
||||
import { useTimelineContext, type TimelineAssignmentEntry } from "./TimelineContext.js";
|
||||
import {
|
||||
useTimelineData,
|
||||
useTimelineView,
|
||||
useTimelineDisplay,
|
||||
type TimelineAssignmentEntry,
|
||||
} from "./TimelineContext.js";
|
||||
import { applyVisualOverrides, type TimelineVisualOverrides } from "./allocationVisualState.js";
|
||||
import { ConflictOverlay } from "./ConflictOverlay.js";
|
||||
import { computeSubLanes } from "./utils.js";
|
||||
@@ -117,18 +122,9 @@ function TimelineResourcePanelInner({
|
||||
gridLines,
|
||||
xToDate,
|
||||
}: TimelineResourcePanelProps) {
|
||||
const {
|
||||
resources,
|
||||
allocsByResource,
|
||||
vacationsByResource,
|
||||
filters,
|
||||
viewStart,
|
||||
viewEnd,
|
||||
displayMode,
|
||||
heatmapScheme,
|
||||
blinkOverbookedDays,
|
||||
activeFilterCount,
|
||||
} = useTimelineContext();
|
||||
const { resources, allocsByResource, vacationsByResource } = useTimelineData();
|
||||
const { filters, viewStart, viewEnd, activeFilterCount } = useTimelineView();
|
||||
const { displayMode, heatmapScheme, blinkOverbookedDays } = useTimelineDisplay();
|
||||
|
||||
// ─── Heatmap hover state ────────────────────────────────────────────────────
|
||||
const heatmapRafRef = useRef<number | null>(null);
|
||||
|
||||
Reference in New Issue
Block a user