"use client"; import { useState } from "react"; import { GERMAN_FEDERAL_STATES } from "@planarchy/shared"; import { trpc } from "~/lib/trpc/client.js"; export function PublicHolidayBatch() { const [year, setYear] = useState(new Date().getFullYear()); const [federalState, setFederalState] = useState("BY"); const [chapter, setChapter] = useState(""); const [replaceExisting, setReplaceExisting] = useState(false); const [result, setResult] = useState<{ created: number; holidays?: number; resources?: number } | null>(null); const { data: resources } = trpc.resource.list.useQuery( { isActive: true, limit: 500 }, { staleTime: 60_000 }, ); const resourceList = (resources?.resources ?? []) as Array<{ id: string; chapter?: string | null }>; const chapters = Array.from( new Set(resourceList.map((r) => r.chapter).filter(Boolean) as string[]) ).sort(); const mutation = trpc.vacation.batchCreatePublicHolidays.useMutation({ onSuccess: (data) => setResult(data), }); function handleSubmit(e: React.FormEvent) { e.preventDefault(); setResult(null); mutation.mutate({ year, federalState: federalState || undefined, chapter: chapter || undefined, replaceExisting, }); } return (

Batch Create Public Holidays

Creates public holidays as APPROVED vacation entries for all resources (or a chapter).

setYear(parseInt(e.target.value, 10))} min={2020} max={2030} className="w-full px-3 py-2 border border-gray-200 dark:border-gray-600 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-brand-500 dark:bg-gray-900 dark:text-gray-100" />
{result && ( Created {result.created} entries{result.holidays ? ` (${result.holidays} holidays Ă— ${result.resources ?? 0} resources)` : ""} )} {mutation.error && ( {mutation.error.message} )}
); }