Files
Recordly/electron/recordingEditorLoading.ts
T
webadderall eaf87be95b Recordly 2.0 local review stack 2/6
Dependency-ordered review preparation. Not pushed or remotely reviewed.
2026-11-06 05:24:21 +11:00

42 lines
1.0 KiB
TypeScript

type LoadingResult = { error?: string };
/** Let a new editor paint its skeleton before recording persistence finishes. */
export function createRecordingEditorLoading() {
let pending: {
owner: number;
promise: Promise<LoadingResult>;
resolve: (result: LoadingResult) => void;
} | null = null;
let result: LoadingResult = {};
return {
get active() {
return pending !== null;
},
begin(owner: number) {
if (pending) return false;
result = {};
let resolve!: (result: LoadingResult) => void;
const promise = new Promise<LoadingResult>((done) => {
resolve = done;
});
pending = { owner, promise, resolve };
return true;
},
wait() {
return pending?.promise ?? Promise.resolve(result);
},
finish(owner: number, error?: string) {
if (!pending || pending.owner !== owner) return false;
result = error ? { error } : {};
pending.resolve(result);
pending = null;
return true;
},
clearError() {
result = {};
},
};
}
export const recordingEditorLoading = createRecordingEditorLoading();