import { nextTick, UnwrapRef } from "vue"; import { APIError } from "./api_error"; export function objForEach( obj: T, f: (k: keyof T, v: T[keyof T]) => void, ): void { for (const k in obj) { if (Object.prototype.hasOwnProperty.call(obj, k)) { f(k, obj[k]); } } } export type Like = T | UnwrapRef; export function unwrap_like(value: Like): T { return value as T; } export type Loading = T | "loading" | "error"; export function loading_success(o: Loading): o is T { if (o === "loading") return false; if (o === "error") return false; return true; } export function ensure_loaded(o: Loading): T { if (!loading_success(o)) throw ""; return o; } export function wait_for(condition: () => boolean, action: () => void) { const do_action = () => { if (!condition()) { nextTick(do_action); return; } action(); }; do_action(); } export function handle_error(error: unknown) { if (error instanceof APIError) { error.alert(); } else { console.error(error); } } export function name_door(day: number): string { return `Türchen ${day}`; }