mirror of
https://github.com/gethomepage/homepage.git
synced 2026-05-18 11:27:33 +08:00
Chore: rename Jellyseerr widget to Seerr and update references (#6322)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Tests / vitest (1) (push) Has been cancelled
Tests / vitest (2) (push) Has been cancelled
Tests / vitest (3) (push) Has been cancelled
Tests / vitest (4) (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Tests / vitest (1) (push) Has been cancelled
Tests / vitest (2) (push) Has been cancelled
Tests / vitest (3) (push) Has been cancelled
Tests / vitest (4) (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
This commit is contained in:
@@ -1,12 +1,14 @@
|
|||||||
---
|
---
|
||||||
title: Jellyseerr
|
title: Seerr Widget
|
||||||
description: Jellyseerr Widget Configuration
|
description: Seerr Widget Configuration
|
||||||
---
|
---
|
||||||
|
|
||||||
Learn more about [Jellyseerr](https://github.com/Fallenbagel/jellyseerr).
|
Learn more about [Seerr](https://github.com/seerr-team/seerr).
|
||||||
|
|
||||||
Find your API key under `Settings > General > API Key`.
|
Find your API key under `Settings > General > API Key`.
|
||||||
|
|
||||||
|
_Note that Jellyseerr was merged with Overseerr and renamed Seerr._
|
||||||
|
|
||||||
Allowed fields: `["pending", "approved", "available", "issues"]`.
|
Allowed fields: `["pending", "approved", "available", "issues"]`.
|
||||||
Default fields: `["pending", "approved", "available"]`.
|
Default fields: `["pending", "approved", "available"]`.
|
||||||
|
|
||||||
@@ -91,7 +91,6 @@ nav:
|
|||||||
- widgets/services/jackett.md
|
- widgets/services/jackett.md
|
||||||
- widgets/services/jdownloader.md
|
- widgets/services/jdownloader.md
|
||||||
- widgets/services/jellyfin.md
|
- widgets/services/jellyfin.md
|
||||||
- widgets/services/jellyseerr.md
|
|
||||||
- widgets/services/jellystat.md
|
- widgets/services/jellystat.md
|
||||||
- widgets/services/kavita.md
|
- widgets/services/kavita.md
|
||||||
- widgets/services/komga.md
|
- widgets/services/komga.md
|
||||||
@@ -151,6 +150,7 @@ nav:
|
|||||||
- widgets/services/rutorrent.md
|
- widgets/services/rutorrent.md
|
||||||
- widgets/services/sabnzbd.md
|
- widgets/services/sabnzbd.md
|
||||||
- widgets/services/scrutiny.md
|
- widgets/services/scrutiny.md
|
||||||
|
- widgets/services/seerr.md
|
||||||
- widgets/services/slskd.md
|
- widgets/services/slskd.md
|
||||||
- widgets/services/sonarr.md
|
- widgets/services/sonarr.md
|
||||||
- widgets/services/speedtest-tracker.md
|
- widgets/services/speedtest-tracker.md
|
||||||
|
|||||||
@@ -289,7 +289,7 @@
|
|||||||
"approved": "Approved",
|
"approved": "Approved",
|
||||||
"available": "Available"
|
"available": "Available"
|
||||||
},
|
},
|
||||||
"jellyseerr": {
|
"seerr": {
|
||||||
"pending": "Pending",
|
"pending": "Pending",
|
||||||
"approved": "Approved",
|
"approved": "Approved",
|
||||||
"available": "Available",
|
"available": "Available",
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ const components = {
|
|||||||
jackett: dynamic(() => import("./jackett/component")),
|
jackett: dynamic(() => import("./jackett/component")),
|
||||||
jdownloader: dynamic(() => import("./jdownloader/component")),
|
jdownloader: dynamic(() => import("./jdownloader/component")),
|
||||||
jellyfin: dynamic(() => import("./jellyfin/component")),
|
jellyfin: dynamic(() => import("./jellyfin/component")),
|
||||||
jellyseerr: dynamic(() => import("./jellyseerr/component")),
|
jellyseerr: dynamic(() => import("./seerr/component")),
|
||||||
jellystat: dynamic(() => import("./jellystat/component")),
|
jellystat: dynamic(() => import("./jellystat/component")),
|
||||||
kavita: dynamic(() => import("./kavita/component")),
|
kavita: dynamic(() => import("./kavita/component")),
|
||||||
komga: dynamic(() => import("./komga/component")),
|
komga: dynamic(() => import("./komga/component")),
|
||||||
@@ -124,6 +124,7 @@ const components = {
|
|||||||
rutorrent: dynamic(() => import("./rutorrent/component")),
|
rutorrent: dynamic(() => import("./rutorrent/component")),
|
||||||
sabnzbd: dynamic(() => import("./sabnzbd/component")),
|
sabnzbd: dynamic(() => import("./sabnzbd/component")),
|
||||||
scrutiny: dynamic(() => import("./scrutiny/component")),
|
scrutiny: dynamic(() => import("./scrutiny/component")),
|
||||||
|
seerr: dynamic(() => import("./seerr/component")),
|
||||||
slskd: dynamic(() => import("./slskd/component")),
|
slskd: dynamic(() => import("./slskd/component")),
|
||||||
sonarr: dynamic(() => import("./sonarr/component")),
|
sonarr: dynamic(() => import("./sonarr/component")),
|
||||||
speedtest: dynamic(() => import("./speedtest/component")),
|
speedtest: dynamic(() => import("./speedtest/component")),
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ import Container from "components/services/widget/container";
|
|||||||
|
|
||||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||||
|
|
||||||
export const jellyseerrDefaultFields = ["pending", "approved", "available"];
|
export const seerrDefaultFields = ["pending", "approved", "available"];
|
||||||
|
|
||||||
export default function Component({ service }) {
|
export default function Component({ service }) {
|
||||||
const { widget } = service;
|
const { widget } = service;
|
||||||
|
|
||||||
widget.fields = widget?.fields?.length ? widget.fields : jellyseerrDefaultFields;
|
widget.fields = widget?.fields?.length ? widget.fields : seerrDefaultFields;
|
||||||
const isIssueEnabled = widget.fields.includes("issues");
|
const isIssueEnabled = widget.fields.includes("issues");
|
||||||
|
|
||||||
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
|
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
|
||||||
@@ -20,20 +20,20 @@ export default function Component({ service }) {
|
|||||||
if (!statsData || (isIssueEnabled && !issueData)) {
|
if (!statsData || (isIssueEnabled && !issueData)) {
|
||||||
return (
|
return (
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="jellyseerr.pending" />
|
<Block label="seerr.pending" />
|
||||||
<Block label="jellyseerr.approved" />
|
<Block label="seerr.approved" />
|
||||||
<Block label="jellyseerr.available" />
|
<Block label="seerr.available" />
|
||||||
<Block label="jellyseerr.issues" />
|
<Block label="seerr.issues" />
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="jellyseerr.pending" value={statsData.pending} />
|
<Block label="seerr.pending" value={statsData.pending} />
|
||||||
<Block label="jellyseerr.approved" value={statsData.approved} />
|
<Block label="seerr.approved" value={statsData.approved} />
|
||||||
<Block label="jellyseerr.available" value={statsData.available} />
|
<Block label="seerr.available" value={statsData.available} />
|
||||||
<Block label="jellyseerr.issues" value={`${issueData?.open} / ${issueData?.total}`} />
|
<Block label="seerr.issues" value={`${issueData?.open} / ${issueData?.total}`} />
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -8,9 +8,9 @@ import { renderWithProviders } from "test-utils/render-with-providers";
|
|||||||
const { useWidgetAPI } = vi.hoisted(() => ({ useWidgetAPI: vi.fn() }));
|
const { useWidgetAPI } = vi.hoisted(() => ({ useWidgetAPI: vi.fn() }));
|
||||||
vi.mock("utils/proxy/use-widget-api", () => ({ default: useWidgetAPI }));
|
vi.mock("utils/proxy/use-widget-api", () => ({ default: useWidgetAPI }));
|
||||||
|
|
||||||
import Component, { jellyseerrDefaultFields } from "./component";
|
import Component, { seerrDefaultFields } from "./component";
|
||||||
|
|
||||||
describe("widgets/jellyseerr/component", () => {
|
describe("widgets/seerr/component", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
vi.clearAllMocks();
|
vi.clearAllMocks();
|
||||||
});
|
});
|
||||||
@@ -20,16 +20,16 @@ describe("widgets/jellyseerr/component", () => {
|
|||||||
.mockReturnValueOnce({ data: undefined, error: undefined }) // request/count
|
.mockReturnValueOnce({ data: undefined, error: undefined }) // request/count
|
||||||
.mockReturnValueOnce({ data: undefined, error: undefined }); // issue/count disabled (endpoint = "")
|
.mockReturnValueOnce({ data: undefined, error: undefined }); // issue/count disabled (endpoint = "")
|
||||||
|
|
||||||
const service = { widget: { type: "jellyseerr", url: "http://x" } };
|
const service = { widget: { type: "seerr", url: "http://x" } };
|
||||||
const { container } = renderWithProviders(<Component service={service} />, { settings: { hideErrors: false } });
|
const { container } = renderWithProviders(<Component service={service} />, { settings: { hideErrors: false } });
|
||||||
|
|
||||||
expect(service.widget.fields).toEqual(jellyseerrDefaultFields);
|
expect(service.widget.fields).toEqual(seerrDefaultFields);
|
||||||
expect(useWidgetAPI.mock.calls[1][1]).toBe("");
|
expect(useWidgetAPI.mock.calls[1][1]).toBe("");
|
||||||
expect(container.querySelectorAll(".service-block")).toHaveLength(3);
|
expect(container.querySelectorAll(".service-block")).toHaveLength(3);
|
||||||
expect(screen.getByText("jellyseerr.pending")).toBeInTheDocument();
|
expect(screen.getByText("seerr.pending")).toBeInTheDocument();
|
||||||
expect(screen.getByText("jellyseerr.approved")).toBeInTheDocument();
|
expect(screen.getByText("seerr.approved")).toBeInTheDocument();
|
||||||
expect(screen.getByText("jellyseerr.available")).toBeInTheDocument();
|
expect(screen.getByText("seerr.available")).toBeInTheDocument();
|
||||||
expect(screen.queryByText("jellyseerr.issues")).toBeNull();
|
expect(screen.queryByText("seerr.issues")).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders issues when enabled (and calls the issue/count endpoint)", () => {
|
it("renders issues when enabled (and calls the issue/count endpoint)", () => {
|
||||||
@@ -38,7 +38,7 @@ describe("widgets/jellyseerr/component", () => {
|
|||||||
.mockReturnValueOnce({ data: { open: 1, total: 2 }, error: undefined });
|
.mockReturnValueOnce({ data: { open: 1, total: 2 }, error: undefined });
|
||||||
|
|
||||||
const service = {
|
const service = {
|
||||||
widget: { type: "jellyseerr", url: "http://x", fields: ["pending", "approved", "available", "issues"] },
|
widget: { type: "seerr", url: "http://x", fields: ["pending", "approved", "available", "issues"] },
|
||||||
};
|
};
|
||||||
const { container } = renderWithProviders(<Component service={service} />, { settings: { hideErrors: false } });
|
const { container } = renderWithProviders(<Component service={service} />, { settings: { hideErrors: false } });
|
||||||
|
|
||||||
@@ -52,10 +52,9 @@ describe("widgets/jellyseerr/component", () => {
|
|||||||
.mockReturnValueOnce({ data: { pending: 0, approved: 0, available: 0 }, error: undefined })
|
.mockReturnValueOnce({ data: { pending: 0, approved: 0, available: 0 }, error: undefined })
|
||||||
.mockReturnValueOnce({ data: undefined, error: { message: "nope" } });
|
.mockReturnValueOnce({ data: undefined, error: { message: "nope" } });
|
||||||
|
|
||||||
renderWithProviders(
|
renderWithProviders(<Component service={{ widget: { type: "seerr", url: "http://x", fields: ["issues"] } }} />, {
|
||||||
<Component service={{ widget: { type: "jellyseerr", url: "http://x", fields: ["issues"] } }} />,
|
settings: { hideErrors: false },
|
||||||
{ settings: { hideErrors: false } },
|
});
|
||||||
);
|
|
||||||
|
|
||||||
expect(screen.getAllByText(/widget\.api_error/i).length).toBeGreaterThan(0);
|
expect(screen.getAllByText(/widget\.api_error/i).length).toBeGreaterThan(0);
|
||||||
expect(screen.getByText("nope")).toBeInTheDocument();
|
expect(screen.getByText("nope")).toBeInTheDocument();
|
||||||
@@ -56,7 +56,6 @@ import immich from "./immich/widget";
|
|||||||
import jackett from "./jackett/widget";
|
import jackett from "./jackett/widget";
|
||||||
import jdownloader from "./jdownloader/widget";
|
import jdownloader from "./jdownloader/widget";
|
||||||
import jellyfin from "./jellyfin/widget";
|
import jellyfin from "./jellyfin/widget";
|
||||||
import jellyseerr from "./jellyseerr/widget";
|
|
||||||
import jellystat from "./jellystat/widget";
|
import jellystat from "./jellystat/widget";
|
||||||
import karakeep from "./karakeep/widget";
|
import karakeep from "./karakeep/widget";
|
||||||
import kavita from "./kavita/widget";
|
import kavita from "./kavita/widget";
|
||||||
@@ -116,6 +115,7 @@ import romm from "./romm/widget";
|
|||||||
import rutorrent from "./rutorrent/widget";
|
import rutorrent from "./rutorrent/widget";
|
||||||
import sabnzbd from "./sabnzbd/widget";
|
import sabnzbd from "./sabnzbd/widget";
|
||||||
import scrutiny from "./scrutiny/widget";
|
import scrutiny from "./scrutiny/widget";
|
||||||
|
import seerr from "./seerr/widget";
|
||||||
import slskd from "./slskd/widget";
|
import slskd from "./slskd/widget";
|
||||||
import sonarr from "./sonarr/widget";
|
import sonarr from "./sonarr/widget";
|
||||||
import speedtest from "./speedtest/widget";
|
import speedtest from "./speedtest/widget";
|
||||||
@@ -212,7 +212,7 @@ const widgets = {
|
|||||||
jackett,
|
jackett,
|
||||||
jdownloader,
|
jdownloader,
|
||||||
jellyfin,
|
jellyfin,
|
||||||
jellyseerr,
|
jellyseerr: seerr,
|
||||||
jellystat,
|
jellystat,
|
||||||
kavita,
|
kavita,
|
||||||
komga,
|
komga,
|
||||||
@@ -272,6 +272,7 @@ const widgets = {
|
|||||||
rutorrent,
|
rutorrent,
|
||||||
sabnzbd,
|
sabnzbd,
|
||||||
scrutiny,
|
scrutiny,
|
||||||
|
seerr,
|
||||||
slskd,
|
slskd,
|
||||||
sonarr,
|
sonarr,
|
||||||
speedtest,
|
speedtest,
|
||||||
|
|||||||
Reference in New Issue
Block a user