@@ -113,6 +113,10 @@ register_plot_events <- function(p) {
113
113
# ' If equal to `"event"`, then [event_data()] always triggers re-execution,
114
114
# ' instead of re-executing only when the relevant shiny input value changes
115
115
# ' (the default).
116
+ # ' @param suppress_unregistered_warning If TRUE, do not throw a warning when
117
+ # ' this function is called before a plot renders and registers event handlers.
118
+ # ' (These warnings often occur spuriously in multi-tab apps, where not all plots
119
+ # ' are immediately rendered.)
116
120
# ' @export
117
121
# ' @seealso [event_register], [event_unregister]
118
122
# ' @references
@@ -133,7 +137,8 @@ event_data <- function(
133
137
),
134
138
source = " A" ,
135
139
session = shiny :: getDefaultReactiveDomain(),
136
- priority = c(" input" , " event" )
140
+ priority = c(" input" , " event" ),
141
+ suppress_unregistered_warning = FALSE
137
142
) {
138
143
if (is.null(session )) {
139
144
stop(" No reactive domain detected. This function can only be called \n " ,
@@ -143,25 +148,30 @@ event_data <- function(
143
148
event <- match.arg(event )
144
149
eventID <- paste(event , source , sep = " -" )
145
150
146
- # It's possible for event_data() to execute before any
147
- # relevant input values have been registered (i.e, before
148
- # relevant plotly graphs have been executed). Therefore,
149
- # we delay checking that a relevant input value has been
150
- # registered until shiny flushes
151
- session $ onFlushed(
152
- function () {
153
- eventIDRegistered <- eventID %in% session $ userData $ plotlyShinyEventIDs
154
- if (! eventIDRegistered ) {
155
- warning(
156
- " The '" , event , " ' event tied a source ID of '" , source , " ' " ,
157
- " is not registered. In order to obtain this event data, " ,
158
- " please add `event_register(p, '" , event , " ')` to the plot (`p`) " ,
159
- " that you wish to obtain event data from." ,
160
- call. = FALSE
161
- )
151
+ if (! suppress_unregistered_warning ) {
152
+ # It's possible for event_data() to execute before any
153
+ # relevant input values have been registered (i.e, before
154
+ # relevant plotly graphs have been executed). Therefore,
155
+ # we delay checking that a relevant input value has been
156
+ # registered until shiny flushes
157
+ session $ onFlushed(
158
+ function () {
159
+ eventIDRegistered <- eventID %in% session $ userData $ plotlyShinyEventIDs
160
+ if (! eventIDRegistered ) {
161
+ warning(
162
+ " The '" , event , " ' event tied a source ID of '" , source , " ' " ,
163
+ " is not registered. In order to obtain this event data, " ,
164
+ " please add `event_register(p, '" , event , " ')` to the plot (`p`) " ,
165
+ " that you wish to obtain event data from, or set " ,
166
+ " `suppress_unregistered_warning = TRUE` to suppress this warning " ,
167
+ " if the plot will eventually register this event, but only " ,
168
+ " renders conditionally." ,
169
+ call. = FALSE
170
+ )
171
+ }
162
172
}
163
- }
164
- )
173
+ )
174
+ }
165
175
166
176
# legend clicking returns trace(s), which shouldn't be simplified...
167
177
parseJSON <- if (event %in% c(" plotly_legendclick" , " plotly_legenddoubleclick" )) {
0 commit comments