import React, { useState, useEffect, useCallback } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { X, Bell } from 'lucide-react'; const SmartPopup = () => { const [isOpen, setIsOpen] = useState(false); // Konfigurasi (dalam milidetik) const IDLE_THRESHOLD = 30 * 60 * 1000; // 30 Menit tidak aktif const POPUP_DELAY = 10 * 1000; // Muncul setelah 10 detik aktif const showPopup = useCallback(() => { setIsOpen(true); // Simpan timestamp kapan terakhir popup muncul localStorage.setItem('last_popup_time', Date.now().toString()); }, []); useEffect(() => { const handleActivity = () => { const now = Date.now(); const lastPopup = parseInt(localStorage.getItem('last_popup_time') || '0'); const lastActivity = parseInt(localStorage.getItem('last_activity_time') || '0'); // Update waktu aktivitas terakhir di storage localStorage.setItem('last_activity_time', now.toString()); // LOGIKA: Munculkan popup jika: // 1. Belum pernah muncul (lastPopup === 0) // 2. ATAU User sudah tidak aktif melebihi threshold (Idle) if (lastPopup === 0 || (now - lastActivity > IDLE_THRESHOLD)) { // Beri jeda 10 detik sebelum muncul sesuai request awal const timer = setTimeout(() => { showPopup(); }, POPUP_DELAY); return () => clearTimeout(timer); } }; // Deteksi aktivitas user (mouse, ketik, scroll, sentuh) const activityEvents = ['mousedown', 'mousemove', 'keydown', 'scroll', 'touchstart']; // Jalankan pengecekan saat pertama kali load handleActivity(); activityEvents.forEach(event => window.addEventListener(event, handleActivity, { passive: true }) ); return () => { activityEvents.forEach(event => window.removeEventListener(event, handleActivity) ); }; }, [showPopup, IDLE_THRESHOLD, POPUP_DELAY]); return ( {isOpen && (

Selamat Datang Kembali!

Kami mendeteksi aktivitas baru. Jangan lupa untuk memeriksa pembaruan data pertanian Anda hari ini.

)}
); }; export default SmartPopup;