-
Notifications
You must be signed in to change notification settings - Fork 80
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
filter column with 2 levels #384
Comments
According to ChatGPT we should apply custom filter method to ensure that the filtering is based on exact matches (only rows with exact matches to the filter value are returned), which should resolve the issue with overlapping substrings like 'HP' and 'NHP' or 'AB' and 'CAB'.
It seems to work well but Greg's opinion or someone's from {reactable} community experienced in JS is needed !
|
Thank you for your accurate response.
Le ven. 26 juil. 2024 à 13:17, Radovan Miletić ***@***.***> a
écrit :
… According to ChatGPT we should apply custom filter method to ensure that
the filtering is based on exact matches (only rows with exact matches to
the filter value are returned), which should resolve the issue with
overlapping substrings like 'HP' and 'NHP' or 'AB' and 'CAB'.
filterMethod = JS("function(rows, columnId, filterValue) {
return rows.filter(function(row) {
if (filterValue === '') {
return true;
}
return row.values[columnId] === filterValue;
});
}")
It seems to work well but Greg's opinion or someone's from {reactable}
community experienced in JS is needed !
library(reactable)
library(htmltools)
mytable <- data.frame(group = c(rep('AB', 26), rep('CAB', 26)), var1 = rep(LETTERS, 2), rnorm(52, mean = 30, sd = 10))
htmltools::browsable(
tagList(
reactable(mytable,
searchable = TRUE,
highlight = TRUE,
bordered = TRUE,
rowStyle = list(cursor = "pointer"),
defaultPageSize = 5,
striped = TRUE,
wrap = FALSE,
filterable = TRUE,
columns = list(
group = colDef(
filterInput = function(values, name) {
tags$select(
id = sprintf("filter-%s", name),
onchange = sprintf("Reactable.setFilter('mytab', '%s', event.target.value || undefined)", name),
tags$option(value = "", "All"),
lapply(sort(unique(values)), function(value) {
tags$option(value = value, value)
}),
"aria-label" = sprintf("Filter %s", name),
style = "width: 100%; height: 28px;"
)
},
filterMethod = JS("function(rows, columnId, filterValue) {
return rows.filter(function(row) {
if (filterValue === '') {
return true;
}
return row.values[columnId] === filterValue;
});
}")
)
),
elementId = "mytab"
)
)
)
—
Reply to this email directly, view it on GitHub
<#384 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ADVLQ2AKMNRPUBUAA5XYC6DZOIV5ZAVCNFSM6AAAAABLKTQPSGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENJSGU2DGNBYGM>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
@radovan-miletic Thanks for answering. Yep, the default filter method is a case-insensitive string match like |
Added an example in 2b69b49 |
I use the following code to filter 4 columns:
It work for every columns but not for 1 column which only have 2 levels. When I choose the first level, It has the same result as "All".
Is it a known bug ?
Edit:
Here, a simple code with this bug
The text was updated successfully, but these errors were encountered: