homepage/src/widgets/immich/component.jsx

53 lines
1.8 KiB
React
Raw Normal View History

import { useTranslation } from "next-i18next";
2023-01-27 00:03:52 +01:00
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
2023-01-27 00:03:52 +01:00
const { widget } = service;
const { data: versionData, error: versionError } = useWidgetAPI(widget, "version");
// see https://github.com/gethomepage/homepage/issues/2282
2024-08-04 21:30:21 -07:00
const endpoint =
versionData?.major > 1 || (versionData?.major === 1 && versionData?.minor > 84) ? "statistics" : "stats";
const { data: immichData, error: immichError } = useWidgetAPI(widget, endpoint);
2023-01-27 00:03:52 +01:00
if (immichError || versionError || immichData?.statusCode === 401) {
return <Container service={service} error={immichData ?? immichError ?? versionError} />;
}
if (!immichData) {
return (
<Container service={service}>
<Block label="immich.users" />
<Block label="immich.photos" />
<Block label="immich.videos" />
<Block label="immich.storage" />
</Container>
);
2023-01-27 00:03:52 +01:00
}
return (
<Container service={service}>
2024-02-01 17:38:47 +00:00
<Block label="immich.users" value={t("common.number", { value: immichData.usageByUser.length })} />
<Block label="immich.photos" value={t("common.number", { value: immichData.photos })} />
<Block label="immich.videos" value={t("common.number", { value: immichData.videos })} />
<Block
label="immich.storage"
value={
// backwards-compatible e.g. '9 GiB'
immichData.usage.toString().toLowerCase().includes("b")
? immichData.usage
: t("common.bytes", {
value: immichData.usage,
maximumFractionDigits: 1,
binary: true, // match immich
})
}
/>
2023-01-27 00:03:52 +01:00
</Container>
);
}