ionic-team / ionic-framework

A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript.
https://ionicframework.com
MIT License
51.13k stars 13.5k forks source link

feat: Close the top most modal by id #30030

Open seopei opened 4 days ago

seopei commented 4 days ago

Prerequisites

Describe the Feature Request

Currently you are able to create multiple modals with an id. eg:

const modal = await this.modalCtrl.create({
  component: ModalExampleComponent,
  id: 'my-id'
});
modal.present();

When I dismiss the modal via this.modalCtrl.dimiss(undefined, undefined, 'my-id') the bottom most modal with this id will be closed. If I do not specify the id the to most modal will be closed. It would be great if always the top most modal would be closed.

Describe the Use Case

I want to present multiple modals with the same id. When I close an modal by id the top most modal with this id should be closed.

Describe Preferred Solution

No response

Describe Alternatives

No response

Related Code

see core/src/utils/overlays.ts

change this

export const getPresentedOverlay = (
  doc: Document,
  overlayTag?: string,
  id?: string
): HTMLIonOverlayElement | undefined => {
  const overlays = getPresentedOverlays(doc, overlayTag);
  return id === undefined ? overlays[overlays.length - 1] : overlays.find((o) => o.id === id);
};

into this

export const getPresentedOverlay = (
  doc: Document,
  overlayTag?: string,
  id?: string
): HTMLIonOverlayElement | undefined => {
  const overlays = getPresentedOverlays(doc, overlayTag);
  return id === undefined ? overlays[overlays.length - 1] : overlays.slice().reverse().find((o) => o.id === id);
};

Additional Information

No response