Shinyjs: On click option in shiny dashboard

人走茶凉 提交于 2019-12-08 12:04:03

问题


I have a shiny dashboard app with 3 tabs and a notification menu. I am trying to track user activity on the dashboard and wish to log each of their clicks on the dashboard.

The code in server.R for the tabset panel is as below:

output$tabs1=renderUI(
    tabsetPanel(type="tab",
                tabPanel(id="OverallTab","Overall Activity"),
                tabPanel(id="Tab1","Tab 1 details"),
                tabPanel(id="Tab2","Tab 2 details"))

Part of my notification code is as below:

output$notiMenu <- renderMenu({
            all_nots <- apply(u_notd, 1, function(row) {
              notificationItem(text = row[["notification"]], icon("users"))
            })
            dropdownMenu(type = "notifications", .list = all_nots)
          })

I am trying to use shinyjs to write to a dataframe if a user clicks on either of the tabs or notification menu as below:

  tab1_clicled=""
  tab2_clicked=""
  noti_clicked=""
  shinyjs::onclick("notiMenu",print("Notification clicked"),noti_clicked="YES")
  shinyjs::onclick("Tab1",print("Tab1 clicked"),tab1_clicled="YES")
  shinyjs::onclick("Tab2", print("Tab2 clicked"),tab2_clicled="YES")
  df=as.data.frame(tab1_clicked,tab2_clicked,noti_clicked)

I face 2 issues here,

1) the on click option doesn't appear to work for the tab panels, using the shinyjs reference(here), I see that there is only a mention of using on click for the tabset panel and not for each tab panel?

2) I'm unable to modify the value of tab1_clicked inside the onclick function. It throws an error saying: Unhandled error in observer: unused argument (tab1_clicled = "YES")

Appreciate any help.


回答1:


I just quickly skimmed your code and I can see two errors. The first parameter of onclick is the ID of the element. In your case, you want the ID of the actual tab button, but unfortunately the way tabs work in shiny, "Tab1" is actually the ID of the container of the tab panel but it's not the id of the tab button itself. Look at the HTML of a shiny app and you'll see that. Tabs are a bit weird and annoying and it's really difficult to deal with the tab buttons themselves in shiny.

Secondly, The second argument of onclick is the expression, but you're trying to run two expressions print("Tab1 clicked") and tab1_clicled="YES". You need to wrap these in {} so that it's considered one expression, like this:

onclick(id, {print("Tab1 clicked"); tab1_clicled="YES"}

But unfortunately getting the id of the tab button is difficult so I don't think onclick will be useful for that



来源:https://stackoverflow.com/questions/33660662/shinyjs-on-click-option-in-shiny-dashboard

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!