Я пытаюсь создать систему сообщений в блестящем приложении, которое будет получать уведомления при выполнении определенных задач, но в настоящее время это не работает:
UI:
library(shinydashboard)
dashboardPage(
dashboardHeader(title = "My Dashboard",
dropdownMenuOutput("messageMenu")
),
dashboardSidebar(),
dashboardBody("Hi", actionButton("go", label="DO STUFF!"), actionButton("go2", label="DO MORE STUFF!"))
)
Сервер:
library(shinydashboard)
shinyServer(function(input, output) {
M_Store <- reactiveValues(DF = data.frame(
from = c("Admininstrator", "New User", "Support"),
message = c(
"Sales are steady this month.",
"How do I register?",
"The new server is ready."
),
stringsAsFactors = FALSE
))
output$messageMenu <- renderMenu({
msgs <- apply(M_Store$DF, 1, function(row) {
messageItem(from = row[["from"]], message = row[["message"]])
})
dropdownMenu(type = "messages", .list = msgs)
})
reactive({
input$go
message("Button pressed. Execute analysis!")
message("Pretend analysis got done!")
message("Now want to send a message that the analysis is done!")
M_Store$DF <- rbind(isolate(M_Store$DF), data.frame(from="Meee", message="Done message!"))
})
reactive({
input$go2
message("Second button pressed. Execute second analysis!")
message("Some computation!")
message("Want to update the user on progress with a message!")
M_Store$DF <- rbind(isolate(M_Store$DF), data.frame(from="Someone else!", message="Progress message2!"))
message("More computations....")
message("Done, want to tell user I'm done!")
M_Store$DF <- rbind(isolate(M_Store$DF), data.frame(from="Someone else!", message="Done message2!"))
})
})
Вы видите мое намерение? Я хотел бы иметь возможность отправлять сообщения об анализе или прогрессе в действиях. Я думал, что наличие реактивного DF в M_Store будет означать, когда им манипулируют, тогда все зависит от него, то есть вывод $ messageMenu.
То, что я хотел бы сделать, аналогично индикаторам выполнения shiny: когда вы выполняете свои вычисления, вы просто обновляете их переменные, и они меняются на экране.
Спасибо, Бен.