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 (
+
+
+
+
+
+ );
+}