Fix: Messwerte erscheinen im Objekt-Info (Live-Injektion statt eingefrorenem Memo)
Das Objekt-Info-Panel zeigte die Live-Messwerte nie an: `measurement` lag im memoisierten `baseHost`, dessen Dep-Liste `draft` bewusst NICHT enthält (sonst würde der ganze Host bei jeder Mausbewegung neu gebaut) → der Wert blieb auf dem Anfangswert (null) eingefroren. Fix: `measurement` nicht mehr im Memo, sondern in `hostWithMode` bei jedem Render frisch injiziert (draft?.measure). tsc + vitest grün.
This commit is contained in:
+12
-6
@@ -133,6 +133,7 @@ import {
|
|||||||
import type { CopyMode, TransformOp, TransformSelection } from "./tools/transform";
|
import type { CopyMode, TransformOp, TransformSelection } from "./tools/transform";
|
||||||
import { DEFAULT_SNAP } from "./tools/types";
|
import { DEFAULT_SNAP } from "./tools/types";
|
||||||
import type {
|
import type {
|
||||||
|
MeasurementReadout,
|
||||||
SnapResult,
|
SnapResult,
|
||||||
SnapSettings,
|
SnapSettings,
|
||||||
ToolContext,
|
ToolContext,
|
||||||
@@ -2866,9 +2867,9 @@ export default function App() {
|
|||||||
onImportLineStyles: importLineStyles,
|
onImportLineStyles: importLineStyles,
|
||||||
onImportHatches: importHatches,
|
onImportHatches: importHatches,
|
||||||
selection,
|
selection,
|
||||||
// Live-Messwerte des Mess-Werkzeugs (aus dem aktiven Draft) — das Objekt-
|
// Platzhalter — der LIVE-Wert wird in `hostWithMode` je Render injiziert
|
||||||
// Info-Panel zeigt sie, solange gemessen wird.
|
// (nicht hier, weil `draft` bewusst kein Dep dieses Memos ist, s. dort).
|
||||||
measurement: draft?.measure ?? null,
|
measurement: null,
|
||||||
onSetSelectionColor: (color) => {
|
onSetSelectionColor: (color) => {
|
||||||
if (!selection) return;
|
if (!selection) return;
|
||||||
if (selection.kind === "wall" || selection.kind === "drawing2d")
|
if (selection.kind === "wall" || selection.kind === "drawing2d")
|
||||||
@@ -4639,7 +4640,7 @@ export default function App() {
|
|||||||
onResize={(size) => resizeDock("left", size)}
|
onResize={(size) => resizeDock("left", size)}
|
||||||
onResizeGroups={(w) => resizeGroups("left", w)}
|
onResizeGroups={(w) => resizeGroups("left", w)}
|
||||||
buildHost={(activeTab) =>
|
buildHost={(activeTab) =>
|
||||||
hostWithMode(baseHost, activeTab, modeFor, setModeFor)
|
hostWithMode(baseHost, activeTab, modeFor, setModeFor, draft?.measure ?? null)
|
||||||
}
|
}
|
||||||
displayModeFor={(activeTab) => modeFor(activeTab)}
|
displayModeFor={(activeTab) => modeFor(activeTab)}
|
||||||
onDisplayModeChange={(activeTab, m) => setModeFor(activeTab, m)}
|
onDisplayModeChange={(activeTab, m) => setModeFor(activeTab, m)}
|
||||||
@@ -4833,7 +4834,7 @@ export default function App() {
|
|||||||
onResize={(size) => resizeDock("right", size)}
|
onResize={(size) => resizeDock("right", size)}
|
||||||
onResizeGroups={(w) => resizeGroups("right", w)}
|
onResizeGroups={(w) => resizeGroups("right", w)}
|
||||||
buildHost={(activeTab) =>
|
buildHost={(activeTab) =>
|
||||||
hostWithMode(baseHost, activeTab, modeFor, setModeFor)
|
hostWithMode(baseHost, activeTab, modeFor, setModeFor, draft?.measure ?? null)
|
||||||
}
|
}
|
||||||
displayModeFor={(activeTab) => modeFor(activeTab)}
|
displayModeFor={(activeTab) => modeFor(activeTab)}
|
||||||
onDisplayModeChange={(activeTab, m) => setModeFor(activeTab, m)}
|
onDisplayModeChange={(activeTab, m) => setModeFor(activeTab, m)}
|
||||||
@@ -4868,7 +4869,7 @@ export default function App() {
|
|||||||
{layout.floating.map((fp) => (
|
{layout.floating.map((fp) => (
|
||||||
<PanelHostContext.Provider
|
<PanelHostContext.Provider
|
||||||
key={fp.panelId}
|
key={fp.panelId}
|
||||||
value={hostWithMode(baseHost, fp.panelId, modeFor, setModeFor)}
|
value={hostWithMode(baseHost, fp.panelId, modeFor, setModeFor, draft?.measure ?? null)}
|
||||||
>
|
>
|
||||||
<FloatingPanel
|
<FloatingPanel
|
||||||
panel={fp}
|
panel={fp}
|
||||||
@@ -5290,9 +5291,14 @@ function hostWithMode(
|
|||||||
activeTab: string | null,
|
activeTab: string | null,
|
||||||
modeFor: (id: string | null) => DisplayMode,
|
modeFor: (id: string | null) => DisplayMode,
|
||||||
setModeFor: (id: string | null, mode: DisplayMode) => void,
|
setModeFor: (id: string | null, mode: DisplayMode) => void,
|
||||||
|
measurement: MeasurementReadout | null = null,
|
||||||
): PanelHost {
|
): PanelHost {
|
||||||
const value: PanelHostValue = {
|
const value: PanelHostValue = {
|
||||||
...base,
|
...base,
|
||||||
|
// Live-Messwerte NICHT aus dem memoisierten `base` (dort wären sie eingefroren,
|
||||||
|
// da `draft` bewusst kein Memo-Dep ist — sonst würde der ganze Host bei jeder
|
||||||
|
// Mausbewegung neu gebaut). Hier bei jedem Render frisch injiziert.
|
||||||
|
measurement,
|
||||||
displayMode: {
|
displayMode: {
|
||||||
mode: modeFor(activeTab),
|
mode: modeFor(activeTab),
|
||||||
setMode: (mode) => setModeFor(activeTab, mode),
|
setMode: (mode) => setModeFor(activeTab, mode),
|
||||||
|
|||||||
Reference in New Issue
Block a user