diff --git a/app/maps/page.tsx b/app/maps/page.tsx index d688378..7199742 100644 --- a/app/maps/page.tsx +++ b/app/maps/page.tsx @@ -32,12 +32,10 @@ const RESULTS_OPTIONS = [ { value: "60", label: "60 per query (max)" }, ]; -// Preset queries for common German solar use cases -const PRESET_QUERIES = [ - "Solaranlage Installateur Deutschland", - "Photovoltaik Montage", - "Solar Handwerker", - "Solarstrom Installation", +const KEYWORD_PRESETS = [ + "Solaranlage Installateur", "Dachdecker", "Elektriker", + "Heizungsbauer", "Sanitär", "Steuerberater", "Rechtsanwalt", + "Zahnarzt", "Physiotherapeut", "Immobilienmakler", ]; const GERMAN_REGIONS = [ @@ -50,7 +48,8 @@ const GERMAN_REGIONS = [ type Stage = "idle" | "running" | "done" | "failed"; export default function MapsPage() { - const [keyword, setKeyword] = useState("Solaranlage Installateur"); + const [keywords, setKeywords] = useState(["Solaranlage Installateur"]); + const [keywordInput, setKeywordInput] = useState(""); const [regions, setRegions] = useState(["Bayern", "Baden-Württemberg"]); const [regionInput, setRegionInput] = useState(""); const [maxResults, setMaxResults] = useState("60"); @@ -62,10 +61,18 @@ export default function MapsPage() { const [results, setResults] = useState([]); const { addJob, updateJob, removeJob } = useAppStore(); - // Build the final queries array: one per region - const queries = regions.length > 0 - ? regions.map(r => `${keyword} ${r}`) - : [keyword]; + // Build queries: every keyword × every region + const queries = keywords.length === 0 ? [] : + regions.length > 0 + ? keywords.flatMap(k => regions.map(r => `${k} ${r}`)) + : keywords; + + const addKeyword = (k: string) => { + const trimmed = k.trim(); + if (trimmed && !keywords.includes(trimmed)) setKeywords(prev => [...prev, trimmed]); + setKeywordInput(""); + }; + const removeKeyword = (k: string) => setKeywords(prev => prev.filter(x => x !== k)); const addRegion = (r: string) => { const trimmed = r.trim(); @@ -78,7 +85,7 @@ export default function MapsPage() { const removeRegion = (r: string) => setRegions(prev => prev.filter(x => x !== r)); const startJob = async () => { - if (!keyword.trim()) return toast.error("Suchbegriff eingeben"); + if (!keywords.length) return toast.error("Mindestens einen Suchbegriff eingeben"); setStage("running"); setResults([]); @@ -208,28 +215,41 @@ export default function MapsPage() { Suchanfrage konfigurieren - {/* Keyword */} + {/* Keywords */}
- - setKeyword(e.target.value)} - className="bg-[#0d0d18] border-[#2e2e3e] text-white placeholder:text-gray-600 focus:border-green-500" - /> - {/* Presets */} -
- {PRESET_QUERIES.map(q => ( + +
+ {keywords.map(k => ( + + {k} + + + ))} + setKeywordInput(e.target.value)} + onKeyDown={e => { + if (e.key === "Enter" || e.key === ",") { e.preventDefault(); addKeyword(keywordInput); } + }} + onBlur={() => keywordInput && addKeyword(keywordInput)} + /> +
+ {/* Keyword presets */} +
+ {KEYWORD_PRESETS.filter(k => !keywords.includes(k)).map(k => ( ))}
@@ -380,7 +400,7 @@ export default function MapsPage() { {stage === "idle" || stage === "failed" ? (