整理素材行操作状态渲染

使用显式条件分支构建互斥操作区

保持选择、上传、重命名和普通状态行为不变
This commit is contained in:
2026-07-27 16:34:16 +08:00
parent df8d1320f5
commit dfc1a91590
@@ -2,6 +2,7 @@ import { Check, Download, Pencil, Video, X } from 'lucide-react';
import type {
Dispatch,
MouseEvent as ReactMouseEvent,
ReactNode,
SetStateAction,
} from 'react';
import { useCallback, useEffect, useRef, useState } from 'react';
@@ -230,48 +231,57 @@ export function ImageCanvasAssetRowView({
}}
/>
) : undefined;
const actions = isAssetSelectionMode ? undefined : isUploadingAsset ? (
<div className="image-canvas-editor__asset-upload-status">
<span>{asset.uploadMessage ?? '上传中'}</span>
<strong>{Math.round(uploadProgress)}%</strong>
</div>
) : isRenaming ? (
<div className="image-canvas-editor__asset-actions">
<EditorIconButton
label={`保存素材${asset.label}名称`}
title="保存"
icon={Check}
onClick={() => commitAssetRename(asset)}
/>
<EditorIconButton
label={`取消重命名素材${asset.label}`}
title="取消"
icon={X}
onClick={() => setRenamingAsset(null)}
/>
</div>
) : (
<div className="image-canvas-editor__asset-actions">
<EditorIconButton
label={`下载素材${asset.label}`}
title="下载"
icon={Download}
onClick={() => {
closeMenu();
onDownloadAsset(asset);
}}
/>
<EditorIconButton
label={`重命名素材${asset.label}`}
title="重命名"
icon={Pencil}
onClick={() => {
closeMenu();
startRenamingAsset(asset);
}}
/>
</div>
);
let actions: ReactNode;
if (isAssetSelectionMode) {
actions = undefined;
} else if (isUploadingAsset) {
actions = (
<div className="image-canvas-editor__asset-upload-status">
<span>{asset.uploadMessage ?? '上传中'}</span>
<strong>{Math.round(uploadProgress)}%</strong>
</div>
);
} else if (isRenaming) {
actions = (
<div className="image-canvas-editor__asset-actions">
<EditorIconButton
label={`保存素材${asset.label}名称`}
title="保存"
icon={Check}
onClick={() => commitAssetRename(asset)}
/>
<EditorIconButton
label={`取消重命名素材${asset.label}`}
title="取消"
icon={X}
onClick={() => setRenamingAsset(null)}
/>
</div>
);
} else {
actions = (
<div className="image-canvas-editor__asset-actions">
<EditorIconButton
label={`下载素材${asset.label}`}
title="下载"
icon={Download}
onClick={() => {
closeMenu();
onDownloadAsset(asset);
}}
/>
<EditorIconButton
label={`重命名素材${asset.label}`}
title="重命名"
icon={Pencil}
onClick={() => {
closeMenu();
startRenamingAsset(asset);
}}
/>
</div>
);
}
return (
<div