1 // Copyright 2015-present 650 Industries. All rights reserved.
2 
3 @objc(DevMenuModule)
4 open class DevMenuModule: NSObject {
5   deinit {
6     // cleanup registered callbacks when the bridge is deallocated to prevent these leaking into other (potentially unrelated) bridges
7     if DevMenuManager.wasInitilized {
8       DevMenuManager.shared.registeredCallbacks = []
9     }
10   }
11 
12   // MARK: JavaScript API
13 
14   @objc
15   func openMenu() {
16     DevMenuManager.shared.openMenu()
17   }
18 
19   @objc
20   func closeMenu() {
21     DevMenuManager.shared.closeMenu()
22   }
23 
24   @objc
25   func hideMenu() {
26     DevMenuManager.shared.hideMenu()
27   }
28 
29   @objc
30   func addDevMenuCallbacks(_ callbacks: [[String: Any]], resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
31     callbacks.forEach { callback in
32       guard let name = callback["name"] as? String else {
33         return
34       }
35 
36       let shouldCollapse = callback["shouldCollapse"] as? Bool ?? true
37       DevMenuManager.shared.registeredCallbacks.append(
38         DevMenuManager.Callback(name: name, shouldCollapse: shouldCollapse)
39       )
40     }
41 
42     return resolve(nil)
43   }
44 }
45