Files
ontime/apps/client/src/features/app-settings/panel/settings-panel/composite/GeneralPinInput.tsx
T
Carlos Valente e1e8410ba4 refactor: migrate UI components and remove chakra
migrate pin page
migrate copy tag
migrate pin input
migrate dropdown menus
migrate radio buttons
migrate switch
migrate select
migrate textarea
migrate colour picker
migrate select
migrate context menu
migrate viewparams
remove chakra
2025-07-11 08:43:38 +02:00

46 lines
1.3 KiB
TypeScript

import { PropsWithChildren, useState } from 'react';
import { UseFormRegister } from 'react-hook-form';
import { IoEyeOutline } from 'react-icons/io5';
import { Settings } from 'ontime-types';
import IconButton from '../../../../../common/components/buttons/IconButton';
import Input from '../../../../../common/components/input/input/Input';
import { isAlphanumeric } from '../../../../../common/utils/regex';
import style from './GeneralPinInput.module.scss';
interface GeneralPinInputProps {
register: UseFormRegister<Settings>;
formName: keyof Settings;
disabled?: boolean;
}
export default function GeneralPinInput({ register, formName, disabled }: PropsWithChildren<GeneralPinInputProps>) {
const [isVisible, setVisible] = useState(false);
return (
<div className={style.container}>
<Input
type={isVisible ? 'text' : 'password'}
maxLength={4}
{...register(formName, {
pattern: {
value: isAlphanumeric,
message: 'Only alphanumeric characters are allowed',
},
})}
placeholder='-'
disabled={disabled}
/>
<IconButton
onMouseDown={() => setVisible(true)}
onMouseUp={() => setVisible(false)}
variant='ghosted'
aria-label='Show pin code'
>
<IoEyeOutline />
</IconButton>
</div>
);
}