import { AddInstanceDialog } from "./add_an_instance.mjs"; import { initializeInstanceDetailsDialog } from "./confirm_instance_details.mjs"; import storageManager, { Instance } from "./storage_manager.mjs"; export function initializeAddInstanceFlow( detailsDialog: HTMLDialogElement, addDialog: HTMLDialogElement ): { showAddInstanceDialog: () => void, hideAddInstanceDialog: () => void } { const instanceDetailsDialogCallback = ( name: string, host: string, hostSecure: boolean, software: string, icon: string | null ) => { const instance: Instance = { name, origin: `http${hostSecure ? "s" : ""}://${host}`, software, iconURL: icon ?? undefined }; storageManager.storage.instances.push(instance); storageManager.save(); console.log("Successfully added new instance:", instance); }; const { showInstanceDetailsDialog, hideInstanceDetailsDialog, populateInstanceDetailsDialog } = initializeInstanceDetailsDialog(detailsDialog, instanceDetailsDialogCallback); const addInstanceDialogCallback = async ( host: string, secure: boolean, autoQueryMetadata: boolean, ) => { try { if (!autoQueryMetadata) throw new Error("Don't"); const { name, software, iconURL } = await fetch(`/api/instance_info/${secure}/${encodeURIComponent(host)}`) .then(r => r.json()); if ( typeof name !== "string" || typeof software !== "string" || !(typeof iconURL === "string" || iconURL === null) ) throw new Error("Invalid API response"); populateInstanceDetailsDialog(name, host, secure, software, iconURL as string | null); } catch { populateInstanceDetailsDialog(host, host, secure, "", null); } finally { showInstanceDetailsDialog(); } } const { showAddInstanceDialog, hideAddInstanceDialog } = initializeAddInstanceDialog(addDialog, addInstanceDialogCallback); return { showAddInstanceDialog, hideAddInstanceDialog }; }