import type { Metadata } from 'next' import { CalendarDays, Plus } from 'lucide-react' import { KontoKarte } from '@/app/(app)/kalenderkonten/konto-karte' import { Meldung } from '@/app/(app)/kalenderkonten/meldung' import { Button } from '@/components/ui/button' import { Card, CardBeschreibung, CardInhalt, CardKopf, CardTitel, } from '@/components/ui/card' import type { KalenderAnbieter } from '@/generated/prisma/enums' import { alsDatumUhrzeit } from '@/lib/zeit' import { verlangeAnmeldung } from '@/server/berechtigung' import { db } from '@/server/db' import { erlaubteKalenderAnbieter } from '@/server/instanz' import { umgebung } from '@/server/umgebung' export const metadata: Metadata = { title: 'Kalenderkonten' } const ANBIETER_NAME: Record = { GRAPH: 'Microsoft 365', GOOGLE: 'Google', } export default async function KalenderkontenSeite({ searchParams, }: { searchParams: Promise<{ ok?: string; fehler?: string }> }) { const benutzer = await verlangeAnmeldung('/kalenderkonten') const parameter = await searchParams const einst = umgebung() // Welche Anbieter es hier überhaupt gibt, entscheidet die Instanz; ob sie // benutzbar sind, hängt zusätzlich an der Konfiguration. const erlaubt = erlaubteKalenderAnbieter() const verfuegbar = erlaubt.filter((anbieter) => anbieter === 'GRAPH' ? einst.graphAktiv : einst.googleAktiv, ) const fehlendKonfiguriert = erlaubt.filter((a) => !verfuegbar.includes(a)) const konten = await db.kalenderkonto.findMany({ where: { benutzerId: benutzer.id }, orderBy: [{ anbieter: 'asc' }, { anzeigename: 'asc' }], select: { id: true, anbieter: true, anzeigename: true, extKontoId: true, letzterAbgleich: true, letzterFehler: true, _count: { select: { termine: true } }, }, }) return (

Kalenderkonten

Der Planer liest die Termine, um zu wissen, wann überhaupt Platz ist. Ab M4 schreibt er Zeitblöcke in denselben Kalender zurück.

Kalender verbinden Du wirst zum Anbieter geschickt und kommst nach der Zustimmung hierher zurück. Der Planer speichert keine Zugangsdaten im Klartext. {verfuegbar.length === 0 ? (

In dieser Instanz ist kein Kalenderanbieter eingerichtet.

) : (
{verfuegbar.map((anbieter) => ( ))}
)} {fehlendKonfiguriert.length > 0 && (

{fehlendKonfiguriert.map((a) => ANBIETER_NAME[a]).join(' und ')} wäre hier erlaubt, ist aber noch nicht konfiguriert. Siehe README, Abschnitt Umgebungsvariablen.

)}

Verbundene Konten

{konten.length === 0 ? ( Noch kein Kalender verbunden. ) : ( konten.map((konto) => ( )) )}
) }