diff --git a/packages/widgets/src/downloads/component.tsx b/packages/widgets/src/downloads/component.tsx index 54a602507..e84544f92 100644 --- a/packages/widgets/src/downloads/component.tsx +++ b/packages/widgets/src/downloads/component.tsx @@ -101,7 +101,6 @@ export default function DownloadClientsWidget({ ); const utils = clientApi.useUtils(); - //Translations const t = useScopedI18n("widget.downloads"); const tCommon = useScopedI18n("common"); diff --git a/packages/widgets/src/downloads/index.ts b/packages/widgets/src/downloads/index.ts index c00044aa9..36979083b 100644 --- a/packages/widgets/src/downloads/index.ts +++ b/packages/widgets/src/downloads/index.ts @@ -28,7 +28,7 @@ const columnsList = [ ] as const satisfies (keyof ExtendedDownloadClientItem)[]; const sortingExclusion = ["actions", "id", "state"] as const satisfies readonly (typeof columnsList)[number][]; const columnsSort = columnsList.filter((column) => - sortingExclusion.some((exclusion) => exclusion !== column), + sortingExclusion.every((exclusion) => exclusion !== column), ) as Exclude; export const { definition, componentLoader } = createWidgetDefinition("downloads", { diff --git a/packages/widgets/src/downloads/prefetch.ts b/packages/widgets/src/downloads/prefetch.ts new file mode 100644 index 000000000..4eb073c43 --- /dev/null +++ b/packages/widgets/src/downloads/prefetch.ts @@ -0,0 +1,29 @@ +import { api, trpc } from "@homarr/api/server"; +import { createLogger } from "@homarr/core/infrastructure/logs"; + +import type { Prefetch } from "../definition"; + +const logger = createLogger({ module: "downloadsWidgetPrefetch" }); + +const prefetchAllAsync: Prefetch<"downloads"> = async (queryClient, items) => { + await Promise.all( + items.map(async (item) => { + if (item.integrationIds.length === 0) return; + + const input = { + integrationIds: item.integrationIds, + limitPerIntegration: Number(item.options.limitPerIntegration) || 50, + }; + + try { + const data = await api.widget.downloads.getJobsAndStatuses(input); + queryClient.setQueryData(trpc.widget.downloads.getJobsAndStatuses.queryKey(input), data); + logger.info("Prefetched downloads widget data", { integrations: item.integrationIds.length }); + } catch (error) { + logger.warn("Failed to prefetch downloads widget data", { error }); + } + }), + ); +}; + +export default prefetchAllAsync; diff --git a/packages/widgets/src/prefetch.ts b/packages/widgets/src/prefetch.ts index 590237cc9..c0e3d03c4 100644 --- a/packages/widgets/src/prefetch.ts +++ b/packages/widgets/src/prefetch.ts @@ -9,6 +9,7 @@ import { createSettings } from "@homarr/settings/creator"; import { reduceWidgetOptionsWithDefaultValues } from "."; import prefetchForApps from "./app/prefetch"; import prefetchForBookmarks from "./bookmarks/prefetch"; +import prefetchForDownloads from "./downloads/prefetch"; import type { Prefetch, WidgetOptionsRecordOf } from "./definition"; import type { inferOptionsFromCreator } from "./options"; @@ -19,6 +20,7 @@ const prefetchCallbacks: Partial<{ }> = { bookmarks: prefetchForBookmarks, app: prefetchForApps, + downloads: prefetchForDownloads, }; export const prefetchForKindAsync = async (