Lokale Kampagnenverwaltung
+{formError}
: null} + {rowError ?{rowError}
: null} + {actionLabel ?{actionLabel}
: null} + + {campaignsSorted.length === 0 ? ( +| Kampagne | +PLZ / Radius | +Cadence | +Limits | +Status | +Lauf | +Aktionen | +
|---|---|---|---|---|---|---|
|
+
+
+ {campaign.name} ++ {formatNiche(campaign)} + + |
+
+
+
+
+
+ {campaign.radiusKm} km Umkreis + |
+
+ + + {recurrenceLabel[campaign.recurrence]} + + | + +
+ + Leads: {campaign.maxNewLeadsPerRun} · Audits:{" "} + {campaign.maxAuditsPerRun} + + |
+
+
+ |
+
+
+
+
+ Letzter Lauf: {formatDateTime(campaign.lastRunAt)} +Nächster Lauf: {formatDateTime(campaign.nextRunAt)} +Run-Status: {statusLabel[campaign.currentRunStatus] ?? campaign.currentRunStatus} + |
+
+
+
+
+
+
+
+ |
+
Cadence: {recurrenceLabel[campaign.recurrence]}
++ Limits: L {campaign.maxNewLeadsPerRun}, A{" "} + {campaign.maxAuditsPerRun} +
+Letzter Lauf: {formatDateTime(campaign.lastRunAt)}
+Nächster Lauf: {formatDateTime(campaign.nextRunAt)}
++ Run-Status: {statusLabel[campaign.currentRunStatus] ?? campaign.currentRunStatus} +
++ {typeof error.message === "string" ? error.message : String(error.message)} +
+ ); +}); +FormMessage.displayName = "FormMessage"; + +export { + Form, + useFormField, + FormField, + FormItem, + FormLabel, + FormControl, + FormDescription, + FormMessage, +}; diff --git a/components/ui/input.tsx b/components/ui/input.tsx new file mode 100644 index 0000000..686de3e --- /dev/null +++ b/components/ui/input.tsx @@ -0,0 +1,22 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const Input = React.forwardRef