Open jwildfire opened 7 years ago
There are a few steps to figure out.
1) Once the files tab is drawn server.R add the buttons to the tab (this isn't done by the javascript library) 2) When a button is clicked, the file or files should be added to the files table (this requires passing info from client -> server -> client)
A few (possibly) helpful links:
Pretty sure we want to use observeEvent()
for these. This example is close, but we need to trigger on a custom js from codebook.js ("renderComplete" or whatever we choose to call it) instead of a named input (input$go
):
shinyApp(
ui = basicPage(actionButton("go", "Go")),
server = function(input, output, session) {
observeEvent(input$go, {
insertUI("#go", "afterEnd",
actionButton("dynamic", "click to remove"))
# set up an observer that depends on the dynamic
# input, so that it doesn't run when the input is
# created, and only runs once after that (since
# the side effect is remove the input from the DOM)
observeEvent(input$dynamic, {
removeUI("#dynamic")
}, ignoreInit = TRUE, once = TRUE)
})
}
)
}
EDIT: No longer convinced observeEvent() is the way to go. Not clear to me if you can trigger this based on an output changing state, or if it has to be an input. Not able to find an example where this triggers on an arbitrary js event (although seems like it should be doable ...)
This looks like a good option for js -> R -> js rendering. Can be used to trigger an update in the files table once a new file is added.
And this might be the way to add content after the initial loads. Can be used to add the file upload buttons after the explorer Shiny output is validated.
Simple implementation of part #1 ("Once the files tab is drawn server.R adds the buttons to the tab") done like so:
Sys.sleep(1)
insertUI(
selector="div.explorer div.instructions.section",
where="beforeEnd",
ui=fileInput('datafile','Upload a file',accept = c('.sas7bdat','.csv'))
)
Need to add in some of bootstrap's CSS to make it look decent and would be better to trigger on a call back, but all things considered, waiting for a second works reasonably well ...
One is basically good to go. Going to create separate issues for part 2 below:
Alas, bumping from v0.2.0. Sys.sleep()
didn't play nice with interactivity. Seems like we probably need to use a more typical javascript event workflow to do this. Will tackle in a future version.
Add inputs to the
.instructions
section of the files tab that allow users to add files to the codebook.Files
tabFiles Tab