Files
rentall-app/frontend/src/components/PasswordInput.tsx

59 lines
1.4 KiB
TypeScript

import React, { useState } from 'react';
interface PasswordInputProps {
id: string;
name?: string;
value: string;
onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
required?: boolean;
placeholder?: string;
className?: string;
label?: string;
}
const PasswordInput: React.FC<PasswordInputProps> = ({
id,
name,
value,
onChange,
required = false,
placeholder,
className = 'form-control',
label
}) => {
const [showPassword, setShowPassword] = useState(false);
return (
<div className="mb-3">
{label && (
<label htmlFor={id} className="form-label">
{label}
</label>
)}
<div className="position-relative">
<input
type={showPassword ? 'text' : 'password'}
className={className}
id={id}
name={name || id}
value={value}
onChange={onChange}
required={required}
placeholder={placeholder}
/>
<button
type="button"
className="btn btn-link position-absolute end-0 top-50 translate-middle-y text-secondary p-0 pe-2"
onClick={() => setShowPassword(!showPassword)}
style={{ zIndex: 10, textDecoration: 'none' }}
tabIndex={-1}
>
<i className={`bi ${showPassword ? 'bi-eye' : 'bi-eye-slash'}`}></i>
</button>
</div>
</div>
);
};
export default PasswordInput;