# Conflicts: # apps/nextjs/src/app/[locale]/layout.tsx # packages/api/src/router/widgets/anchor-notes.ts # packages/api/src/router/widgets/archive-team-warrior.ts # packages/api/src/router/widgets/audio-stats.ts # packages/api/src/router/widgets/bazarr.ts # packages/api/src/router/widgets/coolify.ts # packages/api/src/router/widgets/firewall.ts # packages/api/src/router/widgets/immich.ts # packages/api/src/router/widgets/paperless-ngx.ts # packages/api/src/router/widgets/patchmon.ts # packages/api/src/router/widgets/speedtest-tracker.ts # packages/api/src/router/widgets/tracearr.ts # packages/api/src/router/widgets/traefik.ts # packages/api/src/router/widgets/umami.ts # packages/api/src/router/widgets/uptime-kuma.ts # packages/api/src/router/widgets/vpn.ts # packages/api/src/router/widgets/wud.ts # packages/definitions/src/widget-integration-map.ts # packages/widgets/src/anchor-note/index.ts # packages/widgets/src/archive-team-warrior/index.ts # packages/widgets/src/audio-stats/index.ts # packages/widgets/src/bazarr/index.ts # packages/widgets/src/coolify/index.ts # packages/widgets/src/firewall/index.ts # packages/widgets/src/immich/album-carousel/index.ts # packages/widgets/src/immich/server-stats/index.ts # packages/widgets/src/paperless-ngx/index.ts # packages/widgets/src/patchmon/index.ts # packages/widgets/src/speedtest-tracker/index.ts # packages/widgets/src/system-disks/index.ts # packages/widgets/src/system-resources/index.ts # packages/widgets/src/tracearr/index.ts # packages/widgets/src/traefik/index.ts # packages/widgets/src/umami/index.ts # packages/widgets/src/uptime-kuma/index.ts # packages/widgets/src/vpn/index.ts # packages/widgets/src/wud/index.ts
55 lines
2.3 KiB
TypeScript
55 lines
2.3 KiB
TypeScript
import { IconHeadphones, IconServerOff } from "@tabler/icons-react";
|
|
|
|
import { getWidgetIntegrationConfig } from "@homarr/definitions";
|
|
|
|
import { createWidgetDefinition, matchesWidgetRuntimeQuery } from "../definition";
|
|
import { optionsBuilder } from "../options";
|
|
|
|
const hideUnlessNavidrome = {
|
|
shouldHide: (_: unknown, integrationKinds: string[]) =>
|
|
!integrationKinds.includes("navidrome") && !integrationKinds.includes("mock"),
|
|
};
|
|
|
|
const hideUnlessAudiobookshelf = {
|
|
shouldHide: (_: unknown, integrationKinds: string[]) => !integrationKinds.includes("audiobookshelf"),
|
|
};
|
|
|
|
export const { definition, componentLoader } = createWidgetDefinition("audioStats", {
|
|
icon: IconHeadphones,
|
|
supportsAdvancedFocus: true,
|
|
queryKeys: [[["widget", "audioStats", "getStats"]], [["widget", "mediaServer", "getCurrentStreams"]]],
|
|
queryMatcher: matchesWidgetRuntimeQuery,
|
|
...getWidgetIntegrationConfig("audioStats"),
|
|
createOptions() {
|
|
return optionsBuilder.from(
|
|
(factory) => ({
|
|
showArtists: factory.switch({ defaultValue: true, withDescription: true }),
|
|
showAlbums: factory.switch({ defaultValue: true, withDescription: true }),
|
|
showSongs: factory.switch({ defaultValue: true, withDescription: true }),
|
|
showLibraryCount: factory.switch({ defaultValue: true, withDescription: true }),
|
|
showAudiobooks: factory.switch({ defaultValue: true, withDescription: true }),
|
|
showPodcasts: factory.switch({ defaultValue: true, withDescription: true }),
|
|
showListeningTime: factory.switch({ defaultValue: true, withDescription: true }),
|
|
showActiveSessions: factory.switch({ defaultValue: true, withDescription: true }),
|
|
compactMode: factory.switch({ defaultValue: false, withDescription: true }),
|
|
}),
|
|
{
|
|
showArtists: hideUnlessNavidrome,
|
|
showAlbums: hideUnlessNavidrome,
|
|
showSongs: hideUnlessNavidrome,
|
|
showLibraryCount: hideUnlessAudiobookshelf,
|
|
showAudiobooks: hideUnlessAudiobookshelf,
|
|
showPodcasts: hideUnlessAudiobookshelf,
|
|
showListeningTime: hideUnlessAudiobookshelf,
|
|
showActiveSessions: hideUnlessAudiobookshelf,
|
|
},
|
|
);
|
|
},
|
|
errors: {
|
|
INTERNAL_SERVER_ERROR: {
|
|
icon: IconServerOff,
|
|
message: (t) => t("widget.audioStats.error.internalServerError"),
|
|
},
|
|
},
|
|
}).withDynamicImport(() => import("./component"));
|