Feature: Hoarder service widget (#4913)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled

This commit is contained in:
Chris
2025-03-12 09:46:01 -04:00
committed by GitHub
parent bea02fc8c7
commit 544b9aef2f
9 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
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 <Container service={service} error={statsError} />;
}
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 (
<Container service={service}>
<Block label="hoarder.bookmarks" />
<Block label="hoarder.favorites" />
<Block label="hoarder.archived" />
<Block label="hoarder.highlights" />
<Block label="hoarder.lists" />
<Block label="hoarder.tags" />
</Container>
);
}
return (
<Container service={service}>
<Block label="hoarder.bookmarks" value={t("common.number", { value: statsData.numBookmarks })} />
<Block label="hoarder.favorites" value={t("common.number", { value: statsData.numFavorites })} />
<Block label="hoarder.archived" value={t("common.number", { value: statsData.numArchived })} />
<Block label="hoarder.highlights" value={t("common.number", { value: statsData.numHighlights })} />
<Block label="hoarder.lists" value={t("common.number", { value: statsData.numLists })} />
<Block label="hoarder.tags" value={t("common.number", { value: statsData.numTags })} />
</Container>
);
}

View File

@@ -0,0 +1,15 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
import { asJson } from "utils/proxy/api-helpers";
const widget = {
api: `{url}/api/v1/{endpoint}`,
proxyHandler: credentialedProxyHandler,
mappings: {
stats: {
endpoint: "users/me/stats",
},
},
};
export default widget;