import { Fragment } from "react"; import type { PropsWithChildren } from "react"; import Link from "next/link"; import { AccordionControl, AccordionItem, AccordionPanel, ActionIcon, ActionIconGroup, Affix, Anchor, Box, Button, Divider, Group, Menu, MenuDropdown, MenuTarget, Stack, Table, TableTbody, TableTd, TableTh, TableThead, TableTr, Text, Title, } from "@mantine/core"; import { IconChevronDown, IconChevronUp, IconPencil } from "@tabler/icons-react"; import type { RouterOutputs } from "@homarr/api"; import { api } from "@homarr/api/server"; import { objectEntries } from "@homarr/common"; import type { IntegrationKind } from "@homarr/definitions"; import { getIntegrationName } from "@homarr/definitions"; import { getScopedI18n } from "@homarr/translation/server"; import { CountBadge } from "@homarr/ui"; import { ManageContainer } from "~/components/manage/manage-container"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { ActiveTabAccordion } from "../../../../components/active-tab-accordion"; import { IntegrationAvatar } from "./_integration-avatar"; import { DeleteIntegrationActionButton } from "./_integration-buttons"; import { IntegrationCreateDropdownContent } from "./new/_integration-new-dropdown"; interface IntegrationsPageProps { searchParams: { tab?: IntegrationKind; }; } export default async function IntegrationsPage({ searchParams }: IntegrationsPageProps) { const integrations = await api.integration.all(); const t = await getScopedI18n("integration"); return ( {t("page.list.title")} ); } const IntegrationSelectMenu = ({ children }: PropsWithChildren) => { return ( {children} ); }; interface IntegrationListProps { integrations: RouterOutputs["integration"]["all"]; activeTab?: IntegrationKind; } const IntegrationList = async ({ integrations, activeTab }: IntegrationListProps) => { const t = await getScopedI18n("integration"); if (integrations.length === 0) { return
{t("page.list.empty")}
; } const grouppedIntegrations = integrations.reduce( (acc, integration) => { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!acc[integration.kind]) { acc[integration.kind] = []; } acc[integration.kind].push(integration); return acc; }, {} as Record, ); return ( {objectEntries(grouppedIntegrations).map(([kind, integrations]) => ( }> {getIntegrationName(kind)} {t("field.name.label")} {t("field.url.label")} {integrations.map((integration) => ( {integration.name} {integration.url} ))}
{integrations.map((integration, index) => ( {index !== 0 && } {integration.name} {integration.url} ))}
))}
); };