All files / libs/design-system/ext/src/lib/forms/formik-input FormikInput.tsx

100% Statements 35/35
100% Branches 1/1
100% Functions 1/1
100% Lines 35/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 361x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 1x 1x 1x 1x 1x 1x  
import { memo } from 'react';
 
import { Input, type InputProps } from '@allshares/studio-design-system';
import { useFormikFieldAdapter, type FormikFieldProps } from '@amalia/ext/formik';
 
export type InputTypeProp = 'email' | 'number' | 'password' | 'text' | 'url' | undefined;
 
export type FormikInputProps<TType extends InputTypeProp = 'text'> = FormikFieldProps<InputProps, TType>;
 
const FormikInputBase = function FormikInput<TType extends InputTypeProp = 'text'>({
  validate, // Omit validate and any props not passed to Input.
  type = 'text' as TType,
  ...props
}: FormikInputProps<TType>) {
  const { onChange, ...formikFieldProps } = useFormikFieldAdapter<InputProps['value'], TType>({
    ...props,
    validate,
    type,
  });
 
  return (
    <Input
      {...props}
      {...formikFieldProps}
      type={type}
      onChange={onChange as (value: string) => void}
    />
  );
};
 
export const FormikInput = Object.assign(memo(FormikInputBase) as typeof FormikInputBase, {
  Action: Input.Action,
  ClearAction: Input.ClearAction,
  styles: Input.styles,
});