画布图层的媒体渲染分派抽成独立函数
- 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:
@@ -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}`}
|
||||
|
||||
Reference in New Issue
Block a user