28 lines
760 B
TypeScript
28 lines
760 B
TypeScript
import type {
|
|
CircuitTreeResponseDto,
|
|
ProjectHistoryStateDto,
|
|
} from "../types";
|
|
|
|
export interface CircuitEditorSnapshot {
|
|
tree: CircuitTreeResponseDto;
|
|
history: ProjectHistoryStateDto;
|
|
}
|
|
|
|
export async function loadCircuitEditorSnapshot(
|
|
readTree: () => Promise<CircuitTreeResponseDto>,
|
|
readHistory: () => Promise<ProjectHistoryStateDto>,
|
|
maxAttempts = 3
|
|
): Promise<CircuitEditorSnapshot> {
|
|
for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
|
|
const tree = await readTree();
|
|
const history = await readHistory();
|
|
if (tree.currentRevision === history.currentRevision) {
|
|
return { tree, history };
|
|
}
|
|
}
|
|
|
|
throw new Error(
|
|
"Der Projektstand hat sich während des Ladens geändert. Bitte erneut versuchen."
|
|
);
|
|
}
|