Skip to content

Commit 33dffd8

Browse files
committed
Implement default selection for filter_selectFixes #35
1 parent feaf86b commit 33dffd8

8 files changed

Lines changed: 44 additions & 13 deletions

File tree

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: crosstalk
22
Type: Package
33
Title: Inter-Widget Interactivity for HTML Widgets
4-
Version: 1.0.1
4+
Version: 1.0.1.9000
55
Authors@R: c(
66
person("Joe", "Cheng", role = c("aut", "cre"), email = "joe@rstudio.com"),
77
person(family = "RStudio", role = "cph"),

NEWS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## crosstalk 1.0.1.9000
2+
3+
* Add `selected` parameter to `filter_select`, to specify default selection.
4+
15
## crosstalk 1.0.1
26

37
* `selection_factor` behavior was no longer correct with ggplot2 2.2.0, which

R/controls.R

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ ionrangesliderLibs <- function() {
5959
)
6060
}
6161

62-
makeGroupOptions <- function(sharedData, group, allLevels) {
62+
makeGroupOptions <- function(sharedData, group, allLevels, selected = NULL) {
6363
df <- sharedData$data(
6464
withSelection = FALSE,
6565
withFilter = FALSE,
@@ -89,10 +89,23 @@ makeGroupOptions <- function(sharedData, group, allLevels) {
8989

9090
lvls_str <- as.character(lvls)
9191

92+
if (!is.null(selected)) {
93+
selected <- unique(as.character(selected))
94+
present <- selected %in% lvls_str
95+
if (any(!present)) {
96+
warning(call. = FALSE,
97+
"Default selection was specified that was not present in the data [",
98+
paste0("'", selected[!present], "'", collapse = ","),
99+
"]"
100+
)
101+
selected <- selected[present]
102+
}
103+
}
92104
options <- list(
93105
items = data.frame(value = lvls_str, label = lvls_str, stringsAsFactors = FALSE),
94106
map = setNames(vals, lvls_str),
95-
group = sharedData$groupName()
107+
group = sharedData$groupName(),
108+
selected = selected
96109
)
97110

98111
options
@@ -114,6 +127,7 @@ makeGroupOptions <- function(sharedData, group, allLevels) {
114127
#' present in the data?
115128
#' @param multiple Can multiple values be selected?
116129
#' @param columns Number of columns the options should be arranged into.
130+
#' @param selected Default value(s) to be selected.
117131
#'
118132
#' @examples
119133
#' ## Only run examples in interactive R sessions
@@ -126,9 +140,16 @@ makeGroupOptions <- function(sharedData, group, allLevels) {
126140
#'
127141
#' @export
128142
filter_select <- function(id, label, sharedData, group, allLevels = FALSE,
129-
multiple = TRUE) {
143+
multiple = TRUE, selected = NULL) {
130144

131-
options <- makeGroupOptions(sharedData, group, allLevels)
145+
if (!multiple && length(selected) > 1) {
146+
warning(call. = FALSE, "filter_select called with multiple=FALSE ",
147+
"but more than one selected value; only the first element will ",
148+
"be used")
149+
selected <- selected[[1]]
150+
}
151+
152+
options <- makeGroupOptions(sharedData, group, allLevels, selected)
132153

133154
htmltools::browsable(attachDependencies(
134155
tags$div(id = id, class = "form-group crosstalk-input-select crosstalk-input",

inst/www/js/crosstalk.js

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

inst/www/js/crosstalk.js.map

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

inst/www/js/crosstalk.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

inst/www/js/crosstalk.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

javascript/src/input_selectize.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ input.register({
1818
let items = util.dataframeToD3(data.items);
1919
let opts = {
2020
options: first.concat(items),
21+
items: data.selected,
2122
valueField: "value",
2223
labelField: "label",
2324
searchField: "label"
@@ -30,7 +31,7 @@ input.register({
3031
let ctHandle = new FilterHandle(data.group);
3132

3233
let lastKnownKeys;
33-
selectize.on("change", function() {
34+
function updateFilter() {
3435
if (selectize.items.length === 0) {
3536
lastKnownKeys = null;
3637
ctHandle.clear();
@@ -46,7 +47,9 @@ input.register({
4647
lastKnownKeys = keyArray;
4748
ctHandle.set(keyArray);
4849
}
49-
});
50+
}
51+
selectize.on("change", updateFilter);
52+
updateFilter();
5053

5154
return {
5255
suspend: function() {

0 commit comments

Comments
 (0)