"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { Label } from "@/components/ui/label"; import { Calendar } from "@/components/ui/calendar"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { CalendarIcon, Plus, Trash2 } from "lucide-react"; import { format } from "date-fns"; import { id } from "date-fns/locale"; import { Progress } from "../ui/progress"; import DialogMediaOnline from "../dialog/media-online"; import DialogMediaSosial from "../dialog/media-sosial"; import MapVideotron from "../global/maps"; import dynamic from "next/dynamic"; export default function FormCampaign() { const [startDate, setStartDate] = useState(undefined); const [endDate, setEndDate] = useState(undefined); const [goal, setGoal] = useState("Publikasi"); const [available, setAvailable] = useState("Yes"); const [isUploadOpen, setIsUploadOpen] = useState(false); const [media, setMedia] = useState("Media Online"); const [isDialogOpen, setIsDialogOpen] = useState(false); const MapVideotron = dynamic(() => import("../global/maps"), { ssr: false, }); // contoh data pilihan media online (bisa diganti sesuai kebutuhan) const mediaOnlineList = [ "Tribrata News Mabes", "Tribrata News Polda Aceh", "Tribrata News Polda Jawa Timur", "Tribrata News Polda Jawa Tengah", "Tribrata News Polda Jawa Barat", ]; const [selectedMediaOnline, setSelectedMediaOnline] = useState([]); const [contentType, setContentType] = useState("Meme"); const [talkshowType, setTalkshowType] = useState("Renjani Nyrah"); const [musicType, setMusicType] = useState("Sendrasena"); const [selectedItems, setSelectedItems] = useState([]); const [description, setDescription] = useState(""); const handleCheckboxChange = (index: number) => { setSelectedItems((prev) => prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index], ); }; const toggleMediaOnline = (item: string) => { setSelectedMediaOnline((prev) => prev.includes(item) ? prev.filter((m) => m !== item) : [...prev, item], ); }; const [files, setFiles] = useState< { file: File; progress: number; uploaded: boolean }[] >([]); const [url, setUrl] = useState(""); // ✅ Upload dari file input const handleFileUpload = (e: React.ChangeEvent) => { const selectedFiles = e.target.files; if (!selectedFiles) return; const newFiles = Array.from(selectedFiles).map((f) => ({ file: f, progress: 0, uploaded: false, })); setFiles((prev) => [...prev, ...newFiles]); simulateUpload(newFiles); }; // ✅ Simulasi upload progress const simulateUpload = ( fileList: { file: File; progress: number; uploaded: boolean }[], ) => { fileList.forEach((fileObj) => { let progress = 0; const interval = setInterval(() => { progress += 10; setFiles((prev) => prev.map((f) => f.file === fileObj.file ? { ...f, progress, uploaded: progress >= 100 } : f, ), ); if (progress >= 100) clearInterval(interval); }, 300); }); }; // ✅ Upload dari URL const handleUploadFromUrl = () => { if (!url.trim()) return; const fakeFile = { file: new File([], url.split("/").pop() || "file_from_url.jpg"), progress: 100, uploaded: true, }; setFiles((prev) => [...prev, fakeFile]); setUrl(""); }; // ✅ Hapus file const removeFile = (index: number) => { setFiles((prev) => prev.filter((_, i) => i !== index)); }; return (
{/* Langkah 1 */}

Langkah 1

Pilih Durasi

Langkah 2

Pilih Media

{[ "Media Online", "Media Sosial", "Videotron", "Radio Polri", "TV Polri", "Majalah Digital", ].map((m) => (
))}
{/* Tombol muncul sesuai media terpilih */} {media === "Media Online" && ( )} {media === "Media Sosial" && ( )} {media === "Videotron" && (
{/* Map tampil */}
)} {/* 🧩 Komponen DialogMediaOnline dipanggil di sini */} {media === "Media Online" && ( setIsDialogOpen(false)} /> )} {media === "Media Sosial" && ( setIsDialogOpen(false)} /> )} {media === "Videotron" && ( setIsDialogOpen(false)} /> )} {media === "Radio Polri" && (
{[ "Pagi pukul 06:00 – 07:00", "Siang pukul 12:00 – 13:00", "Sore pukul 16:00 – 17:00", "Malam pukul 20:00 – 21:00", ].map((time) => (
))}
)} {media === "TV Polri" && (
{[ "Pagi pukul 06:00 – 07:00", "Siang pukul 12:00 – 13:00", "Sore pukul 16:00 – 17:00", "Malam pukul 20:00 – 21:00", ].map((time) => (
))}
)}
{/* Langkah 3 */}

Langkah 3

Tujuan

{["Publikasi", "Sosialisasi"].map((g) => (
))}
{/* Langkah 4 */}

Langkah 4

Materi Promote Tersedia

{["Yes", "Tidak"].map((a) => (
))}
{available === "Yes" ? ( // ✅ Upload
) : ( // ❌ Tidak → tampil pilihan konten
{/* Pilih Jenis Konten */}

Pilih Jenis Konten

{["Meme", "AI Influencer", "Talkshow", "Musik"].map((item) => (
))}
{/* List Konten (Dummy) */} {/* List Konten */}

Pilih {contentType}

{/* 🔥 TAMPILAN KHUSUS MEME */} {contentType === "Meme" && (
{/* Search */}
🔍
{/* Grid Meme */}
{[ { img: "/meme1.png", title: "Respons Cepat Lakukan Sterilisasi Ancaman Bom di Depok", }, { img: "/meme2.png", title: "Upacara Penutupan Pendidikan Anggota Polri", }, { img: "/meme3.png", title: "Pantau Situasi Kamtibmas Malam Natal", }, { img: "/meme4.png", title: "Program SPPG Bersama Penerima Manfaat", }, ].map((item, i) => (
handleCheckboxChange(i)} className="absolute top-2 left-2 w-4 h-4" />
{item.title}
))}
{selectedItems.length > 0 && (