1 // Copyright 2015-present 650 Industries. All rights reserved.
2 
3 import Foundation
4 
5 class DevMenuPackagerConnectionHandler {
6   weak var manager: DevMenuManager?
7 
8   init(manager: DevMenuManager) {
9     self.manager = manager
10   }
11 
12   func setup() {
13 #if RCT_DEV
14     RCTPackagerConnection
15       .shared()
16       .addNotificationHandler(
17         self.sendDevCommandNotificationHandler,
18         queue: DispatchQueue.main,
19         forMethod: "sendDevCommand"
20       )
21 
22     RCTPackagerConnection
23       .shared()
24       .addNotificationHandler(
25         self.devMenuNotificationHanlder,
26         queue: DispatchQueue.main,
27         forMethod: "devMenu"
28       )
29 #endif
30   }
31 
32   @objc
33   func sendDevCommandNotificationHandler(_ params: [String: Any]) {
34     guard let manager = manager,
35           let command = params["name"] as? String,
36           let bridge = manager.delegate?.appBridge?(forDevMenuManager: manager) as? RCTBridge
37     else {
38       return
39     }
40 
41     let devDelegate = DevMenuDevOptionsDelegate(forBridge: bridge)
42 
43     switch command {
44     case "reload":
45       devDelegate.reload()
46     case "toggleDevMenu":
47       self.manager?.toggleMenu()
48     case "toggleRemoteDebugging":
49       devDelegate.toggleRemoteDebugging()
50     case "toggleElementInspector":
51       devDelegate.toggleElementInsector()
52     case "togglePerformanceMonitor":
53       devDelegate.togglePerformanceMonitor()
54     default:
55       NSLog("Unknown command from packager: %@", command);
56     }
57   }
58 
59   @objc
60   func devMenuNotificationHanlder(_ parames: [String: Any]) {
61     self.manager?.toggleMenu()
62   }
63 }
64