Shiny dashboard body is displayed like it includes rmd output in all tabs after creating rmd output in one tab

Viewed 83

I have a shinydashboard with 3 tabItems. In the 3rd which is named Results a rmd file is displayed. The issue is that as soon as I open this tab and display the rmd report the body in the other tabs changes and is displayed like a report is generated there as well. Why does this happen?

The rmd file

---
title: "An example Knitr/R Markdown document"
output: html_document
---


{r chunk_name, include=FALSE}
x <- rnorm(100)
y <- 2*x + rnorm(100)
cor(x, y)

and the app.r file

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(shinyjs)
library(knitr)
mytitle <- paste0("Life, Death & Statins")
dbHeader <- dashboardHeaderPlus(
  titleWidth = "0px",
  tags$li(a(
    div(style = "margin-left:-15px;margin-bottom:-83px;margin-top:-15px;padding: 0px 1190px 0px 0px ; width: 290px;",
        img(src = 'download.png', height = "125px",width="232px")),
    div(style="display: inline;margin-top:-35px; padding: 0px 90px 0px 1250px ;font-size: 58px ;color: black;font-family:Times-New Roman;font-weight: bold; width: 500px;",HTML(mytitle)),
    div(style="display: inline;margin-top:25px; padding: 0px 0px 0px 1250px;vertical-align:top; width: 150px;", actionButton("well", "Welcome")),
    div(style="display: inline;padding: 0px 0px 0px 0px;vertical-align:top; width: 150px;", actionButton("conse", "Consent")),
    div(style="display: inline;padding: 0px 0px 0px 0px;vertical-align:top; width: 150px;", actionButton("res", "Results"))
    
  ),
  class = "dropdown")
  
  
)

shinyApp(
  ui = dashboardPagePlus(
    header = dbHeader,
    sidebar = dashboardSidebar(width = "0px",
                               sidebarMenu(id = "sidebar", # id important for updateTabItems
                                           menuItem("Welcome", tabName = "well", icon = icon("house")),
                                           menuItem("Consent", tabName = "conse", icon = icon("line-chart")),
                                           menuItem("Results", tabName = "res", icon = icon("line-chart"))
                               )           ),
    body = dashboardBody(
      
      useShinyjs(),
      tags$script(HTML("$('body').addClass('fixed');")),
      
      tags$head(tags$style(".skin-blue .main-header .logo { padding: 0px;}")),
      tabItems(
        tabItem("well",
                fluidRow(
                  column(5,),
                  column(6,
                         actionButton("button", "Get started",style='padding:4px; font-size:140%')))),
        tabItem("conse",
                fluidRow(column(3,h3("Concent"))),
                fluidRow(column(3,h5(strong("Purpose of the research")))),
                fluidRow(column(12,"Your practice is being invited to participate in a study which aims to explore the relationship of statin prescriptions and all cause mortality in elderly general practice patients")),
                

        ),
        tabItem("res",
                tags$hr(),
                fluidRow(
                  column(3,actionButton('spdf', "Save PDF",style='padding:4px; font-size:180%')
                  ),
                  column(6,
                         uiOutput('markdown'))))
      ),
      
      
      
    )
    
  ),
  server<-shinyServer(function(input, output,session) { 
    hide(selector = "body > div > header > nav > a")
    output$markdown <- renderUI({
      HTML(markdown::markdownToHTML(knit('ex.rmd', quiet = TRUE)))
    })
    observeEvent(input$well, {
      updateTabItems(session, "sidebar", "well")
    })
    
    observeEvent(input$conse, {
      updateTabItems(session, "sidebar", "conse")
    })
    
    observeEvent(input$res, {
      updateTabItems(session, "sidebar", "res")
    })
    
    
  }
  )
)
1 Answers

rmd code adds the property

max-width: 800px;

To remove it you can use fragment.only option

HTML(markdown::markdownToHTML(knit('exx.rmd', quiet = TRUE), fragment.only=TRUE))

Alternatively, you can add the following to your ui.

tags$head(tags$style(HTML("
                               body {
                                  width: 100% !important;
                                  max-width: 100% !important;
                               }

                               ")))

Then there is no impact on the previous tabs.

Related