画布图层的媒体渲染分派抽成独立函数

- src/components/image-editor/ImageCanvasWorldView.tsx:音频 / 视频 / 序列帧 / model3d / 默认图片这条五层三元链提成 renderCanvasLayerMedia(早返回写成一列判断),渲染分支与传参不变,新增媒体类型不再加深三元

验证:npx vitest run src/components/image-editor/ImageCanvasWorldView.test.tsx(57 用例全绿)、npm run typecheck
This commit is contained in:
2026-09-22 13:33:14 +08:00
parent d1478e3859
commit cb136fb445
@@ -1024,6 +1024,52 @@ function ImageCanvasImageSequenceLayer({
);
}
/**
* 图层正文按媒体类型 / 资源类别分派:早返回写成一列判断,新增类型不会再加深三元链。
*/
function renderCanvasLayerMedia({
layer,
mediaTransform,
isHovered,
onSelectLayer,
}: {
layer: CanvasLayer;
mediaTransform?: string;
isHovered: boolean;
onSelectLayer: () => void;
}) {
if (layer.mediaType === 'audio') {
return (
<ImageCanvasAudioLayerCard
layer={layer}
isHovered={isHovered}
onSelectLayer={onSelectLayer}
/>
);
}
if (layer.mediaType === 'video') {
return (
<ImageCanvasVideoLayer layer={layer} mediaTransform={mediaTransform} />
);
}
if (layer.mediaType === 'image-sequence') {
return (
<ImageCanvasImageSequenceLayer
layer={layer}
mediaTransform={mediaTransform}
/>
);
}
if (layer.assetKind === 'model3d') {
return (
<ImageCanvasModel3dLayer layer={layer} mediaTransform={mediaTransform} />
);
}
return (
<ImageCanvasImageLayer layer={layer} mediaTransform={mediaTransform} />
);
}
const MemoizedCanvasLayerNode = memo(function CanvasLayerNode({
layer,
isSelected,
@@ -1078,33 +1124,12 @@ const MemoizedCanvasLayerNode = memo(function CanvasLayerNode({
onMouseLeave={() => handlers.onLayerMouseLeave(layer.id)}
aria-label={`选择${layer.title}`}
>
{layer.mediaType === 'audio' ? (
<ImageCanvasAudioLayerCard
layer={layer}
isHovered={isHovered}
onSelectLayer={() => handlers.onSelectLayer(layer.id)}
/>
) : layer.mediaType === 'video' ? (
<ImageCanvasVideoLayer
layer={layer}
mediaTransform={mediaTransform}
/>
) : layer.mediaType === 'image-sequence' ? (
<ImageCanvasImageSequenceLayer
layer={layer}
mediaTransform={mediaTransform}
/>
) : layer.assetKind === 'model3d' ? (
<ImageCanvasModel3dLayer
layer={layer}
mediaTransform={mediaTransform}
/>
) : (
<ImageCanvasImageLayer
layer={layer}
mediaTransform={mediaTransform}
/>
)}
{renderCanvasLayerMedia({
layer,
mediaTransform,
isHovered,
onSelectLayer: () => handlers.onSelectLayer(layer.id),
})}
<CanvasCardCornerActions
kindLabel={kindLabel}
kindAriaLabel={`素材标签:${kindLabel}`}