import React from 'react'; import { NavContext } from '../contexts/NavContext'; import { IonicReactProps } from './IonicReactProps'; import { IonIconInner } from './inner-proxies'; import { createForwardRef, isPlatform } from './utils'; import { deprecationWarning } from './utils/dev'; interface IonIconProps { ariaLabel?: string; color?: string; flipRtl?: boolean; icon?: { ios: string; md: string; }; ios?: { ios: string; md: string; }; lazy?: boolean; md?: { ios: string; md: string; }; mode?: 'ios' | 'md'; name?: string; size?: string; src?: string; } type InternalProps = IonIconProps & { forwardedRef?: React.RefObject; }; class IonIconContainer extends React.PureComponent { constructor(props: InternalProps) { super(props); if (this.props.name) { deprecationWarning('icon-name', 'In Ionic React, you import icons from "ionicons/icons" and set the icon you imported to the "icon" property. Setting the "name" property has no effect.'); } } setIcon() { const { icon, ios, md } = this.props; if (ios || md) { if (isPlatform('ios')) { this.setState({ icon: ios ?? md ?? icon }); } else if (isPlatform('android')) { this.setState({ icon: md ?? ios ?? icon }); } } else { this.setState({ icon }); } } render() { const { icon, ios, md, ...rest } = this.props; let iconToUse: typeof icon; if (ios || md) { if (isPlatform('ios')) { iconToUse = ios ?? md ?? icon; } else if (isPlatform('android')) { iconToUse = md ?? ios ?? icon; } } else { iconToUse = icon; } return ( {this.props.children} ); } static get contextType() { return NavContext; } } export const IonIcon = createForwardRef(IonIconContainer, 'IonIcon');