mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-17 10:41:13 +08:00

Issue number: resolves #29991 Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import type { JSX as LocalJSX } from '@ionic/core/components';
|
|
import React from 'react';
|
|
|
|
import type { RouterOptions } from '../../models';
|
|
import type { IonicReactProps } from '../IonicReactProps';
|
|
import { IonTabButtonInner } from '../inner-proxies';
|
|
|
|
type Props = LocalJSX.IonTabButton &
|
|
IonicReactProps & {
|
|
routerOptions?: RouterOptions;
|
|
ref?: React.Ref<HTMLIonTabButtonElement>;
|
|
onClick?: (e: CustomEvent) => void;
|
|
onPointerDown?: React.PointerEventHandler<HTMLIonTabButtonElement>;
|
|
onTouchEnd?: React.TouchEventHandler<HTMLIonTabButtonElement>;
|
|
onTouchMove?: React.TouchEventHandler<HTMLIonTabButtonElement>;
|
|
children?: React.ReactNode;
|
|
};
|
|
|
|
export class IonTabButton extends React.Component<Props> {
|
|
shouldComponentUpdate(): boolean {
|
|
return true;
|
|
}
|
|
|
|
constructor(props: Props) {
|
|
super(props);
|
|
this.handleIonTabButtonClick = this.handleIonTabButtonClick.bind(this);
|
|
}
|
|
|
|
handleIonTabButtonClick() {
|
|
if (this.props.onClick) {
|
|
this.props.onClick(
|
|
new CustomEvent('ionTabButtonClick', {
|
|
detail: {
|
|
tab: this.props.tab,
|
|
href: this.props.href,
|
|
routeOptions: this.props.routerOptions,
|
|
},
|
|
})
|
|
);
|
|
}
|
|
}
|
|
|
|
render() {
|
|
/**
|
|
* onClick is excluded from the props, since it has a custom
|
|
* implementation within IonTabBar.tsx. Calling onClick within this
|
|
* component would result in duplicate handler calls.
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
const { onClick, ...rest } = this.props;
|
|
return <IonTabButtonInner onIonTabButtonClick={this.handleIonTabButtonClick} {...rest}></IonTabButtonInner>;
|
|
}
|
|
|
|
static get displayName() {
|
|
return 'IonTabButton';
|
|
}
|
|
}
|