From c4ab3eb9920548ad82e142d1635bee071b8b4a6b Mon Sep 17 00:00:00 2001 From: ilusi0n Date: Sun, 28 Aug 2022 11:22:43 +0100 Subject: [PATCH] add jellyseerr integration --- src/components/services/widget.jsx | 2 + .../services/widgets/service/jellyseerr.jsx | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/components/services/widgets/service/jellyseerr.jsx diff --git a/src/components/services/widget.jsx b/src/components/services/widget.jsx index 142d790dc..926f1156f 100644 --- a/src/components/services/widget.jsx +++ b/src/components/services/widget.jsx @@ -10,6 +10,7 @@ import Rutorrent from "./widgets/service/rutorrent"; import Jellyfin from "./widgets/service/jellyfin"; import Speedtest from "./widgets/service/speedtest"; import Traefik from "./widgets/service/traefik"; +import Jellyseerr from "./widgets/service/jellyseerr"; const widgetMappings = { docker: Docker, @@ -24,6 +25,7 @@ const widgetMappings = { rutorrent: Rutorrent, speedtest: Speedtest, traefik: Traefik, + jellyseerr: Jellyseerr }; export default function Widget({ service }) { diff --git a/src/components/services/widgets/service/jellyseerr.jsx b/src/components/services/widgets/service/jellyseerr.jsx new file mode 100644 index 000000000..9d1ebad8c --- /dev/null +++ b/src/components/services/widgets/service/jellyseerr.jsx @@ -0,0 +1,51 @@ +import useSWR from "swr"; + +import Widget from "../widget"; +import Block from "../block"; + +export default function Jellyseerr({ service }) { + const config = service.widget; + + function buildApiUrl(endpoint) { + const { url } = config; + const reqUrl = new URL(`/api/v1/${endpoint}`, url); + return `/api/proxy?url=${encodeURIComponent(reqUrl)}`; + } + + const fetcher = async (url) => { + const res = await fetch(url, { + method: "GET", + withCredentials: true, + credentials: "include", + headers: { + "X-Api-Key": `${config.key}`, + "Content-Type": "application/json" + } + }); + return await res.json(); + }; + + const { data: statsData, error: statsError } = useSWR(buildApiUrl(`request/count`), fetcher); + + if (statsError) { + return ; + } + + if (!statsData) { + return ( + + + + + + ); + } + + return ( + + + + + + ); +}