diff --git a/frontend/src/components/calendar/EventDialog.tsx b/frontend/src/components/calendar/EventDialog.tsx index 2d190ac..7f10c0a 100644 --- a/frontend/src/components/calendar/EventDialog.tsx +++ b/frontend/src/components/calendar/EventDialog.tsx @@ -5,7 +5,7 @@ import { addDays, allDayISO, dateFromInput, eventDay, nthOfMonth, timedISO, toDateInput, toTimeInput, weekdayCodeOf, weekdayCodes, } from './dates' -import { ColorSwatches, Toggle } from './controls' +import { CalendarPicker, ColorSwatches, Toggle } from './controls' interface Props { /** Fehlt er, entsteht ein neuer Termin. */ @@ -215,9 +215,7 @@ export default function EventDialog({ event, defaultStart, calendars, calendarId Speichern die Sammlung, behält aber seine Kennung – für CalDAV-Clients derselbe Termin an neuer Adresse, nicht ein neuer. */} - + {!!event && calId !== calendarId && (

Wird beim Speichern nach „{calendars.find(c => c.id === calId)?.name}" verschoben diff --git a/frontend/src/components/calendar/controls.tsx b/frontend/src/components/calendar/controls.tsx index 8a3bbe0..a254190 100644 --- a/frontend/src/components/calendar/controls.tsx +++ b/frontend/src/components/calendar/controls.tsx @@ -93,3 +93,57 @@ export function ColorSwatches({ value, onChange, inherit, disabled }: { ) } + +/** + * Kalenderwahl als farbige Plaketten statt als Auswahlfeld. + * + * Ein Auswahlfeld zeigt nur den Namen – die Farbe aber ist das, woran man + * einen Kalender im Raster wiedererkennt. Wer „Arbeit" wählt, soll dabei + * schon das Blau sehen, in dem der Termin gleich erscheint. + * + * Der Punkt spricht dieselbe Sprache wie überall sonst im Kalender: gefüllt + * heißt gewählt, ein leerer Ring heißt nicht gewählt. + */ +export function CalendarPicker({ calendars, value, onChange, disabled }: { + calendars: { id: string; name: string; color: string }[] + value: string + onChange: (id: string) => void + disabled?: boolean +}) { + return ( +

+ {calendars.map(cal => { + const on = cal.id === value + return ( + + ) + })} +
+ ) +}