modal-manager.service.ts raw
1 class ModalManagerService {
2 static instance: ModalManagerService
3
4 private modals: { id: string; cb: () => void }[] = []
5
6 constructor() {
7 if (!ModalManagerService.instance) {
8 ModalManagerService.instance = this
9 }
10 return ModalManagerService.instance
11 }
12
13 register(id: string, cb: () => void) {
14 const modal = this.modals.find((m) => m.id === id)
15 if (modal) {
16 // already registered, update callback
17 modal.cb = cb
18 return
19 }
20 this.modals.push({ id, cb })
21 }
22
23 unregister(id: string) {
24 const modal = this.modals.find((m) => m.id === id)
25 if (!modal) return
26
27 modal.cb()
28 this.modals = this.modals.filter((m) => m.id !== id)
29 }
30
31 pop() {
32 const modal = this.modals.pop()
33 if (!modal) return false
34
35 modal.cb()
36 return true
37 }
38
39 hasOpenModal() {
40 return this.modals.length > 0
41 }
42 }
43
44 const instance = new ModalManagerService()
45 export default instance
46