From 30082c21a7aaaff2a1ea8cdb0f0f06e414cd2343 Mon Sep 17 00:00:00 2001 From: xXJSONDeruloXx Date: Fri, 10 Jan 2025 21:10:35 -0500 Subject: trying to add refresh button --- src/index.tsx | 125 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 81 insertions(+), 44 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index c5b9e1a..b2934e4 100755 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,51 +1,63 @@ -import { definePlugin } from "decky-frontend-lib"; import React, { useEffect, useState } from "react"; import { FaClipboardList } from "react-icons/fa"; +import { definePlugin } from "decky-frontend-lib"; import { marked } from "marked"; import DOMPurify from "dompurify"; function Content() { const [changelog, setChangelog] = useState(null); const [error, setError] = useState(null); + const [isRefreshing, setIsRefreshing] = useState(false); // For button state feedback - useEffect(() => { + const fetchChangelog = async (signal?: AbortSignal) => { const url = "https://api.github.com/repos/ublue-os/bazzite/releases/tags/41.20250106.2"; - const controller = new AbortController(); - const signal = controller.signal; - - const fetchChangelog = async () => { - try { - const response = await fetch(url, { - headers: { - Accept: "application/vnd.github.v3+json", - }, - signal, - }); - - if (!response.ok) { - throw new Error(`Failed to fetch: ${response.statusText}`); - } + try { + const response = await fetch(url, { + headers: { + Accept: "application/vnd.github.v3+json", + }, + signal, + }); - const data = await response.json(); - setChangelog(data.body); - } catch (err) { - if (err instanceof DOMException && err.name === "AbortError") return; - const errorMessage = - err instanceof Error - ? err.message - : "An unknown error occurred while fetching the changelog."; - setError(errorMessage); + if (!response.ok) { + throw new Error(`Failed to fetch: ${response.statusText}`); } - }; - fetchChangelog(); + const data = await response.json(); + setChangelog(data.body); + setError(null); // Clear previous errors + } catch (err) { + if (err instanceof DOMException && err.name === "AbortError") return; + const errorMessage = + err instanceof Error + ? err.message + : "An unknown error occurred while fetching the changelog."; + setError(errorMessage); + } + }; + + useEffect(() => { + const controller = new AbortController(); + fetchChangelog(controller.signal); return () => { controller.abort(); // Cleanup on unmount }; }, []); + const refreshChangelog = async () => { + setIsRefreshing(true); // Start refresh animation or feedback + setChangelog(null); // Clear existing changelog to show loading + setError(null); // Clear any errors + + try { + await fetchChangelog(); + } finally { + setIsRefreshing(false); // End refresh animation + } + }; + return (

Bazzite Release Notes

- +
+ + +
{error ? (

{error} @@ -121,7 +154,11 @@ function Content() { } `} -

+
) : (

Loading...

-- cgit v1.2.3