Untitled

 avatar
unknown
typescript
3 years ago
1.4 kB
4
Indexable
import React, { FC } from 'react';
import { useField } from 'formik';
import {
  Select,
  SelectProps,
  MenuItem,
  FormControl,
  InputLabel,
  FormHelperText,
  SelectChangeEvent,
} from '@mui/material';

interface SelectFieldProps extends SelectProps {
  data: { label: string; value?: string; time?: string }[];
  label: string;
  name: string;
  iconComponent?: FC;
}

const SelectField: FC<SelectFieldProps> = ({
  id,
  name,
  label,
  iconComponent,
  fullWidth = true,
  data,
  onChange,
  ...restProps
}) => {
  const [field, meta] = useField({
    name: name ?? '',
  });
  const isError = meta.touched && Boolean(meta.error);
  const handleSelectValue = (e: SelectChangeEvent) => {
    if (onChange) {
      onChange(e, null);
    } else {
      field.onChange(e);
    }
  };
  return (
    <FormControl fullWidth={true} error={isError} sx={{ textAlign: 'left' }}>
      <InputLabel variant="standard">{label}</InputLabel>
      <Select
        {...field}
        {...restProps}
        value={field.value}
        fullWidth={true}
        error={meta.touched && Boolean(meta.error)}
        onChange={handleSelectValue}
      >
        {data.map((item, index) => (
          <MenuItem key={index} value={item?.value}>
            {item?.label}
          </MenuItem>
        ))}
      </Select>
      {isError && <FormHelperText>{meta.error}</FormHelperText>}
    </FormControl>
  );
};
export default SelectField;
Editor is loading...