47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { cn } from "../../lib/utils"
|
|
interface FormTextInputProps {
|
|
value: string,
|
|
name: string,
|
|
onChangeHandler: React.ChangeEventHandler<HTMLInputElement>,
|
|
type: "text" | "password" | "email",
|
|
children?: React.ReactNode,
|
|
className?: string,
|
|
placeholder?: string
|
|
}
|
|
|
|
interface FormSubmitInputProps {
|
|
name: string,
|
|
value: string | undefined,
|
|
onSubmitHandler: React.FormEventHandler<HTMLInputElement> | undefined,
|
|
children?: React.ReactNode,
|
|
className?: string
|
|
}
|
|
|
|
interface FormLabelProps {
|
|
name: string,
|
|
className?: string,
|
|
title?: string
|
|
}
|
|
|
|
const FormLabel = (props: FormLabelProps) => {
|
|
let label = (props.title == null) ? props.name.charAt(0).toUpperCase() + props.name.slice(1) : props.title;
|
|
return(<label className={cn(props.className)} htmlFor={props.name}>{label}</label>);
|
|
}
|
|
|
|
const FormTextInput = (props: FormTextInputProps) => {
|
|
return(
|
|
<input className={cn(props.className)} type={props.type} name={props.name} value={props.value} placeholder={props.placeholder} onChange={props.onChangeHandler}></input>
|
|
);
|
|
}
|
|
|
|
const FormSubmitInput = (props: FormSubmitInputProps) => {
|
|
return(
|
|
<input className={cn(props.className)} type="submit" name={props.name} value={props.value} onSubmit={props.onSubmitHandler}>{props.children}</input>
|
|
);
|
|
}
|
|
|
|
export {
|
|
FormTextInput,
|
|
FormSubmitInput,
|
|
FormLabel
|
|
}; |