"use client"; import React from "react"; import { Group, Stack, Text } from "@mantine/core"; import { IconDatabase, IconPhoto, IconUsers, IconVideo } from "@tabler/icons-react"; import { clientApi } from "@homarr/api/client"; import { formatBytes } from "@homarr/common"; import { useI18n } from "@homarr/translation/client"; import { WidgetEmptyState } from "../../common/empty-state"; import type { WidgetComponentProps } from "../../definition"; import classes from "./component.module.css"; export default function ImmichServerStatsWidget({ integrationIds, options, }: WidgetComponentProps<"immich-serverStats">) { const t = useI18n(); const { data: stats } = clientApi.widget.immich.getServerStats.useQuery({ integrationId: integrationIds[0] ?? "", }); if (!stats) return ; return ( {options.showUsers && ( } label={t("widget.immich-serverStats.users")} value={stats.userCount} /> )} {options.showPhotos && ( } label={t("widget.immich-serverStats.photos")} value={stats.photoCount} /> )} {options.showVideos && ( } label={t("widget.immich-serverStats.videos")} value={stats.videoCount} /> )} {options.showStorage && ( } label={t("widget.immich-serverStats.storage")} value={formatBytes(stats.totalLibraryUsageInBytes)} /> )} ); } interface StatItemProps { icon: React.ReactNode; label: string; value: string | number; } function StatItem({ icon, label, value }: StatItemProps) { return ( {icon} {label} {value} ); }