import { useState, useRef } from 'react'; import { Button } from '@/components/ui/button'; import { User, X, Loader2, Video } from 'lucide-react'; import axios from 'axios'; interface BytescaleUploaderProps { value: string; onChange: (url: string) => void; folderPath: | '/health-packages' | '/seo' | '/doctors' | '/departments' | '/news' | '/blog' | '/doctor-og' | '/homepage-banners' | '/insurance-partners' | '/accreditations'; } export function BytescaleUploader({ value, onChange, folderPath }: BytescaleUploaderProps) { const baseURL = import.meta.env.VITE_API_URL; const [isUploading, setIsUploading] = useState(false); const fileInputRef = useRef(null); const isVideo = (url: string) => { return /\.(mp4|webm|ogg)$/i.test(url); }; const onFileSelected = async (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (!file) return; const maxSize = file.type.startsWith('video/') ? 10 * 1024 * 1024 : 5 * 1024 * 1024; if (file.size > maxSize) { alert(file.type.startsWith('video/') ? 'Video is too large (Max 10MB)' : 'Image is too large (Max 5MB)'); return; } setIsUploading(true); const formData = new FormData(); formData.append('file', file); formData.append('folderPath', folderPath); try { const response = await axios.post(`${baseURL}/upload`, formData, { headers: { 'Content-Type': 'multipart/form-data', }, }); const { fileUrl } = response.data; onChange(fileUrl); } catch (e: any) { console.error('Upload Error:', e); const errorMessage = e.response?.data?.error || e.message || 'Upload failed'; alert(`Upload Error: ${errorMessage}`); } finally { setIsUploading(false); if (fileInputRef.current) { fileInputRef.current.value = ''; } } }; return (
{value ? ( <> {isVideo(value) ? (
{value && (

⚠️ Make sure to save the changes by clicking the "Save Changes" button.

)}
); }