79 lines
2.3 KiB
Swift
79 lines
2.3 KiB
Swift
// Copyright 2015-present 650 Industries. All rights reserved.
|
|
|
|
import ExpoModulesCore
|
|
#if !os(tvOS)
|
|
import SafariServices
|
|
#endif
|
|
import React
|
|
|
|
public class DevMenuInternalModule: Module {
|
|
public func definition() -> ModuleDefinition {
|
|
Name("ExpoDevMenuInternal")
|
|
|
|
// MARK: JavaScript API
|
|
Constant("doesDeviceSupportKeyCommands") {
|
|
#if targetEnvironment(simulator)
|
|
return true
|
|
#else
|
|
return false
|
|
#endif
|
|
}
|
|
|
|
AsyncFunction("reload", DevMenuManager.shared.reload)
|
|
AsyncFunction("togglePerformanceMonitor", DevMenuManager.shared.togglePerformanceMonitor)
|
|
AsyncFunction("toggleInspector", DevMenuManager.shared.toggleInspector)
|
|
AsyncFunction("openJSInspector", DevMenuManager.shared.openJSInspector)
|
|
AsyncFunction("toggleFastRefresh", DevMenuManager.shared.toggleFastRefresh)
|
|
|
|
AsyncFunction("loadFontsAsync") {}
|
|
|
|
AsyncFunction("hideMenu") {
|
|
DevMenuManager.shared.hideMenu()
|
|
}
|
|
|
|
AsyncFunction("closeMenu") {
|
|
DevMenuManager.shared.closeMenu()
|
|
}
|
|
|
|
AsyncFunction("setOnboardingFinished") { (finished: Bool) in
|
|
DevMenuPreferences.isOnboardingFinished = finished
|
|
}
|
|
|
|
AsyncFunction("openDevMenuFromReactNative") {
|
|
guard let rctDevMenu = DevMenuManager.shared.currentBridge?.devMenu else {
|
|
return
|
|
}
|
|
|
|
DevMenuManager.shared.closeMenu {
|
|
DispatchQueue.main.async {
|
|
rctDevMenu.show()
|
|
}
|
|
}
|
|
}
|
|
|
|
AsyncFunction("onScreenChangeAsync") { (currentScreen: String?) in
|
|
DevMenuManager.shared.setCurrentScreen(currentScreen)
|
|
}
|
|
|
|
AsyncFunction("fireCallback") { (name: String) in
|
|
guard let callback = DevMenuManager.shared.registeredCallbacks.first(where: { $0.name == name }) else {
|
|
throw Exception(name: "ERR_DEVMENU_ACTION_FAILED", description: "\(name) is not a registered callback")
|
|
}
|
|
|
|
DevMenuManager.shared.sendEventToDelegateBridge("registeredCallbackFired", data: name)
|
|
if callback.shouldCollapse {
|
|
DevMenuManager.shared.closeMenu()
|
|
}
|
|
}
|
|
|
|
AsyncFunction("copyToClipboardAsync") { (content: String) in
|
|
#if os(tvOS)
|
|
throw Exception(name: "ERR_DEVMENU_ACTION_FAILED", description: "copy to clipboard is not available in tvOS")
|
|
#else
|
|
let clipboard = UIPasteboard.general
|
|
clipboard.string = content as String
|
|
#endif
|
|
}
|
|
}
|
|
}
|