'use client'; import { useState, useEffect, useRef } from 'react'; import { X } from 'lucide-react'; interface AurFloatingCardProps { show: boolean; aurAppNames: string[]; hasYayInstalled: boolean; setHasYayInstalled: (value: boolean) => void; selectedHelper: 'yay' | 'paru'; setSelectedHelper: (helper: 'yay' | 'paru') => void; } // AUR setup prompt. export function AurFloatingCard({ show, aurAppNames, setHasYayInstalled, selectedHelper, setSelectedHelper, }: AurFloatingCardProps) { const [dismissed, setDismissed] = useState(false); const [isExiting, setIsExiting] = useState(false); const [showConfirmation, setShowConfirmation] = useState(false); const [hasAnswered, setHasAnswered] = useState(null); const [helperChosen, setHelperChosen] = useState(false); const userInteractedRef = useRef(false); // Reset on new AUR packages if no interaction useEffect(() => { if (show && aurAppNames.length > 0 && !userInteractedRef.current) { // eslint-disable-next-line react-hooks/set-state-in-effect setDismissed(false); setIsExiting(false); setShowConfirmation(false); setHelperChosen(false); setHasAnswered(null); } }, [aurAppNames.length, show]); if (!show || dismissed) return null; const handleFirstAnswer = (hasHelper: boolean) => { setHasYayInstalled(hasHelper); setHasAnswered(hasHelper); }; const handleHelperSelect = (helper: 'yay' | 'paru') => { setSelectedHelper(helper); setHelperChosen(true); userInteractedRef.current = true; setTimeout(() => { setIsExiting(true); setTimeout(() => { setShowConfirmation(true); }, 250); }, 400); }; const handleDismiss = () => { userInteractedRef.current = true; setIsExiting(true); setTimeout(() => { setDismissed(true); setIsExiting(false); }, 200); }; if (showConfirmation) { setTimeout(() => { setDismissed(true); }, 3000); return (

You can change this later in preview tab

); } if (isExiting && helperChosen) { return (
{hasAnswered !== null && (
)}
); } return (

{aurAppNames.length} AUR package{aurAppNames.length !== 1 ? 's' : ''}

Do you have an AUR helper?

Change anytime in preview window

{hasAnswered !== null && (

{hasAnswered ? 'Which one do you have?' : 'Which one to install?' }

)}
); }