feat(canvas): 条件读取与历史 - 减少画布同步传输并校准版本
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import type { Asset } from "@/stores/use-asset-store";
|
||||
import type { CanvasProject } from "@/stores/canvas/use-canvas-store";
|
||||
import { http, compactApiParams } from "@/services/api/request";
|
||||
|
||||
import { compactApiParams, http } from "@/services/api/request";
|
||||
|
||||
export type RemoteUserDataSummary = {
|
||||
id: string;
|
||||
@@ -117,8 +116,18 @@ export function listRemoteCanvasProjects() {
|
||||
return http.get<{ projects: RemoteUserDataSummary[] }>("/canvas-projects");
|
||||
}
|
||||
|
||||
export function getRemoteCanvasProject(id: string) {
|
||||
return http.get<{ project: CanvasProject }>(`/canvas-projects/${encodeURIComponent(id)}`);
|
||||
export function getRemoteCanvasProject(id: string, knownProject?: CanvasProject) {
|
||||
if (!knownProject || knownProject.id !== id || !Number.isSafeInteger(knownProject.revision)) {
|
||||
return http.get<{ project: CanvasProject }>(`/canvas-projects/${encodeURIComponent(id)}`).then((result) => ({ ...result, notModified: false }));
|
||||
}
|
||||
const etag = `"canvas-${knownProject.revision}"`;
|
||||
return http
|
||||
.get<{ project: CanvasProject } | { notModified: true }>(`/canvas-projects/${encodeURIComponent(id)}`, {
|
||||
headers: { "If-None-Match": etag },
|
||||
validateStatus: (status) => (status >= 200 && status < 300) || status === 304,
|
||||
allowNotModified: true,
|
||||
})
|
||||
.then((result) => ("notModified" in result ? { project: knownProject, notModified: true } : { ...result, notModified: false }));
|
||||
}
|
||||
|
||||
export function upsertRemoteCanvasProject(project: CanvasProject, options?: { repairMissingResources?: boolean }) {
|
||||
|
||||
Reference in New Issue
Block a user