* selectInput/selectizeInput: Fix handling of character(1) choices
* Re-document
* Add .github to .Rbuildignore
* Expand comment, don't import stats
* Add test for 013-selectize regression
* Expand comment
* Split listify into series of passes
* Thouroughly overhaul and comment choicesWithNames()
* No recursion
* Comment new "flat" choice processing machinery
* Remove unneccesary test of choice tree with depth > 2
* Test for choices idiomatically
* Tweak comment for asCharacter
* Comment odd test, add a new test for single-item list
* Handle empty non-lists correctly, add test
* Add test ensuring empty lists come back named
* Add comment/assertion stipulating processGroupedChoices() takes only lists
- Rename sharedSecret variables to checkSharedSecret
- Don't perform the digest::digest(). This just means the timing could
give away the length of the secret, but that's OK, there's enough
entropy in the secret even if you know its length.
Update links to help file to not use `showReactLog`, but `reactlogShow`
Use updated reactlog pkg function api of reactlog_*. This may fail right now, but rerun travis when the reactlog code is merged into master.
Without this change, async handlers won't return any
value for getDefaultReactiveDomain().
library(shiny)
library(promises)
ui <- fluidPage(
p("This app tests if async handlers have reactive domains. You'll get a yes/no answer below."),
h3(
"Does it work?",
textOutput("answer", inline = TRUE)
)
)
server <- function(input, output, session) {
output$answer <- renderText({
promise_resolve(TRUE) %...>% {
if (!is.null(getDefaultReactiveDomain()))
"Yes!"
else
"No :("
}
})
}
shinyApp(ui, server)
- Moved (in|de)crementBusyCount calls out of Context and into Observer
- decrementBusyCount is (effectively) deferred for async observers until
the async operation is complete
- invalidateLater didn't force(session), almost certainly was buggy
- invalidateLater, reactiveTimer, and manageInputs all now use a new
session$cycleStartAction, which delays their effect until observers
(including async ones) are done executing
* NEWS item
* added `onStop` arg to `shinyApp()` (and renamed our internal `onEnd` - which is what was calling `on.exit()` already - to `onStop` as well)
* added onStop() function
* add entry for documentation
* make it work for all possible app structures (interactive, saved as app.R, saved as ui.R and server.R)
* fix#1772: make sure `onStart` works in all scenarios
* update NEWS
* improved wording
* more wording
* and more wording
* don't stop execution if a `onStop` callback function results in an error
* remove "(all sessions have been disconnected)" because it's misleading
* add @seealso documentation
* shamefully forgot to Cmd Shift D
* change code place
* Code review feedback
* onStop: use session argument instead of scope