PublicDialogManager.ets 1.17 KB

export type CloseAction = () => void

export class PublicDialogManager {

  private dialogControllers: CustomDialogController[] = []
  private closeActions: CloseAction[] = []

  private constructor() {
  }
  private static manager: PublicDialogManager
  static shareInstance(): PublicDialogManager {
    if (!PublicDialogManager.manager) {
      PublicDialogManager.manager = new PublicDialogManager()
    }
    return PublicDialogManager.manager
  }

  openDialog(dialogController: CustomDialogController, closeAction: CloseAction) {
    if (!dialogController) {
      return
    }
    dialogController.open()
    this.dialogControllers.push(dialogController)
    this.closeActions.push(closeAction)
  }

  closeDialog(dialogController: CustomDialogController) {
    if (!dialogController) {
      return
    }
    dialogController.close()
    const index = this.dialogControllers.indexOf(dialogController)
    if (index != -1) {
      this.dialogControllers.splice(index, 1)
      this.closeActions.splice(index, 1)[0]()
    }
  }

  closeLastDialog() {
    const count = this.dialogControllers.length
    if (count > 0) {
      this.closeDialog(this.dialogControllers[count - 1])
    }
  }
}