renderProps and TypeScript

I am attempting to convert my React project to TypeScript and am stuck on this login component. I am using react-google-login, and I’m getting the following error here when using renderProps:

  Overload 1 of 2, '(props: { component: ElementType<any>; } & { children?: ReactNode; classes?: Partial<SvgIconClasses> | undefined; color?: "error" | "inherit" | ... 7 more ... | undefined; ... 5 more ...; viewBox?: string | undefined; } & CommonProps & Omit<...>): Element', gave the following error.
    Property 'component' is missing in type '{ onClick: () => void; disabled: boolean | undefined; }' but required in type '{ component: ElementType<any>; }'.
  Overload 2 of 2, '(props: DefaultComponentProps<SvgIconTypeMap<{}, "svg">>): Element', gave the following error.
    Type '{ onClick: () => void; disabled: boolean | undefined; }' is not assignable to type 'IntrinsicAttributes & { children?: ReactNode; classes?: Partial<SvgIconClasses> | undefined; color?: "error" | "inherit" | ... 7 more ... | undefined; ... 5 more ...; viewBox?: string | undefined; } & CommonProps & Omit<...>'.
      Property 'disabled' does not exist on type 'IntrinsicAttributes & { children?: ReactNode; classes?: Partial<SvgIconClasses> | undefined; color?: "error" | "inherit" | ... 7 more ... | undefined; ... 5 more ...; viewBox?: string | undefined; } & CommonProps & Omit<...>'.ts(2769)

Here is the rest of the component:

import React from 'react';
import { GoogleLogin } from 'react-google-login';
import { Grid } from '@material-ui/core'
import GoogleIcon from '@mui/icons-material/Google';

interface Props {
  login: (response: {}) => void;
}

const Login: React.FC<Props> = ({ login }) => {

  const responseGoogle = (response: {}) => {
    login(response)
  }

  return (
    <div>
      <Grid container justifyContent="center">
        <GoogleLogin 
          clientId='8013933409-b2i0rd6n1i5i67hen1k874pqdjr4oj4r.apps.googleusercontent.com'
          render={renderProps => (
            <GoogleIcon onClick={renderProps.onClick} disabled={renderProps.disabled}/>
          )}
          onSuccess={responseGoogle}
          onFailure={responseGoogle}
          cookiePolicy={'single_host_origin'}
        /> 
      </Grid>
    </div>
  );
};
  
export default Login;

Any ideas on how to solve this? Thanks in advance for your help!

>Solution :

You are passing button props on svg component, replace GoogleIcon svg component with button like IconButton from MUI

import IconButton from '@mui/material/IconButton';
import GoogleIcon from '@mui/icons-material/Google';

    ...
    
          render={renderProps => (
              <IconButton onClick={renderProps.onClick} disabled={renderProps.disabled}>
                <GoogleIcon />
              </IconButton>
          )}
    
    ...

Leave a Reply