fix(*): 素材库与画布 - 修复批量删除刷新、选择布局及工具引用
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { getMediaBlob } from "@/services/file-storage";
|
||||
import { getImageBlob } from "@/services/image-storage";
|
||||
import { deleteRemoteAsset, deleteRemoteCanvasProject, getRemoteAsset, getRemoteAssetsByIds, getRemoteCanvasProject, getRemoteUserDataSnapshot, listRemoteAssetsPage, restoreRemoteCanvasHistory, upsertRemoteAsset, upsertRemoteCanvasProject } from "@/services/api/user-data";
|
||||
import { deleteRemoteAssets, deleteRemoteCanvasProject, getRemoteAsset, getRemoteAssetsByIds, getRemoteCanvasProject, getRemoteUserDataSnapshot, listRemoteAssetsPage, restoreRemoteCanvasHistory, upsertRemoteAsset, upsertRemoteCanvasProject } from "@/services/api/user-data";
|
||||
import { ApiError } from "@/services/api/request";
|
||||
import { canvasContentHash, sameCanvasContent } from "@/lib/canvas/canvas-content";
|
||||
import { getActiveUserScope } from "@/lib/user-scope";
|
||||
@@ -438,19 +438,34 @@ export async function createCanvasProjectWithRemoteSync(title: string, projectId
|
||||
}
|
||||
|
||||
export async function deleteAssetWithRemoteSync(id: string) {
|
||||
return deleteAssetsWithRemoteSync([id]);
|
||||
}
|
||||
|
||||
export async function deleteAssetsWithRemoteSync(ids: string[]) {
|
||||
const epoch = sessionEpoch;
|
||||
const assetId = id.trim();
|
||||
if (!assetId) throw new Error("素材 ID 不能为空");
|
||||
if (!ids.length || ids.length > 1000) throw new Error("每次请选择 1–1000 个素材删除");
|
||||
const assetIds = [...new Set(ids.map((id) => id.trim()))];
|
||||
if (assetIds.some((id) => !id)) throw new Error("素材 ID 不能为空");
|
||||
await withRemoteUserDataSyncExclusive(async () => {
|
||||
if (epoch !== sessionEpoch) throw new Error("账号已切换,请重新选择要删除的素材");
|
||||
if (activeRemoteUserId) {
|
||||
requireRemoteUserDataBaseline();
|
||||
await deleteRemoteAsset(assetId);
|
||||
acknowledgedAssets.delete(assetId);
|
||||
await deleteRemoteAssets(assetIds);
|
||||
if (epoch !== sessionEpoch) throw new Error("账号已切换,请刷新原账号素材库确认删除结果");
|
||||
for (const id of assetIds) acknowledgedAssets.delete(id);
|
||||
}
|
||||
await useAssetStore.getState().removeAsset(assetId);
|
||||
await useAssetStore.getState().removeAssets(assetIds);
|
||||
await flushAssetStorePersistence();
|
||||
});
|
||||
if (epoch !== sessionEpoch) throw new Error("账号已切换,请刷新原账号素材库确认删除结果");
|
||||
// 列表查询也会进入同步队列,必须在退出删除队列后触发,不能在队列内等待刷新。
|
||||
// 刷新慢或失败不应阻塞确认弹窗关闭,也不能把已完成的删除报告为失败。
|
||||
void Promise.all([
|
||||
appQueryClient.invalidateQueries({ queryKey: ["asset-library"] }, { throwOnError: true }),
|
||||
appQueryClient.invalidateQueries({ queryKey: ["asset-picker"] }, { throwOnError: true }),
|
||||
]).catch((error) => {
|
||||
console.warn("素材删除后列表刷新失败", error);
|
||||
});
|
||||
}
|
||||
|
||||
export async function deleteCanvasProjectsWithRemoteSync(ids: string[]) {
|
||||
|
||||
Reference in New Issue
Block a user