mirror of
https://github.com/revoltchat/revite.git
synced 2024-11-13 18:59:22 -05:00
69 lines
2.4 KiB
TypeScript
69 lines
2.4 KiB
TypeScript
|
import Overline from '../../components/ui/Overline';
|
||
|
import InputBox from '../../components/ui/InputBox';
|
||
|
import { Text, Localizer } from 'preact-i18n';
|
||
|
|
||
|
interface Props {
|
||
|
type: "email" | "username" | "password" | "invite" | "current_password";
|
||
|
showOverline?: boolean;
|
||
|
register: Function;
|
||
|
error?: string;
|
||
|
name?: string;
|
||
|
}
|
||
|
|
||
|
export default function FormField({
|
||
|
type,
|
||
|
register,
|
||
|
showOverline,
|
||
|
error,
|
||
|
name
|
||
|
}: Props) {
|
||
|
return (
|
||
|
<>
|
||
|
{showOverline && (
|
||
|
<Overline error={error}>
|
||
|
<Text id={`login.${type}`} />
|
||
|
</Overline>
|
||
|
)}
|
||
|
<Localizer>
|
||
|
<InputBox
|
||
|
placeholder={(<Text id={`login.enter.${type}`} />) as any}
|
||
|
name={
|
||
|
type === "current_password" ? "password" : name ?? type
|
||
|
}
|
||
|
type={
|
||
|
type === "invite" || type === "username"
|
||
|
? "text"
|
||
|
: type === "current_password"
|
||
|
? "password"
|
||
|
: type
|
||
|
}
|
||
|
ref={register(
|
||
|
type === "password" || type === "current_password"
|
||
|
? {
|
||
|
validate: (value: string) =>
|
||
|
value.length === 0
|
||
|
? "RequiredField"
|
||
|
: value.length < 8
|
||
|
? "TooShort"
|
||
|
: value.length > 1024
|
||
|
? "TooLong"
|
||
|
: undefined
|
||
|
}
|
||
|
: type === "email"
|
||
|
? {
|
||
|
required: "RequiredField",
|
||
|
pattern: {
|
||
|
value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
|
||
|
message: "InvalidEmail"
|
||
|
}
|
||
|
}
|
||
|
: type === "username"
|
||
|
? { required: "RequiredField" }
|
||
|
: { required: "RequiredField" }
|
||
|
)}
|
||
|
/>
|
||
|
</Localizer>
|
||
|
</>
|
||
|
);
|
||
|
}
|