"use client"; import React from "react"; import { ChevronDown, Search } from "lucide-react"; import { SEARCH_SCOPE, SEARCH_LIMITS, DEFAULT_SEARCH_LIMIT, } from "@/lib/frontend/search/urlState"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Skeleton } from "@/components/ui/skeleton"; import { DropdownMenu, DropdownMenuContent, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; const SCOPE_LABELS = Object.freeze({ [SEARCH_SCOPE.SINGLE]: "Diese Niederlassung", [SEARCH_SCOPE.MULTI]: "Mehrere Niederlassungen", [SEARCH_SCOPE.ALL]: "Alle Niederlassungen", }); export default function SearchForm({ branch, qDraft, onQDraftChange, onSubmit, currentQuery, isSubmitting, isAdminDev, scope, onScopeChange, availableBranches, branchesStatus, selectedBranches, onToggleBranch, limit, onLimitChange, }) { const canSearch = typeof qDraft === "string" && qDraft.trim().length > 0; const scopeLabel = SCOPE_LABELS[scope] || "Unbekannt"; const normalizedLimit = Number.isInteger(limit) && SEARCH_LIMITS.includes(limit) ? limit : DEFAULT_SEARCH_LIMIT; return (
{ e.preventDefault(); if (!canSearch) return; onSubmit(); }} className="space-y-3" >
onQDraftChange(e.target.value)} placeholder="z. B. Bridgestone, Rechnung, Kundennummer…" disabled={isSubmitting} />
{currentQuery ? (
Aktuelle Suche:{" "} {currentQuery}
) : (
Tipp: Die Suche ist URL-basiert und kann als Link geteilt werden.
)}
{isAdminDev ? (
Suchbereich onScopeChange(value)} > Diese Niederlassung ({branch}) Mehrere Niederlassungen Alle Niederlassungen
) : null}
Treffer pro Seite { const n = Number(value); if (!Number.isInteger(n)) return; onLimitChange(n); }} > {SEARCH_LIMITS.map((n) => ( {n} ))}
{isAdminDev && scope === SEARCH_SCOPE.SINGLE ? ( Aktiv: {branch} ) : null}
{isAdminDev && scope === SEARCH_SCOPE.MULTI ? (

Niederlassungen auswählen

Wählen Sie eine oder mehrere Niederlassungen. Die Suche wird nach jeder Änderung aktualisiert.

{branchesStatus === "loading" ? (
{Array.from({ length: 8 }).map((_, i) => (
))}
) : branchesStatus === "error" ? (

Niederlassungen konnten nicht geladen werden.

) : (
{(Array.isArray(availableBranches) ? availableBranches : [] ).map((b) => { const checked = Array.isArray(selectedBranches) ? selectedBranches.includes(b) : false; return ( ); })}
)}
) : null}
); }