fix: prevent navigating when button is disabled

This commit is contained in:
Sean Perkins
2023-08-31 14:24:53 -04:00
parent cb6a7ecab0
commit b45852e9e0
2 changed files with 34 additions and 2 deletions

View File

@@ -35,8 +35,8 @@ export class NavLink implements ComponentInterface {
private onClick = () => {
const { el } = this;
const button = el.querySelector('button,ion-button,a');
if (button?.hasAttribute('disabled')) {
const button = el.querySelector<HTMLIonButtonElement>('ion-button');
if (button?.disabled) {
// Do not navigate if the button is disabled
return;
}

View File

@@ -0,0 +1,32 @@
import { h } from '@stencil/core';
import { newSpecPage } from '@stencil/core/testing';
import { Button } from '../../button/button';
import { Nav } from '../../nav/nav';
import { NavLink } from '../nav-link';
describe('NavLink', () => {
it('should not navigate when button is disabled', async () => {
const page = await newSpecPage({
components: [Nav, NavLink, Button],
template: () => (
<ion-nav>
<ion-nav-link component="div">
<ion-button disabled>Disabled</ion-button>
</ion-nav-link>
</ion-nav>
),
});
const mock = jest.fn();
const nav = page.body.querySelector('ion-nav')!;
const ionButton = page.body.querySelector('ion-button')!;
nav.addEventListener('ionNavWillChange', mock);
await ionButton.click();
expect(mock).not.toHaveBeenCalled();
});
});