11library(shiny.blueprint )
22library(shiny.router )
33library(shiny )
4+ library(purrr )
45
56section <- function (name , ... ) list (name = name , items = list (... ))
67item <- function (name , id ) list (type = " item" , name = name , id = id )
@@ -141,23 +142,33 @@ makePage <- function(id, name, ui, rCode) {
141142 )
142143}
143144
144- makeRouter <- function (items ) {
145+ prepareExamples <- function (items ) {
145146 routes <- lapply(items , function (item ) {
146147 example <- readExample(item $ id )
147148 if (is.null(example )) {
148149 return ()
149150 }
150- route(
151- path = item $ id ,
152- ui = makePage(
153- id = item $ id ,
154- name = item $ name ,
155- ui = example $ ui(item $ id ),
156- rCode = example $ rCode
157- ),
158- server = function () example $ server(item $ id )
151+ exampleServer <- list ()
152+ exampleServer [[item $ id ]] <- example $ server
153+ return (
154+ list (
155+ server = exampleServer ,
156+ router = route(
157+ path = item $ id ,
158+ ui = makePage(
159+ id = item $ id ,
160+ name = item $ name ,
161+ ui = example $ ui(item $ id ),
162+ rCode = example $ rCode
163+ )
164+ )
165+ )
159166 )
160167 })
168+ return (routes )
169+ }
170+
171+ makeRouter <- function (items , routes ) {
161172 routes <- append(
162173 list (route(
163174 path = " /" ,
@@ -221,15 +232,15 @@ makeRouter <- function(items) {
221232 )
222233 )
223234 )
224- ),
225- server = function (input , output , session ) {}
235+ )
226236 )),
227237 routes
228238 )
229- do.call(make_router , routes )
239+ do.call(router_ui , routes )
230240}
231241
232- router <- makeRouter(items )
242+ examples <- prepareExamples(items )
243+ router <- makeRouter(items , map(examples , " router" ))
233244
234245addResourcePath(" showcase-static" , " ./static" )
235246
@@ -254,11 +265,15 @@ shinyApp(
254265 tags $ div(
255266 class = " grid" ,
256267 tags $ nav(class = " sidebar" , makeNav(sections )),
257- tags $ main(router $ ui )
268+ tags $ main(router )
258269 )
259270 ),
260271 server = function (input , output , session ) {
261- router $ server ()
272+ router_server ()
262273 session $ sendCustomMessage(" highlight_all" , list ())
274+ exampleServers <- unlist(map(examples , " server" ))
275+ lapply(items , function (item , modules = exampleServers ) {
276+ modules [[item $ id ]](item $ id )
277+ })
263278 }
264279)
0 commit comments