diff --git a/plugin/src/Components/App.lua b/plugin/src/Components/App.lua index 2736d950..c18abf40 100644 --- a/plugin/src/Components/App.lua +++ b/plugin/src/Components/App.lua @@ -107,12 +107,13 @@ function App:init() end) end -function App:startSession(address, port) +function App:startSession(address, port, sessionOptions) Log.trace("Starting new session") local baseUrl = ("http://%s:%s"):format(address, port) self.serveSession = ServeSession.new({ apiContext = ApiContext.new(baseUrl), + openScriptsExternally = sessionOptions.openScriptsExternally, }) self.serveSession:onStatusChanged(function(status, details) @@ -153,8 +154,8 @@ function App:render() if self.state.appStatus == AppStatus.NotStarted then children = { ConnectPanel = e(ConnectPanel, { - startSession = function(address, port) - self:startSession(address, port) + startSession = function(address, port, settings) + self:startSession(address, port, settings) end, openSettings = function() self:setState({ diff --git a/plugin/src/Components/ConnectPanel.lua b/plugin/src/Components/ConnectPanel.lua index 8a3e3a99..032d66a6 100644 --- a/plugin/src/Components/ConnectPanel.lua +++ b/plugin/src/Components/ConnectPanel.lua @@ -11,6 +11,7 @@ local FitList = require(Plugin.Components.FitList) local FitText = require(Plugin.Components.FitText) local FormButton = require(Plugin.Components.FormButton) local FormTextInput = require(Plugin.Components.FormTextInput) +local PluginSettings = require(Plugin.Components.PluginSettings) local e = Roact.createElement @@ -28,147 +29,153 @@ function ConnectPanel:render() local openSettings = self.props.openSettings return Theme.with(function(theme) - return e(Panel, nil, { - Layout = e("UIListLayout", { - SortOrder = Enum.SortOrder.LayoutOrder, - HorizontalAlignment = Enum.HorizontalAlignment.Center, - VerticalAlignment = Enum.VerticalAlignment.Center, - }), + return PluginSettings.with(function(settings) + return e(Panel, nil, { + Layout = e("UIListLayout", { + SortOrder = Enum.SortOrder.LayoutOrder, + HorizontalAlignment = Enum.HorizontalAlignment.Center, + VerticalAlignment = Enum.VerticalAlignment.Center, + }), - Inputs = e(FitList, { - containerProps = { - BackgroundTransparency = 1, - LayoutOrder = 1, - }, - layoutProps = { - FillDirection = Enum.FillDirection.Horizontal, - Padding = UDim.new(0, 8), - }, - paddingProps = { - PaddingTop = UDim.new(0, 20), - PaddingBottom = UDim.new(0, 10), - PaddingLeft = UDim.new(0, 24), - PaddingRight = UDim.new(0, 24), - }, - }, { - Address = e(FitList, { + Inputs = e(FitList, { containerProps = { - LayoutOrder = 1, BackgroundTransparency = 1, + LayoutOrder = 1, }, layoutProps = { - Padding = UDim.new(0, 4), + FillDirection = Enum.FillDirection.Horizontal, + Padding = UDim.new(0, 8), + }, + paddingProps = { + PaddingTop = UDim.new(0, 20), + PaddingBottom = UDim.new(0, 10), + PaddingLeft = UDim.new(0, 24), + PaddingRight = UDim.new(0, 24), }, }, { - Label = e(FitText, { - Kind = "TextLabel", - LayoutOrder = 1, - BackgroundTransparency = 1, - TextXAlignment = Enum.TextXAlignment.Left, - Font = theme.TitleFont, - TextSize = 20, - Text = "Address", - TextColor3 = theme.Text1, + Address = e(FitList, { + containerProps = { + LayoutOrder = 1, + BackgroundTransparency = 1, + }, + layoutProps = { + Padding = UDim.new(0, 4), + }, + }, { + Label = e(FitText, { + Kind = "TextLabel", + LayoutOrder = 1, + BackgroundTransparency = 1, + TextXAlignment = Enum.TextXAlignment.Left, + Font = theme.TitleFont, + TextSize = 20, + Text = "Address", + TextColor3 = theme.Text1, + }), + + Input = e(FormTextInput, { + layoutOrder = 2, + width = UDim.new(0, 220), + value = self.state.address, + placeholderValue = Config.defaultHost, + onValueChange = function(newValue) + self:setState({ + address = newValue, + }) + end, + }), }), - Input = e(FormTextInput, { - layoutOrder = 2, - width = UDim.new(0, 220), - value = self.state.address, - placeholderValue = Config.defaultHost, - onValueChange = function(newValue) - self:setState({ - address = newValue, - }) - end, + Port = e(FitList, { + containerProps = { + LayoutOrder = 2, + BackgroundTransparency = 1, + }, + layoutProps = { + Padding = UDim.new(0, 4), + }, + }, { + Label = e(FitText, { + Kind = "TextLabel", + LayoutOrder = 1, + BackgroundTransparency = 1, + TextXAlignment = Enum.TextXAlignment.Left, + Font = theme.TitleFont, + TextSize = 20, + Text = "Port", + TextColor3 = theme.Text1, + }), + + Input = e(FormTextInput, { + layoutOrder = 2, + width = UDim.new(0, 80), + value = self.state.port, + placeholderValue = Config.defaultPort, + onValueChange = function(newValue) + self:setState({ + port = newValue, + }) + end, + }), }), }), - Port = e(FitList, { + Buttons = e(FitList, { + fitAxes = "Y", containerProps = { + BackgroundTransparency = 1, LayoutOrder = 2, - BackgroundTransparency = 1, + Size = UDim2.new(1, 0, 0, 0), }, layoutProps = { - Padding = UDim.new(0, 4), + FillDirection = Enum.FillDirection.Horizontal, + HorizontalAlignment = Enum.HorizontalAlignment.Right, + Padding = UDim.new(0, 8), + }, + paddingProps = { + PaddingTop = UDim.new(0, 0), + PaddingBottom = UDim.new(0, 20), + PaddingLeft = UDim.new(0, 24), + PaddingRight = UDim.new(0, 24), }, }, { - Label = e(FitText, { - Kind = "TextLabel", - LayoutOrder = 1, - BackgroundTransparency = 1, - TextXAlignment = Enum.TextXAlignment.Left, - Font = theme.TitleFont, - TextSize = 20, - Text = "Port", - TextColor3 = theme.Text1, + e(FormButton, { + layoutOrder = 1, + text = "Settings", + secondary = true, + onClick = function() + if openSettings ~= nil then + openSettings() + end + end, }), - Input = e(FormTextInput, { + e(FormButton, { layoutOrder = 2, - width = UDim.new(0, 80), - value = self.state.port, - placeholderValue = Config.defaultPort, - onValueChange = function(newValue) - self:setState({ - port = newValue, - }) + text = "Connect", + onClick = function() + if startSession ~= nil then + local address = self.state.address + if address:len() == 0 then + address = Config.defaultHost + end + + local port = self.state.port + if port:len() == 0 then + port = Config.defaultPort + end + + local sessionOptions = { + openScriptsExternally = settings:get("openScriptsExternally"), + } + + startSession(address, port, sessionOptions) + end end, }), }), - }), - - Buttons = e(FitList, { - fitAxes = "Y", - containerProps = { - BackgroundTransparency = 1, - LayoutOrder = 2, - Size = UDim2.new(1, 0, 0, 0), - }, - layoutProps = { - FillDirection = Enum.FillDirection.Horizontal, - HorizontalAlignment = Enum.HorizontalAlignment.Right, - Padding = UDim.new(0, 8), - }, - paddingProps = { - PaddingTop = UDim.new(0, 0), - PaddingBottom = UDim.new(0, 20), - PaddingLeft = UDim.new(0, 24), - PaddingRight = UDim.new(0, 24), - }, - }, { - e(FormButton, { - layoutOrder = 1, - text = "Settings", - secondary = true, - onClick = function() - if openSettings ~= nil then - openSettings() - end - end, - }), - - e(FormButton, { - layoutOrder = 2, - text = "Connect", - onClick = function() - if startSession ~= nil then - local address = self.state.address - if address:len() == 0 then - address = Config.defaultHost - end - - local port = self.state.port - if port:len() == 0 then - port = Config.defaultPort - end - - startSession(address, port) - end - end, - }), - }), - }) + }) + end) end) end diff --git a/plugin/src/DevSettings.lua b/plugin/src/DevSettings.lua index 43237cd4..c859f8f0 100644 --- a/plugin/src/DevSettings.lua +++ b/plugin/src/DevSettings.lua @@ -33,14 +33,6 @@ local VALUES = { [Environment.Test] = false, }, }, - UnstableOpenScriptsExternally = { - type = "BoolValue", - values = { - [Environment.User] = false, - [Environment.Dev] = false, - [Environment.Test] = false, - }, - }, } local CONTAINER_NAME = "RojoDevSettings" .. Config.codename @@ -152,10 +144,6 @@ function DevSettings:twoWaySyncEnabled() return getValue("UnstableTwoWaySync") end -function DevSettings:alwaysOpenScriptsExternally() - return getValue("UnstableOpenScriptsExternally") -end - function _G.ROJO_DEV_CREATE() DevSettings:createDevSettings() end diff --git a/plugin/src/ServeSession.lua b/plugin/src/ServeSession.lua index 36fb61b2..c683a839 100644 --- a/plugin/src/ServeSession.lua +++ b/plugin/src/ServeSession.lua @@ -45,6 +45,7 @@ ServeSession.Status = Status local validateServeOptions = t.strictInterface({ apiContext = t.table, + openScriptsExternally = t.boolean, }) function ServeSession.new(options) @@ -75,6 +76,7 @@ function ServeSession.new(options) self = { __status = Status.NotStarted, __apiContext = options.apiContext, + __openScriptsExternally = options.openScriptsExternally, __reconciler = reconciler, __instanceMap = instanceMap, __statusChangedCallback = nil, @@ -125,7 +127,7 @@ function ServeSession:stop() end function ServeSession:__onActiveScriptChanged(activeScript) - if not DevSettings:alwaysOpenScriptsExternally() then + if not self.__openScriptsExternally then Log.trace("Not opening script {} because feature not enabled.", activeScript) return