fix: address widget review feedback

This commit is contained in:
Thomas Camlong authored and ajnart committed 2026-08-14 11:07:08 +02:00
1 parent b1b17ad69f
commit a38e731209
79 files changed
+2138 -244

No files matched your search

+45
View File
@@ -5,6 +5,7 @@ import { Stack, Text } from "@mantine/core";
import { useScopedI18n } from "@homarr/translation/client";
import type { WidgetComponentProps } from "../definition";
import { setWidgetRuntimeQueries } from "../definition";
import { UmamiContent } from "./umami-content";
export default function UmamiWidget({
@@ -12,11 +13,55 @@ export default function UmamiWidget({
integrationIds,
width,
displayMode = "compact",
widgetStateRef,
}: WidgetComponentProps<"umami">) {
if (!options.websiteId || options.websiteId.trim() === "") {
setWidgetRuntimeQueries(widgetStateRef, []);
return <NoWebsiteConfigured />;
}
const integrationId = integrationIds[0] ?? "";
const commonTopInput = {
integrationId,
websiteId: options.websiteId,
timeFrame: options.timeFrame,
limit: options.topCount,
};
setWidgetRuntimeQueries(widgetStateRef, [
{
path: ["widget", "umami", "getVisitorStats"],
input: {
integrationIds,
websiteId: options.websiteId,
timeFrame: options.timeFrame,
eventName: options.eventName || undefined,
},
},
{
path: ["widget", "umami", "getActiveVisitors"],
input: { integrationId, websiteId: options.websiteId },
},
...(options.viewMode === "events"
? [
{
path: ["widget", "umami", "getMultiEventTimeSeries"],
input: {
integrationId,
websiteId: options.websiteId,
timeFrame: options.timeFrame,
eventNames: [...options.eventNames].toSorted(),
},
},
]
: []),
...(displayMode === "advanced" || options.viewMode === "topPages"
? [{ path: ["widget", "umami", "getTopPages"], input: commonTopInput }]
: []),
...(displayMode === "advanced" || options.viewMode === "topReferrers"
? [{ path: ["widget", "umami", "getTopReferrers"], input: commonTopInput }]
: []),
]);
return (
<UmamiContent
integrationIds={integrationIds}
+9 -1
View File
@@ -1,13 +1,21 @@
import { IconChartBar, IconServerOff } from "@tabler/icons-react";
import { z } from "zod/v4";
import { createWidgetDefinition } from "../definition";
import { createWidgetDefinition, matchesWidgetRuntimeQuery } from "../definition";
import { optionsBuilder } from "../options";
export const timeFrameValues = ["today", "24h", "7d", "30d", "month", "lastMonth"] as const;
export const { definition, componentLoader } = createWidgetDefinition("umami", {
icon: IconChartBar,
queryKeys: [
[["widget", "umami", "getVisitorStats"]],
[["widget", "umami", "getActiveVisitors"]],
[["widget", "umami", "getMultiEventTimeSeries"]],
[["widget", "umami", "getTopPages"]],
[["widget", "umami", "getTopReferrers"]],
],
queryMatcher: matchesWidgetRuntimeQuery,
refetchInterval: null,
supportedIntegrations: ["umami"],
integrationsRequired: true,
+17 -13
View File
@@ -216,19 +216,23 @@ export function UmamiContent({
{displayMode === "advanced" ? (
<SimpleGrid cols={width >= 900 ? 2 : 1} spacing="md" h="100%">
<Box mih={260}>{selectedView}</Box>
<SimpleGrid cols={2} spacing="md" mih={260}>
<UmamiTopPagesContent
integrationIds={integrationIds}
websiteId={websiteId}
timeFrame={timeFrame}
limit={topCount}
/>
<UmamiTopReferrersContent
integrationIds={integrationIds}
websiteId={websiteId}
timeFrame={timeFrame}
limit={topCount}
/>
<SimpleGrid cols={viewMode === "topPages" || viewMode === "topReferrers" ? 1 : 2} spacing="md" mih={260}>
{viewMode !== "topPages" && (
<UmamiTopPagesContent
integrationIds={integrationIds}
websiteId={websiteId}
timeFrame={timeFrame}
limit={topCount}
/>
)}
{viewMode !== "topReferrers" && (
<UmamiTopReferrersContent
integrationIds={integrationIds}
websiteId={websiteId}
timeFrame={timeFrame}
limit={topCount}
/>
)}
</SimpleGrid>
</SimpleGrid>
) : (