Skip to content

Commit 2557bf3

Browse files
authored
fix(modal): reset breakpoint to initial breakpoint on present (#25246)
Resolves #25245
1 parent 16a8b1e commit 2557bf3

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

core/src/components/modal/modal.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,12 @@ export class Modal implements ComponentInterface, OverlayInterface {
442442
await this.currentTransition;
443443
}
444444

445+
/**
446+
* If the modal is presented multiple times (inline modals), we
447+
* need to reset the current breakpoint to the initial breakpoint.
448+
*/
449+
this.currentBreakpoint = this.initialBreakpoint;
450+
445451
const data = {
446452
...this.componentProps,
447453
modal: this.el,
@@ -668,7 +674,7 @@ export class Modal implements ComponentInterface, OverlayInterface {
668674

669675
enteringAnimation.forEach((ani) => ani.destroy());
670676
}
671-
677+
this.currentBreakpoint = undefined;
672678
this.currentTransition = undefined;
673679
this.animation = undefined;
674680
return dismissed;

core/src/components/modal/test/sheet/modal.e2e.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,65 @@ test.describe('sheet modal: setting the breakpoint', () => {
133133
expect(ionBreakpointDidChange.events.length).toBe(1);
134134
});
135135
});
136+
137+
test('it should reset the breakpoint value on dismiss', async ({ page }) => {
138+
test.info().annotations.push({
139+
type: 'issue',
140+
description: 'https://github.com/ionic-team/ionic-framework/issues/25245',
141+
});
142+
143+
await page.setContent(`
144+
<ion-content>
145+
<ion-button id="open-modal">Open</ion-button>
146+
<ion-modal trigger="open-modal" initial-breakpoint="0.25">
147+
<ion-content>
148+
<ion-button id="dismiss" onclick="modal.dismiss();">Dismiss</ion-button>
149+
<ion-button id="set-breakpoint">Set breakpoint</ion-button>
150+
</ion-content>
151+
</ion-modal>
152+
</ion-content>
153+
<script>
154+
const modal = document.querySelector('ion-modal');
155+
const setBreakpointButton = document.querySelector('#set-breakpoint');
156+
157+
modal.breakpoints = [0.25, 0.5, 1];
158+
159+
setBreakpointButton.addEventListener('click', () => {
160+
modal.setCurrentBreakpoint(0.5);
161+
});
162+
</script>
163+
`);
164+
165+
const modal = page.locator('ion-modal');
166+
const dismissButton = page.locator('#dismiss');
167+
const openButton = page.locator('#open-modal');
168+
const setBreakpointButton = page.locator('#set-breakpoint');
169+
170+
const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
171+
const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
172+
const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
173+
174+
await openButton.click();
175+
await ionModalDidPresent.next();
176+
177+
await setBreakpointButton.click();
178+
await ionBreakpointDidChange.next();
179+
180+
await dismissButton.click();
181+
await ionModalDidDismiss.next();
182+
183+
await openButton.click();
184+
await ionModalDidPresent.next();
185+
186+
const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
187+
188+
expect(breakpoint).toBe(0.25);
189+
190+
await setBreakpointButton.click();
191+
await ionBreakpointDidChange.next();
192+
193+
const updatedBreakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
194+
195+
expect(updatedBreakpoint).toBe(0.5);
196+
});
136197
});

0 commit comments

Comments
 (0)