From ae9fbdcb8bae4c00388aca132faa67d6b33069e1 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 5 Apr 2025 23:54:48 -0700 Subject: [PATCH] Chore: change hoarder widget to karakeep (#5143) --- docs/widgets/services/hoarder.md | 17 ------- docs/widgets/services/index.md | 2 +- docs/widgets/services/karakeep.md | 17 +++++++ mkdocs.yml | 2 +- public/locales/en/common.json | 2 +- src/components/services/widget/container.jsx | 17 ++++++- src/utils/proxy/handlers/credentialed.js | 1 + src/widgets/components.js | 3 +- src/widgets/hoarder/component.jsx | 49 -------------------- src/widgets/karakeep/component.jsx | 49 ++++++++++++++++++++ src/widgets/{hoarder => karakeep}/widget.js | 0 src/widgets/widgets.js | 5 +- 12 files changed, 91 insertions(+), 73 deletions(-) delete mode 100644 docs/widgets/services/hoarder.md create mode 100644 docs/widgets/services/karakeep.md delete mode 100644 src/widgets/hoarder/component.jsx create mode 100644 src/widgets/karakeep/component.jsx rename src/widgets/{hoarder => karakeep}/widget.js (100%) diff --git a/docs/widgets/services/hoarder.md b/docs/widgets/services/hoarder.md deleted file mode 100644 index 3e8c82ad..00000000 --- a/docs/widgets/services/hoarder.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Hoarder -description: Hoarder Widget Configuration ---- - -Learn more about [Hoarder](https://hoarder.app). - -Generate an API key for your user at `User Settings > API Keys`. - -Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4). - -```yaml -widget: - type: hoarder - url: http[s]://hoarder.host.or.ip[:port] - key: hoarderapikey -``` diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md index beb6d491..80ff72ba 100644 --- a/docs/widgets/services/index.md +++ b/docs/widgets/services/index.md @@ -51,7 +51,7 @@ You can also find a list of all available service widgets in the sidebar navigat - [HDHomeRun](hdhomerun.md) - [Headscale](headscale.md) - [Healthchecks](healthchecks.md) -- [Hoarder](hoarder.md) +- [Karakeep](karakeep.md) - [Home Assistant](homeassistant.md) - [HomeBox](homebox.md) - [Homebridge](homebridge.md) diff --git a/docs/widgets/services/karakeep.md b/docs/widgets/services/karakeep.md new file mode 100644 index 00000000..a2902315 --- /dev/null +++ b/docs/widgets/services/karakeep.md @@ -0,0 +1,17 @@ +--- +title: Karakeep +description: Karakeep Widget Configuration +--- + +Learn more about [Karakeep](https://karakeep.app) (formerly known as Hoarder). + +Generate an API key for your user at `User Settings > API Keys`. + +Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4). + +```yaml +widget: + type: karakeep + url: http[s]://karakeep.host.or.ip[:port] + key: karakeep_api_key +``` diff --git a/mkdocs.yml b/mkdocs.yml index 01a5295b..8bb19e43 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -74,7 +74,7 @@ nav: - widgets/services/hdhomerun.md - widgets/services/headscale.md - widgets/services/healthchecks.md - - widgets/services/hoarder.md + - widgets/services/karakeep.md - widgets/services/homeassistant.md - widgets/services/homebox.md - widgets/services/homebridge.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 4a9c33d5..09b9c2d3 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -1024,7 +1024,7 @@ "bcharge":"Battery Charge", "timeleft":"Time Left" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx index 9b10233c..f5957382 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -3,6 +3,11 @@ import { SettingsContext } from "utils/contexts/settings"; import Error from "./error"; +const ALIASED_WIDGETS = { + pialert: "netalertx", + hoarder: "karakeep", +}; + export default function Container({ error = false, children, service }) { const { settings } = useContext(SettingsContext); @@ -32,7 +37,17 @@ export default function Container({ error = false, children, service }) { if (!field.includes(".")) { fullField = `${type}.${field}`; } - return fullField === child?.props?.label; + let matches = fullField === child?.props?.label; + // check if the field is an 'alias' + if (matches) { + return true; + } else if (ALIASED_WIDGETS[type]) { + matches = fullField.replace(type, ALIASED_WIDGETS[type]) === child?.props?.label; + + return matches; + } + // no match + return false; }), ); } diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index d0dbc2d6..017d44c9 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -42,6 +42,7 @@ export default async function credentialedProxyHandler(req, res, map) { "ghostfolio", "headscale", "hoarder", + "karakeep", "linkwarden", "mealie", "netalertx", diff --git a/src/widgets/components.js b/src/widgets/components.js index 148a626b..880c8222 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -47,7 +47,8 @@ const components = { grafana: dynamic(() => import("./grafana/component")), hdhomerun: dynamic(() => import("./hdhomerun/component")), headscale: dynamic(() => import("./headscale/component")), - hoarder: dynamic(() => import("./hoarder/component")), + hoarder: dynamic(() => import("./karakeep/component")), + karakeep: dynamic(() => import("./karakeep/component")), peanut: dynamic(() => import("./peanut/component")), homeassistant: dynamic(() => import("./homeassistant/component")), homebox: dynamic(() => import("./homebox/component")), diff --git a/src/widgets/hoarder/component.jsx b/src/widgets/hoarder/component.jsx deleted file mode 100644 index 4be6fbab..00000000 --- a/src/widgets/hoarder/component.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; -import { useTranslation } from "next-i18next"; - -import useWidgetAPI from "utils/proxy/use-widget-api"; - -export const hoarderDefaultFields = ["bookmarks", "favorites", "archived", "highlights"]; -const MAX_ALLOWED_FIELDS = 4; - -export default function Component({ service }) { - const { t } = useTranslation(); - const { widget } = service; - - const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats"); - - if (statsError) { - return ; - } - - if (!widget.fields || widget.fields.length === 0) { - widget.fields = hoarderDefaultFields; - } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) { - widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); - } - - if (!statsData) { - return ( - - - - - - - - - ); - } - - return ( - - - - - - - - - ); -} diff --git a/src/widgets/karakeep/component.jsx b/src/widgets/karakeep/component.jsx new file mode 100644 index 00000000..8a74662d --- /dev/null +++ b/src/widgets/karakeep/component.jsx @@ -0,0 +1,49 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export const karakeepDefaultFields = ["bookmarks", "favorites", "archived", "highlights"]; +const MAX_ALLOWED_FIELDS = 4; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + + const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats"); + + if (statsError) { + return ; + } + + if (!widget.fields || widget.fields.length === 0) { + widget.fields = karakeepDefaultFields; + } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) { + widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); + } + + if (!statsData) { + return ( + + + + + + + + + ); + } + + return ( + + + + + + + + + ); +} diff --git a/src/widgets/hoarder/widget.js b/src/widgets/karakeep/widget.js similarity index 100% rename from src/widgets/hoarder/widget.js rename to src/widgets/karakeep/widget.js diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 992855d0..e183a9c6 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -42,7 +42,6 @@ import grafana from "./grafana/widget"; import hdhomerun from "./hdhomerun/widget"; import headscale from "./headscale/widget"; import healthchecks from "./healthchecks/widget"; -import hoarder from "./hoarder/widget"; import homeassistant from "./homeassistant/widget"; import homebox from "./homebox/widget"; import homebridge from "./homebridge/widget"; @@ -50,6 +49,7 @@ import immich from "./immich/widget"; import jackett from "./jackett/widget"; import jdownloader from "./jdownloader/widget"; import jellyseerr from "./jellyseerr/widget"; +import karakeep from "./karakeep/widget"; import kavita from "./kavita/widget"; import komga from "./komga/widget"; import kopia from "./kopia/widget"; @@ -178,7 +178,8 @@ const widgets = { grafana, hdhomerun, headscale, - hoarder, + hoarder: karakeep, + karakeep, homeassistant, homebox, homebridge,