diff --git a/R/rpivotAddin.R b/R/rpivotAddin.R new file mode 100644 index 0000000..e93c8dd --- /dev/null +++ b/R/rpivotAddin.R @@ -0,0 +1,51 @@ +getDataFrames = function() +{ + if ((length(ls()) == 0) | (length(sapply(.GlobalEnv, is.data.frame)) == 0) | (any(sapply(.GlobalEnv, is.data.frame))==F)) + data(iris) + return(names(which(sapply(.GlobalEnv, is.data.frame)))) +} + +rpivotAddin <- function() { + library(shiny) + library(rpivotTable) + library(miniUI) + library(rstudioapi) + + ui <- miniPage( + + # css hack to provide space for a select input in the gadgetTitleBar + tags$head(tags$style(HTML(" + .gadget-title .shiny-input-container { + position: relative; + height: 30px; + margin: 6px 10px 0; + z-index: 10; + }"))), + + gadgetTitleBar("Pivot Table Gadget", + left=miniTitleBarButton("done", "Done", primary=T), + right=selectInput("dataset", NULL, choices = getDataFrames())), + + miniContentPanel( + rpivotTableOutput("mypivot") + ) + ) # minipage + + server <- function(input, output, session) { + + output$mypivot <- renderRpivotTable({ + rpivotTable(getSelectedDF()) + }) + + observeEvent(input$done, { + stopApp(TRUE) + }) + + getSelectedDF <- reactive({ + eval(parse(text = input$dataset)) + }) + + } # server + + runGadget(shinyApp(ui, server), viewer = paneViewer()) +} diff --git a/inst/htmlwidgets/rpivotTable.js b/inst/htmlwidgets/rpivotTable.js index ef53cc3..531a499 100755 --- a/inst/htmlwidgets/rpivotTable.js +++ b/inst/htmlwidgets/rpivotTable.js @@ -27,6 +27,10 @@ HTMLWidgets.widget({ x.params.sorters = eval("("+x.params.sorters[0]+")") } } + + if (typeof x.params.onRefresh != "undefined") { + x.params.onRefresh = x.params.onRefresh[0]; + } $('#'+el.id).pivotUI( x.data, x.params, true diff --git a/inst/rstudio/addins.dcf b/inst/rstudio/addins.dcf new file mode 100644 index 0000000..343519d --- /dev/null +++ b/inst/rstudio/addins.dcf @@ -0,0 +1,4 @@ +Name: rpivotTable +Description: Pivot Table +Binding: rpivotAddin +Interactive: true