Prepare Kalendartool for MPM and disable invites

This commit is contained in:
Kühn
2026-10-08 15:06:22 +02:00
parent bc49c3074e
commit 556202575e
50 changed files with 905 additions and 836 deletions

View File

@@ -1,16 +1,17 @@
'use client';
/**
* Mitgliederverwaltung fuer Modals (DB-basiertes Einladungssystem).
* Mitgliederverwaltung fuer Kalender.
*
* Statt Invite-Links werden bestehende Benutzer direkt per E-Mail
* ueber die Datenbank gesucht und dem Kalender zugeordnet:
* Vorhandene Benutzer werden direkt per E-Mail ueber die Datenbank
* gesucht und dem Kalender zugeordnet:
* - Suchfeld mit Live-Vorschlaegen (GET /api/users/search?q=...)
* - Hinzufuegen per Klick (POST /api/calendars/[id]/members)
* - Mitgliederliste mit Entfernen-Button (DELETE ...?memberId=...)
*
* Nur fuer Admins gerendert; der Server prueft die Berechtigung final.
*/
import { appFetch } from '@/lib/client-fetch';
import { useCallback, useEffect, useRef, useState } from 'react';
import { ErrorMessage } from '@/components/ui/ui';
@@ -44,7 +45,7 @@ export function MemberSection({ calendarId }: { calendarId: string }) {
setIsLoading(true);
setError(null);
try {
const response = await fetch(`/api/calendars/${calendarId}/members`);
const response = await appFetch(`/api/calendars/${calendarId}/members`);
if (!response.ok) {
const data = (await response.json().catch(() => ({}))) as { error?: string };
setError(data.error ?? 'Mitglieder konnten nicht geladen werden.');
@@ -75,7 +76,7 @@ export function MemberSection({ calendarId }: { calendarId: string }) {
setAddingEmail(email);
setError(null);
try {
const response = await fetch(`/api/calendars/${calendarId}/members`, {
const response = await appFetch(`/api/calendars/${calendarId}/members`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email }),
@@ -100,7 +101,7 @@ export function MemberSection({ calendarId }: { calendarId: string }) {
setRemovingId(memberId);
setError(null);
try {
const response = await fetch(
const response = await appFetch(
`/api/calendars/${calendarId}/members?memberId=${encodeURIComponent(memberId)}`,
{ method: 'DELETE' },
);
@@ -130,7 +131,7 @@ export function MemberSection({ calendarId }: { calendarId: string }) {
searchTimer.current = setTimeout(async () => {
setIsSearching(true);
try {
const response = await fetch(
const response = await appFetch(
`/api/users/search?q=${encodeURIComponent(nextQuery.trim())}`,
);
if (response.ok) {
@@ -237,4 +238,4 @@ export function MemberSection({ calendarId }: { calendarId: string }) {
)}
</section>
);
}
}