import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
import { forwardRef, useMemo } from 'react';
import { FormHelperTextContent } from '../FormHelperText';
import { classNames } from '../utils/classNames';
import { textFieldClassnames } from './constants';
import { StyledTextField } from './styles';
export const TextField = forwardRef(({ success, error, helperText: helperTextProp, fullWidth = false, startAdornment, endAdornment, inputProps, InputProps, maxLength, trimmed = true, onBlur, hideHelperText = false, className, disabled, ...props }, ref) => {
    const color = useMemo(() => {
        if (success) {
            return 'success';
        }
        return undefined;
    }, [success]);
    const helperText = useMemo(() => {
        if (success) {
            return (_jsx(FormHelperTextContent, { success: true, children: helperTextProp }));
        }
        if (error) {
            return (_jsx(FormHelperTextContent, { error: true, children: helperTextProp }));
        }
        if (helperTextProp) {
            return helperTextProp;
        }
        // helperText из mui/TextField имеет тип ReactNode | undefined;
        // однако если helperText={null} вспомогательный текст просто перестает
        // рендериться, поэтому необходимо передавать что-то отличное от null
        // но при этом не отображающиеся на странице
        return _jsx(_Fragment, {});
    }, [helperTextProp, success, error]);
    const handleBlur = (event) => {
        if (trimmed) {
            const newValue = event.target.value?.trim();
            props.onChange?.({
                ...event,
                target: { ...event.target, value: newValue },
            });
        }
        onBlur?.(event);
    };
    const classnames = useMemo(() => classNames(className, {
        [textFieldClassnames.hideHelperText]: hideHelperText,
        [textFieldClassnames.disabled]: disabled,
    }), [className, hideHelperText, disabled]);
    return (_jsx(StyledTextField, { ref: ref, variant: "outlined", fullWidth: fullWidth, error: error, color: color, helperText: helperText, InputProps: {
            startAdornment,
            endAdornment,
            ...InputProps,
        }, inputProps: {
            maxLength,
            ...inputProps,
        }, onBlur: handleBlur, className: classnames, disabled: disabled, ...props }));
});
