blob: f972ff5af6db13dde1d0dd9dc9017b45ad3ce624 [file]
import { useRef } from 'react';
import clsx from 'clsx';
import { Upload } from 'lucide-react';
import { useLang } from '@/app/context/LangContext';
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/app/components/ui/tooltip';
interface FileUploadButtonProps {
onFileContent: (content: string) => void;
accept?: string;
className?: string;
}
export const FileUploadButton: React.FC<FileUploadButtonProps> = ({ onFileContent, accept = '.txt,.conf,.csv', className }) => {
const fileInputRef = useRef<HTMLInputElement>(null);
const { t } = useLang();
const handleFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {
const file = event.target.files?.[0];
if (!file) return;
try {
const reader = new FileReader();
reader.onload = (e) => {
const content = e.target?.result as string;
onFileContent(content);
if (fileInputRef.current) {
fileInputRef.current.value = '';
}
};
reader.readAsText(file);
} catch (error) {
console.error('Error reading file:', error);
}
};
const handleClick = () => {
fileInputRef.current?.click();
};
return (
<div className={className}>
<input ref={fileInputRef} type="file" accept={accept} onChange={handleFileChange} className="hidden" />
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<button
onClick={handleClick}
className={clsx(
'flex items-center gap-1',
'rounded-lg',
'px-2',
'py-1',
'border border-primary',
'text-primary',
'bg-secondary',
'hover:bg-primary hover:text-primary-foreground',
'transition-all duration-200',
'shadow-sm hover:shadow-md',
)}
>
<Upload className="w-4 h-4" />
</button>
</TooltipTrigger>
<TooltipContent className="bg-white dark:bg-gray-800 text-primary border border-primary shadow-lg">
<p>{t('Upload File')}</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</div>
);
};