Files
dbx/apps/desktop/src/lib/editor/queryEditorExecutionViewport.ts
T

45 lines
1.3 KiB
TypeScript

export function createQueryEditorExecutionViewportOwnership() {
let nextRequestId = 0;
let pendingRequestId: number | undefined;
let acceptedRequestId: number | undefined;
let executionActive = false;
let userInteractedDuringExecution = false;
return {
beginRequest(): number {
nextRequestId += 1;
pendingRequestId = nextRequestId;
return nextRequestId;
},
cancelPendingRequest() {
pendingRequestId = undefined;
},
acceptRequest(requestId: number): boolean {
if (pendingRequestId !== requestId) return false;
pendingRequestId = undefined;
acceptedRequestId = requestId;
return true;
},
beginExecution() {
executionActive = true;
userInteractedDuringExecution = false;
},
recordUserInteraction() {
if (executionActive) userInteractedDuringExecution = true;
},
consumeCompletionPreservation(): boolean {
const preserveViewport = acceptedRequestId !== undefined || userInteractedDuringExecution;
acceptedRequestId = undefined;
executionActive = false;
userInteractedDuringExecution = false;
return preserveViewport;
},
reset() {
pendingRequestId = undefined;
acceptedRequestId = undefined;
executionActive = false;
userInteractedDuringExecution = false;
},
};
}