Como fazer o download de um relatório HTML usando o downloadButton no shiny?

Boa tarde, pessoal!

Estou com uma dúvida envolvendo o botão de download do Shiny. Preciso baixar um arquivo HTML porém não estou conseguindo realizar corretamente o download.

Contexto:
O arquivo que quero baixar é um relatório HTML que sai como output do fluxo de validação do pacote data.validator. Peguei o exemplo disponível no próprio site do pacote para facilitar a reprodutibilidade desse exercício.

O objeto report pode ser salvo usando a função data.validator::save_report que vai gerar um arquivo HTML. Esse objeto também pode ser renderizado como uma UI do shiny para ser colocado em um output. Dentro do meu exemplo coloquei as duas opções, porém o meu problema está focado na primeira.

Tentei usar a função para salvar o relatório dentro de um downloadHandler porém não consigo fazer funcionar a etapa de download em si. Toda vez que ciclo no botão para baixar o navegador diz que não consegue encontrar arquivo para download, entretanto, na pasta do app aparece um arquivo html (com um nome estranho de arquivo temporário) referente ao relatório. Ou seja, ele está gerando o arquivo, só não está obedecendo o fluxo pro download.

Alguém, por favor, poderia me auxiliar na solução desse problema?

Não sei se estou errando fazendo a exportação diretamente. O estranho é que tentar criar um arquivo temporário antes da no mesmo. E a função save_report em si funciona normalmente fora do downloadHandler.

Desde já agradeço qualquer ajuda!

library(shiny)
library(data.validator)
#> 
#> Attaching package: 'data.validator'
#> The following object is masked from 'package:shiny':
#> 
#>     validate
library(magrittr)
library(assertr)


# Criar report ------------------------------------------------------------

report <- data_validation_report()
validate(mtcars, name = "Verifying cars dataset") %>%
    validate_if(drat > 0, description = "Column drat has only positive values") %>%
    validate_cols(in_set(c(0, 2)), vs, am, description = "vs and am values equal 0 or 2 only") %>%
    validate_cols(within_n_sds(1), mpg, description = "mpg within 1 sds") %>%
    validate_rows(num_row_NAs, within_bounds(0, 2), vs, am, mpg, description = "not too many NAs in rows") %>%
    validate_rows(maha_dist, within_n_mads(10), everything(), description = "maha dist within 10 mads") %>%
    add_results(report)


# Ui ----------------------------------------------------------------------

ui <- fluidPage(
    
    theme = bslib::bs_theme(version = 4),
    tabsetPanel(
        
        tabPanel(
            "Baixar relatório",
            h2("Download do relatório"),
            hr(),
            fluidRow(
                column(
                    width = 2,
                    downloadButton(
                        outputId = "baixar_relatorio",
                        label = "Download relatório"
                    )
                )
            )
        ),
        
        tabPanel(
            "Visualizar relatório",
            uiOutput("validation")
        )
    )
)


# Server ------------------------------------------------------------------

server <- function(input, output, session) {
    
    output$baixar_relatorio <- downloadHandler(
        
        filename = "relatorio.html",
        
        content = function(file){
            
            # Ambas tentativas salvam o arquivo html com um nome aleatório no
            # diretório principal do app, porém o que quero é que faça o download.
            
            # Tentativa 1: usando a função para salver o relatório. Não funciona
            data.validator::save_report(
                report = report,
                output_file = file,
            )
            
            # Tentativa 2: criar arquivo temporário e salvar. Não funciona.
            # arquivo_html <- tempfile(
            #     fileext = ".html"
            # )
            # 
            # data.validator::save_report(
            #     report = report,
            #     output_file = arquivo_html,
            # )
            
        }
        
    )
    
    output$validation <- renderUI({
        render_semantic_report_ui(get_results(report))
    })
    
}

shinyApp(ui, server)
Shiny applications not supported in static R Markdown documents

Created on 2022-11-30 with reprex v2.0.2