This commit is contained in:
2025-10-13 20:48:35 +03:00
Unverified
parent 198ed49c80
commit bcf445916c
12 changed files with 225 additions and 300 deletions
+30
View File
@@ -43,4 +43,34 @@ export function ub64(s: string): Uint8Array {
export function id<T extends Element = HTMLElement>(id: string): T {
return document.getElementById(id) as unknown as T
}
/**
* Runs the specified callback after `click` or `touchstart` event is triggered.
*
* @param action The action to perform after interaction
* @returns A function to clean up the event listeners.
*/
export function doAfterInteraction<T>(action?: () => (T | Promise<T>)): Promise<T> {
return new Promise((resolve, reject) => {
function doAfterInteractionInner() {
document.removeEventListener("click", doAfterInteractionInner);
document.removeEventListener("touchstart", doAfterInteractionInner);
try {
const result = action?.();
if (result instanceof Promise) {
result.then(resolve);
} else {
resolve(result as T);
}
} catch (error) {
reject(error);
}
}
document.addEventListener("click", doAfterInteractionInner);
document.addEventListener("touchstart", doAfterInteractionInner);
setTimeout(reject, 10000);
});
}