修正联合概览状态定位

结构问题高亮 layout_status

组件问题高亮 components_status
This commit is contained in:
2026-09-05 12:44:26 +08:00
parent 44bebae0a9
commit 5a31809e21
2 changed files with 16 additions and 7 deletions
@@ -5,6 +5,7 @@ import {
nodeHasBlockedComponents,
nodeNeedsComponentReview,
} from '../../../features/ui-editor/bindingOverview';
import type { StageStatusField } from '../../../features/ui-editor/stageStatusOverview';
import {
getStageStatusOverview,
isBlocked,
@@ -23,7 +24,11 @@ export function RecognitionAndBindingOverview({
}: {
uiTrees: UITree[];
sprites: Record<string, SpriteAsset>;
onFocusStatusNode: (treeId: UIDesignImageId, nodeId: NodeId) => void;
onFocusStatusNode: (
treeId: UIDesignImageId,
nodeId: NodeId,
field: StageStatusField,
) => void;
}) {
const recognition = useMemo(
() => getStageStatusOverview(uiTrees, 'layout_status'),
@@ -35,7 +40,8 @@ export function RecognitionAndBindingOverview({
);
const layoutAttentionCycle = useUiTreeNodeCycle({
uiTrees,
onFocusNode: onFocusStatusNode,
onFocusNode: (treeId, nodeId) =>
onFocusStatusNode(treeId, nodeId, 'layout_status'),
matches: ({ node }) => {
const status = node.metadata.layout_status;
return isBlocked(status) || isNeedReview(status);
@@ -43,17 +49,20 @@ export function RecognitionAndBindingOverview({
});
const layoutBlockedCycle = useUiTreeNodeCycle({
uiTrees,
onFocusNode: onFocusStatusNode,
onFocusNode: (treeId, nodeId) =>
onFocusStatusNode(treeId, nodeId, 'layout_status'),
matches: ({ node }) => isBlocked(node.metadata.layout_status),
});
const componentAttentionCycle = useUiTreeNodeCycle({
uiTrees,
onFocusNode: onFocusStatusNode,
onFocusNode: (treeId, nodeId) =>
onFocusStatusNode(treeId, nodeId, 'components_status'),
matches: nodeNeedsComponentReview,
});
const componentBlockedCycle = useUiTreeNodeCycle({
uiTrees,
onFocusNode: onFocusStatusNode,
onFocusNode: (treeId, nodeId) =>
onFocusStatusNode(treeId, nodeId, 'components_status'),
matches: nodeHasBlockedComponents,
});
@@ -274,9 +274,9 @@ export default function UiEditorPage({
<RecognitionAndBindingOverview
uiTrees={session.input.uiTrees}
sprites={session.input.sprites}
onFocusStatusNode={(treeId, nodeId) => {
onFocusStatusNode={(treeId, nodeId, field) => {
session.input.focusNode(treeId, nodeId);
session.input.highlightStatusField(nodeId, 'layout_status');
session.input.highlightStatusField(nodeId, field);
}}
/>
) : (