import { useQuery } from '@tanstack/react-query';
import { getDomains, Domain } from '@/api/domain';
import { CalendarDays, DollarSign } from 'lucide-react';
import { cn } from '@/lib/utils';
import { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import RemainPercentBar from "./RemainPercentBar";
const DomainNoteTags = ({ notes }: { notes?: string }) => {
if (!notes) {
return null;
}
const colors = [
'bg-blue-500 text-white',
'bg-green-500 text-white',
'bg-purple-500 text-white',
'bg-red-500 text-white',
'bg-gray-600 text-white',
];
const tags = notes.split(';').map(tag => tag.trim()).filter(tag => tag);
return (
{tags.map((tag, index) => (
{tag}
))}
);
};
const DomainCardInline = ({ domain }: { domain: Domain }) => {
const { t } = useTranslation();
const expiresIn = domain.expires_in_days;
const billingData = domain.BillingData || {};
const customBackgroundImage = (window as any).CustomBackgroundImage !== "" ? (window as any).CustomBackgroundImage : undefined;
let statusColorClass = 'bg-green-500';
if (expiresIn !== undefined && expiresIn <= 10) statusColorClass = 'bg-red-500';
else if (expiresIn !== undefined && expiresIn <= 30) statusColorClass = 'bg-yellow-500';
return (
{billingData.registrar || 'N/A'}
{t('domain.expiryPrefix')}: {billingData.endDate ? new Date(billingData.endDate).toLocaleDateString() : 'N/A'}
{billingData.renewalPrice || 'N/A'}
{expiresIn !== undefined ? `${expiresIn} ${t('domain.days')}` : 'N/A'}
);
};
const DomainCard = ({ domain }: { domain: Domain }) => {
const { t } = useTranslation();
const expiresIn = domain.expires_in_days;
const billingData = domain.BillingData || {};
const customBackgroundImage = (window as any).CustomBackgroundImage !== "" ? (window as any).CustomBackgroundImage : undefined;
return (
{domain.Domain}
{billingData.registrar || t('domain.unknownRegistrar')}
{billingData.endDate ? new Date(billingData.endDate).toLocaleDateString() : 'N/A'}
{billingData.renewalPrice || 'N/A'}
{expiresIn !== undefined ? `${expiresIn}${t('domain.days')}` : 'N/A'}
);
};
export const DomainStatus = () => {
const { data: domains, isLoading, error } = useQuery({
queryKey: ['domains'],
queryFn: getDomains,
refetchInterval: 60 * 60 * 1000,
});
const [inline, setInline] = useState("0");
useEffect(() => {
const checkInlineSettings = () => {
const isMobile = window.innerWidth < 768;
if (!isMobile) {
const inlineState = localStorage.getItem("inline");
if ((window as any).ForceCardInline) setInline("1");
else if (inlineState !== null) setInline(inlineState);
}
};
checkInlineSettings();
const handleStorageChange = () => checkInlineSettings();
window.addEventListener('storage', handleStorageChange);
const handleViewChange = () => {
const inlineState = localStorage.getItem("inline");
setInline(inlineState ?? "0");
};
window.addEventListener('nezha-view-change', handleViewChange);
return () => {
window.removeEventListener('storage', handleStorageChange);
window.removeEventListener('nezha-view-change', handleViewChange);
};
}, []);
const filteredDomains = domains?.filter(d => d.Status === 'verified' || d.Status === 'expired');
if (error || isLoading || !filteredDomains || filteredDomains.length === 0) {
return null;
}
if (inline === '1') {
return (
{filteredDomains.map(domain => (
))}
);
}
return (
{filteredDomains.map(domain => (
))}
);
};