Skip to content

Commit

Permalink
feat: Load data on integration selection
Browse files Browse the repository at this point in the history
  • Loading branch information
SeDemal committed Aug 1, 2024
1 parent 7ba186d commit 3db45e0
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 14 deletions.
6 changes: 3 additions & 3 deletions packages/widgets/src/media-requests/list/component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export default function MediaServerWidget({
},
{
initialData:
!serverData ? [] : serverData.initialData,
!serverData ? undefined : serverData.initialData,
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
Expand All @@ -57,7 +57,7 @@ export default function MediaServerWidget({
const sortedMediaRequests = useMemo(
() =>
mediaRequests
.filter((group) => group != null)
?.filter((group) => group != null)
.flatMap((group) => group.data)
.flatMap(({ medias, integration }) => medias.map((media) => ({ ...media, integrationId: integration.id })))
.sort(({ status: statusA }, { status: statusB }) => {
Expand All @@ -68,7 +68,7 @@ export default function MediaServerWidget({
return 1;
}
return 0;
}),
}) ?? [],
[mediaRequests, integrationIds],
);

Expand Down
2 changes: 1 addition & 1 deletion packages/widgets/src/media-requests/list/serverData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import type { WidgetProps } from "../../definition";
export default async function getServerDataAsync({ integrationIds, itemId }: WidgetProps<"mediaRequests-requestList">) {
if (integrationIds.length === 0 || !itemId) {
return {
initialData: [],
initialData: undefined,
};
}

Expand Down
37 changes: 29 additions & 8 deletions packages/widgets/src/media-requests/stats/component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
} from "@tabler/icons-react";
import combineClasses from "clsx";

import { clientApi } from "@homarr/api/client";
import { useScopedI18n } from "@homarr/translation/client";

import type { RequestStats } from "../../../../integrations/src/interfaces/media-requests/media-request";
Expand All @@ -25,27 +26,47 @@ export default function MediaServerWidget({
integrationIds,
isEditMode,
serverData,
itemId,
}: WidgetComponentProps<"mediaRequests-requestStats">) {
const t = useScopedI18n("widget.mediaRequests-requestStats");
const tCommon = useScopedI18n("common");
const isQueryEnabled = Boolean(itemId);
const { data: requestStats, isError: _isError } = clientApi.widget.mediaRequests.getStats.useQuery(
{
integrationIds,
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
itemId: itemId!,
},
{
initialData: !serverData ? undefined : serverData.initialData,
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
enabled: integrationIds.length > 0 && isQueryEnabled,
},
);

const { width, height, ref } = useElementSize();

const stats = useMemo(() => serverData?.initialData.flatMap(({ stats }) => stats), [serverData, integrationIds]);
const baseData = useMemo(
() => requestStats?.filter((group) => group != null).flatMap((group) => group.data) ?? [],
[requestStats],
);

const stats = useMemo(() => baseData.flatMap(({ stats }) => stats), [baseData]);
const users = useMemo(
() =>
serverData?.initialData
baseData
.flatMap(({ integration, users }) =>
users.flatMap((user) => ({ ...user, appKind: integration.kind, appName: integration.name })),
)
.sort(({ requestCount: countA }, { requestCount: countB }) => countB - countA)
.slice(0, Math.max(Math.trunc((height / width) * 5), 1)),
[serverData, integrationIds, width, height],
.sort(({ requestCount: countA }, { requestCount: countB }) => countB - countA),
[baseData],
);

if (integrationIds.length === 0) return <Center h="100%">{tCommon("errors.noIntegration")}</Center>;
if (integrationIds.length === 0) return <Center ref={ref} h="100%">{tCommon("errors.noIntegration")}</Center>;

if (!users || users.length === 0 || !stats || stats.length === 0) return <Center h="100%">{tCommon("errors.noData")}</Center>;
if (users.length === 0 || stats.length === 0) return <Center ref={ref} h="100%">{tCommon("errors.noData")}</Center>;

//Add processing and available
const data = [
Expand Down Expand Up @@ -138,7 +159,7 @@ export default function MediaServerWidget({
gap="2cqmin"
style={{ overflow: "hidden" }}
>
{users.map((user) => (
{users.slice(0, Math.max(Math.floor((height / width) * 5), 1)).map((user) => (
<Card
className={combineClasses(
"mediaRequests-stats-users-user-wrapper",
Expand Down
4 changes: 2 additions & 2 deletions packages/widgets/src/media-requests/stats/serverData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export default async function getServerDataAsync({
}: WidgetProps<"mediaRequests-requestStats">) {
if (integrationIds.length === 0 || !itemId) {
return {
initialData: [],
initialData: undefined,
};
}

Expand All @@ -20,6 +20,6 @@ export default async function getServerDataAsync({
});

return {
initialData: stats.filter((group) => group != null).flatMap((group) => group.data),
initialData: stats.filter((group) => group != null),
};
}

0 comments on commit 3db45e0

Please sign in to comment.