import React, { useState } from "react"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from "@/components/ui/select"; import { Copy } from "lucide-react"; const dummyKommerse = [ { id: 1, title: "Upphandling av byggtjänster i Stockholm", link: "https://www.kommerse.se/upphandling/1", responseDeadline: "2025-05-10", responseText: "Anbud ska skickas via e-post till inkop@stockholm.se" }, { id: 2, title: "IT-konsulttjänster för kommuner", link: "https://www.kommerse.se/upphandling/2", responseDeadline: "2025-05-15", responseText: "Logga in på Kommerse.se och lämna anbud via portalen." } ]; const dummyAvrop = [ { id: 101, title: "Ramavtal för IT-supporttjänster", link: "https://www.avrop.se/upphandling/101", responseDeadline: "2025-05-05", responseText: "Anbud lämnas via Avrop.se:s upphandlingsverktyg." }, { id: 102, title: "Upphandling av städtjänster", link: "https://www.avrop.se/upphandling/102", responseDeadline: "2025-05-20", responseText: "Maila ditt anbud till upphandling@avrop.se före deadline." } ]; const dummyKommun = [ { id: 201, title: "Direktupphandling – lekplatsutrustning, Nacka kommun", link: "https://www.nacka.se/upphandling/201", responseDeadline: "2025-04-28", responseText: "Skicka offert till upphandling@nacka.se enligt instruktioner.", kommun: "Nacka" }, { id: 202, title: "Direktupphandling – kontorsmöbler, Uppsala kommun", link: "https://www.uppsala.se/upphandling/202", responseDeadline: "2025-05-03", responseText: "Offert lämnas via Uppsala kommuns e-portal.", kommun: "Uppsala" }, { id: 203, title: "Direktupphandling – transporttjänster, Malmö kommun", link: "https://www.malmo.se/upphandling/203", responseDeadline: "2025-05-08", responseText: "Svara via Malmö stads upphandlingssystem. Se länk.", kommun: "Malmö" }, { id: 204, title: "Direktupphandling – AV-utrustning, Göteborg kommun", link: "https://www.goteborg.se/upphandling/204", responseDeadline: "2025-05-12", responseText: "Anbud lämnas via TendSign. Följ instruktionerna i annonsen.", kommun: "Göteborg" } ]; const kommuner = ["Nacka", "Uppsala", "Malmö", "Göteborg"]; export default function UpphandlingSearch() { const [query, setQuery] = useState(""); const [source, setSource] = useState("kommerse"); const [kommunFilter, setKommunFilter] = useState(""); const [dateFrom, setDateFrom] = useState(""); const [dateTo, setDateTo] = useState(""); const [results, setResults] = useState([]); const handleSearch = () => { let data = []; if (source === "kommerse") data = dummyKommerse; else if (source === "avrop") data = dummyAvrop; else if (source === "kommun") data = dummyKommun; const filtered = data .filter(r => { const matchesQuery = r.title.toLowerCase().includes(query.toLowerCase()); const deadline = new Date(r.responseDeadline); const fromDateValid = dateFrom ? deadline >= new Date(dateFrom) : true; const toDateValid = dateTo ? deadline <= new Date(dateTo) : true; const matchesKommun = source !== "kommun" || kommunFilter === "" || r.kommun?.toLowerCase() === kommunFilter.toLowerCase(); return matchesQuery && fromDateValid && toDateValid && matchesKommun; }) .sort((a, b) => new Date(a.responseDeadline) - new Date(b.responseDeadline)); setResults(filtered); }; const getDeadlineClass = (date) => { const today = new Date(); const deadline = new Date(date); const diffDays = (deadline - today) / (1000 * 60 * 60 * 24); if (diffDays <= 3) return "text-red-600 font-semibold"; if (diffDays <= 7) return "text-yellow-600 font-medium"; return "text-gray-600"; }; const formatDeadlineText = (date) => { const today = new Date(); const deadline = new Date(date); const diffDays = Math.ceil((deadline - today) / (1000 * 60 * 60 * 24)); return `${date} (${diffDays} dagar kvar)`; }; const copyToClipboard = (text) => { navigator.clipboard.writeText(text); }; return (

Sök upphandlingar

setQuery(e.target.value)} /> {source === "kommun" && ( )}
setDateFrom(e.target.value)} className="w-1/2" placeholder="Från datum" /> setDateTo(e.target.value)} className="w-1/2" placeholder="Till datum" />
{results.length === 0 &&

Inga resultat än. Sök något!

} {results.map(result => ( {result.title}

Sista svarsdag: {formatDeadlineText(result.responseDeadline)}

Så här svarar du: {result.responseText}

))}
); }