rustploy-gui 0.1.13

Rustploy — desktop client (glacier-ui) for the Rustploy PaaS daemon
--!strict
--!nolint FunctionUnused
-- handlers/bundle.luau — copiar um serviço para outro servidor (lado do app
-- principal): o botão "Exportar serviço" da tela do serviço. Ver
-- docs/plano-copiar-servico-entre-servidores.md.
--
-- O plano (variáveis do serviço/projeto, com a sugestão de pré-marcação) é
-- buscado AQUI e semeado na janela via `data`: o `init` de uma janela não pode
-- fazer `fetch` (o motor descarta), só ações despachadas — como esta.

local State = require("../state")

-- `id` vem do card de serviço (`open_export_window:@id`); sem ele, é o serviço
-- aberto na tela do serviço (botão do cabeçalho).
function open_export_window(requested_service_id: string?): ()
    local api = State.api
    local service_id = (requested_service_id ~= nil and requested_service_id ~= "") and requested_service_id or (ctx.selected_service or "")
    if not api or service_id == "" then
        return
    end

    local service_export_plan_ok, service_export_plan_response = api:rpc_checked{ ServiceExportPlan = { service_id = service_id } }
    if not service_export_plan_ok or type(service_export_plan_response) ~= "table" or not service_export_plan_response.ServiceExportPlan then
        toast{ message = "Falha ao preparar a exportação: " .. tostring(service_export_plan_response), kind = "error" }
        return
    end

    open_window{
        component = "service_export", size = "620 720", decorations = false,
        resizable = false,
        data = {
            api_url = ctx.api_url or "",
            api_token = ctx.api_token or "",
            export_service_id = service_id,
            export_plan = json.encode(service_export_plan_response.ServiceExportPlan),
        },
    }
end