import React, { ReactNode, useState } from 'react'; import ImageUpload from '../ui/ImageUpload'; import { StoredImage, uploadCompanyLogo } from '../../services/imageStorageService'; interface FigmaQuestionProps { question: string; description?: string; children: ReactNode; onBack?: () => void; onNext?: () => void; nextDisabled?: boolean; backDisabled?: boolean; nextText?: string; backText?: string; showBackButton?: boolean; currentStep?: number; totalSteps?: number; stepTitle?: string; className?: string; // Image upload props orgId?: string; onImageUploaded?: (image: StoredImage) => void; currentImage?: StoredImage | null; } export const EnhancedFigmaQuestion: React.FC = ({ question, description, children, onBack, onNext, nextDisabled = false, backDisabled = false, nextText = "Next", backText = "Back", showBackButton = true, currentStep = 1, totalSteps = 8, stepTitle = "Company Overview & Mission.", className = "", // Image upload props orgId, onImageUploaded, currentImage }) => { const [uploadingImage, setUploadingImage] = useState(false); const [uploadError, setUploadError] = useState(''); const handleImageSelected = async (file: File) => { if (!orgId) { setUploadError('Organization ID is required'); return; } setUploadingImage(true); setUploadError(''); try { const uploadedImage = await uploadCompanyLogo(file, orgId); if (onImageUploaded) { onImageUploaded(uploadedImage); } } catch (error) { console.error('Failed to upload image:', error); setUploadError(error instanceof Error ? error.message : 'Failed to upload image'); } finally { setUploadingImage(false); } }; const handleImageRemove = () => { // For now, just call the callback with null // You could also implement deleteCompanyLogo here if needed if (onImageUploaded) { onImageUploaded(null as any); } }; // Generate the progress indicator dots const renderProgressDots = () => { const dots = []; for (let i = 0; i < totalSteps; i++) { if (i < currentStep - 1) { // Completed steps - elongated orange dots.push(
); } else if (i === currentStep - 1) { // Current step - elongated orange dots.push(
); } else { // Future steps - small gray circles dots.push(
); } } return dots; }; return (
{currentStep === 1 ?
Company Logo
{currentImage ? 'Change image' : 'Upload image'}
{uploadError && (
{uploadError}
)} {currentImage && (
{Math.round(currentImage.compressedSize / 1024)}KB • {currentImage.width}×{currentImage.height}px
)}
:
{question}
} {children}
{showBackButton && (
{backText}
)}
{nextText}
{/* Step indicator - top left */}
{currentStep} of {totalSteps}
{/* Skip button - top right */}
Skip
{/* Progress indicator and title - top center */}
{renderProgressDots()}
{stepTitle}
); }; // Question Card Component (for Q&A style layout) interface FigmaQuestionCardProps { question: string; description?: string; children: ReactNode; className?: string; } export const FigmaQuestionCard: React.FC = ({ question, description, children, className = "" }) => { return ( //
//
//
// {children} //
//
//
{children}
//
// {/*
//
Q
//
//
// {question} //
// {description && ( //
// {description} //
// )} //
//
*/} //
//
//
A
//
// {children} //
//
//
); }; // Enhanced input that matches Figma designs interface EnhancedFigmaInputProps { placeholder?: string; value?: string; onChange?: (value: string) => void; multiline?: boolean; rows?: number; className?: string; } export const EnhancedFigmaInput: React.FC = ({ placeholder = "Type your answer....", value = "", onChange, multiline = false, rows = 4, className = "" }) => { const baseClasses = "self-stretch min-h-40 p-5 relative bg-[--Neutrals-NeutralSlate50] rounded-xl inline-flex justify-start items-start gap-2.5 overflow-hidden"; const inputClasses = "flex self-stretch w-100 text-[--Neutrals-NeutralSlate500] text-base font-normal font-['Inter'] leading-normal bg-transparent border-none outline-none resize-none"; if (multiline) { return (