diff --git a/src/App.svelte b/src/App.svelte index d681688..6f23d47 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -68,6 +68,17 @@ let secretDescription = ''; let secretValue = ''; let secretError = ''; + let overlays: Array<{ id: string; name: string; slug: string; draft_html: string; draft_css: string; draft_javascript: string; published: boolean; enabled: boolean; disabled_design: string }> = []; + let selectedOverlayId = ''; + let overlayName = ''; + let overlaySlug = ''; + let overlayHtml = ''; + let overlayCss = ''; + let overlayJavascript = ''; + let overlayEnabled = true; + let overlayDisabledDesign = 'transparent'; + let overlayError = ''; + let overlayBusy = false; let oauthScopes: Record<'streamer' | 'bot', { connected: boolean; missing_scopes: string[]; reauthorization_required: boolean }> = { streamer: { connected: false, missing_scopes: [], reauthorization_required: false }, bot: { connected: false, missing_scopes: [], reauthorization_required: false }, @@ -122,6 +133,7 @@ await loadCollaboration(); await loadBotCommands(); await loadBotSecrets(); + await loadOverlays(); await loadStreamInfo(); connectRealtime(); if (!mustReplaceCredentials) password = ''; @@ -571,6 +583,92 @@ } } + async function loadOverlays() { + try { + const response = await fetch(`${serverAddress}/api/v1/overlays`, { headers: { authorization: `Bearer ${sessionToken}` } }); + if (!response.ok) throw new Error('Overlays could not be loaded.'); + overlays = await response.json(); + if (!selectedOverlayId && overlays[0]) selectOverlay(overlays[0]); + overlayError = ''; + } catch (error) { + overlayError = error instanceof Error ? error.message : 'Overlays could not be loaded.'; + } + } + + function selectOverlay(overlay: (typeof overlays)[number]) { + selectedOverlayId = overlay.id; + overlayName = overlay.name; + overlaySlug = overlay.slug; + overlayHtml = overlay.draft_html; + overlayCss = overlay.draft_css; + overlayJavascript = overlay.draft_javascript; + overlayEnabled = overlay.enabled; + overlayDisabledDesign = overlay.disabled_design; + } + + async function createOverlay() { + selectedOverlayId = ''; + overlayName = 'New Overlay'; + overlaySlug = `overlay-${Date.now()}`; + overlayHtml = '