MaskedInput.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { useState, type JSX } from 'react';
  2. import styles from './MaskedInput.module.scss';
  3. type Props = {
  4. name: string
  5. readOnly: boolean
  6. defaultValue: string
  7. onChange?: (e: any) => void
  8. tabIndex?: number | undefined
  9. };
  10. export default function MaskedInput(props: Props): JSX.Element {
  11. const [passwordShown, setPasswordShown] = useState(false);
  12. const togglePassword = () => {
  13. setPasswordShown(!passwordShown);
  14. };
  15. const {
  16. name, readOnly, defaultValue, onChange, tabIndex,
  17. } = props;
  18. return (
  19. <div className={styles.MaskedInput}>
  20. <input
  21. className="form-control"
  22. type={passwordShown ? 'text' : 'password'}
  23. name={name}
  24. readOnly={readOnly}
  25. defaultValue={defaultValue}
  26. onChange={onChange}
  27. tabIndex={tabIndex}
  28. />
  29. <span onClick={togglePassword} className={styles.PasswordReveal}>
  30. {passwordShown ? (
  31. <span className="material-symbols-outlined">visibility</span>
  32. ) : (
  33. <span className="material-symbols-outlined">visibility_off</span>
  34. )}
  35. </span>
  36. </div>
  37. );
  38. }