import React, { ReactElement, ReactNode, useEffect, useState } from 'react' import InputElement from './InputElement' import Label from './Label' import styles from './index.module.css' import { ErrorMessage, FieldInputProps } from 'formik' import classNames from 'classnames/bind' import Disclaimer from './Disclaimer' import Tooltip from '@shared/atoms/Tooltip' import Markdown from '@shared/Markdown' const cx = classNames.bind(styles) export interface InputProps extends FieldInputProps { label?: string | ReactNode placeholder?: string required?: boolean help?: string tag?: string type?: string options?: string[] sortOptions?: boolean additionalComponent?: ReactElement rows?: number pattern?: string min?: string max?: string disabled?: boolean readOnly?: boolean field?: FieldInputProps form?: any prefix?: string | ReactElement postfix?: string | ReactElement step?: string defaultChecked?: boolean size?: 'mini' | 'small' | 'large' | 'default' className?: string disclaimer?: string disclaimerValues?: string[] } export default function Input(props: Partial): ReactElement { const { label, help, additionalComponent, size, field, disclaimer, disclaimerValues } = props const hasError = props.form?.touched[field.name] && props.form?.errors[field.name] const styleClasses = cx({ field: true, hasError: hasError }) const [disclaimerVisible, setDisclaimerVisible] = useState(true) useEffect(() => { if (disclaimer && disclaimerValues) { setDisclaimerVisible( disclaimerValues.includes(props.form?.values[field.name]) ) } }, [props.form?.values[field.name]]) return (
{field && hasError && (
)} {/* {help && {help}} */} {disclaimer && ( {disclaimer} )} {additionalComponent && additionalComponent}
) }