renderUI does not work with nested R6 classes

Hi all,
I have a big shiny app with modules and I am converting some of these in R6 classes. All works well except for nested modules: I am facing an issue with namespaces and the uiOutput does not work.

Here is a reproductible example. The class ClassTest is the last class of the hierarchy of classes. It is called either directly by the App or via the Temp class. In the latter case (nested class), the elements contained in the uiOutput does not work.

library(shiny); library(R6)

ClassTest = R6Class(
  "ClassTest",
  public = list(
    # attributes
    id = NULL,

# initialize
initialize = function(id){
  self$id = id
},
# UI
ui = function(){
  ns = NS(self$id)
  tagList(
    h4('Test class'),
    uiOutput(ns('showText'))
  )
},

# server
server = function(id){
  moduleServer(id,
               function(input, output, session){
  ns = session$ns

  output$showText <- renderUI({ 
    print('In showText <- renderUI')
    tagList(
      p('I am the showText renderUI of the Test class')
      )
    })
}
)
  },

call = function(input, ouput, session){
  self$server(self$id)
}
     )
    )

#----------------------------------------------------------


Temp = R6Class(
  "Temp",
  public = list(
    # attributes
    temp = NULL,
    id = NULL,

# initialize
initialize = function(id){
  self$id = id
  self$temp <- ClassTest$new('testTiers')
},
# UI
ui = function(){
  ns = NS(self$id)
  tagList(
    uiOutput(ns('showTestClass'))
  )
},

# server
server = function(id){
  moduleServer(id,
               function(input, output, session){
                 ns = session$ns 
   output$showTestClass <- renderUI({ 
    self$temp$ui()
    })
})
  },

call = function(input, ouput, session){
  self$server(self$id)
}
  )
)

#----------------------------------------------------------


App = R6Class(
  "App",
  public = list(
    # attributes
    temp = NULL,
    classT = NULL,

# initialize
initialize = function(){
  self$temp = Temp$new('temp')
  self$classT = ClassTest$new('directTest')
  
},
# UI
ui = function(){
  tagList(
    h3('Call by another class'),
    self$temp$ui(),
    hr(),
    h3('Direct call'),
    self$classT$ui()
  )
},

# server
server = function(input, output, session){
  self$temp$call()
  self$classT$call()
    }
  )
)

app = App$new()

shiny::shinyApp(app$ui(), app$server)

This topic was automatically closed 54 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.