У меня есть приложение, которое передает данные в отчет rmarkdown, который загружается после генерации.
Кнопка загрузки скрыта, пока отчет не будет сгенерирован. Я хотел бы скрыть его после загрузки отчета или изменения ввода textInput.
Мой код такой, как показано ниже:
library(shiny)
library(sqldf)
library(DT)
library(statquotes)
data(quotes)
quotes
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput("search1", " Search 1 ", '', placeholder = "Type keyword/statement"),
textInput("search2", " Search 2 ", '', placeholder = "Type keyword/statement"),
actionButton("generatereport", "Generate Report", icon = icon("file")),
conditionalPanel(condition = "output.reportbuilt",
# This button appears after the report has been generated and is ready for download.
downloadButton("downloadReport", "Download Report"))),
mainPanel(DT::dataTableOutput("table"))
))
server <- function(input, output, session) {
#Get data
data <- reactive({
if (input$search1 != "" | input$search2 != "") {
sqldf(paste0("SELECT *
FROM quotes
WHERE (text LIKE '%",input$search1,"%'
AND text LIKE '%",input$search2,"%' )"))
}
})
#pass data to the table output
output$table <- DT::renderDataTable({
data()
})
######### DOWNLOAD REPORTS ######################
report <- reactiveValues(filepath = NULL)
observeEvent(input$generatereport, {
tmp_file <- paste0(tempfile(), ".Rmd")
src <- normalizePath('report.Rmd')
owd <- setwd(tempdir())
on.exit(setwd(owd))
file.copy(src, 'report.Rmd', overwrite = TRUE)
library(rmarkdown)
render('report.Rmd', html_document(), output_file = tmp_file)
report$filepath <- tmp_file
})
# Hide download button until report is generated
output$reportbuilt <- reactive({
return(!is.null(report$filepath))
})
outputOptions(output, 'reportbuilt', suspendWhenHidden= FALSE)
output$downloadReport <- downloadHandler(
filename = function() {
paste('report', sep = '.', 'html')
},
content = function(file) {
withProgress(message = 'REPORT DOWNLOAD IN PROGRESS',
detail = 'This may take a while...',
min = 0, max = 5, value = 0,
{
file.copy(report$filepath, file)
})
})
######### DOWNLOAD REPORTS ######################
}
shinyApp(ui, server)
Файл .rmd имеет следующий вид:
---
title: "Report "
author: "Generated by trial"
date: '`r paste("Created on", Sys.Date())`'
output:
html_document: default
pdf_document: default
keep_md: true
---
### Relevant Data
<div align="center">
```{r , echo=FALSE, message=FALSE, warning=FALSE}
DT::datatable(data(), rownames = FALSE, filter="top", options = list(pageLength = 10, scrollX=T) )
```
</div>
Можно ли как-то скрыть кнопку загрузки после завершения загрузки или если я изменю ввод в виджетах textInput?