the-tip-top-frontend/components/forms/FormTextarea.tsx
2025-11-17 23:38:02 +01:00

71 lines
1.6 KiB
TypeScript

'use client';
import React, { ChangeEvent } from 'react';
interface FormTextareaProps {
label: string;
name: string;
value: string;
onChange: (e: ChangeEvent<HTMLTextAreaElement>) => void;
onBlur?: (e: ChangeEvent<HTMLTextAreaElement>) => void;
error?: string;
touched?: boolean;
placeholder?: string;
required?: boolean;
disabled?: boolean;
rows?: number;
className?: string;
}
/**
* Composant de textarea de formulaire réutilisable
*/
export default function FormTextarea({
label,
name,
value,
onChange,
onBlur,
error,
touched,
placeholder,
required = false,
disabled = false,
rows = 4,
className = '',
}: FormTextareaProps) {
const showError = touched && error;
return (
<div className={`mb-4 ${className}`}>
<label
htmlFor={name}
className="block text-sm font-medium text-gray-700 mb-2"
>
{label}
{required && <span className="text-red-500 ml-1">*</span>}
</label>
<textarea
id={name}
name={name}
value={value}
onChange={onChange}
onBlur={onBlur}
placeholder={placeholder}
disabled={disabled}
required={required}
rows={rows}
className={`
w-full px-4 py-2 border rounded-lg
focus:outline-none focus:ring-2 focus:ring-primary-500
disabled:bg-gray-100 disabled:cursor-not-allowed
${showError ? 'border-red-500' : 'border-gray-300'}
`}
/>
{showError && (
<p className="mt-1 text-sm text-red-500">{error}</p>
)}
</div>
);
}