# Set backend operator
in_closed_range <- function(field, bounds) {
field >= bounds[1] & field <= bounds[2]
}
queryBuilder::setQueryOperators(
within = queryBuilder::queryOperator(in_closed_range)
)
queryBuilder::listQueryOperators()
# Map backend operator to the user interface one
mapOperator(
name = "within",
nb_inputs = 2, # take value with 2 input controllers
multiple = FALSE, # verify if only single value per controller is set
apply_to = c("numeric", "Date", "logical") # apply operator to selected field types
)
listMappedOperators()
filters = list(
queryFilter(
"Sepal.Length", operators = c("within", "less"),
type = "numeric", values = range(iris$Sepal.Length)
),
# no operators set, means take all for "character"
queryFilter("Species", type = "character", values = levels(iris$Species))
)
ui <- shiny::fluidPage(
title = title,
queryBuilderInput(
"qb",
filters = filters
),
shiny::verbatimTextOutput("expr")
)
server <- function(input, output, session) {
output$expr <- shiny::renderPrint({
print(queryToExpr(input$qb))
})
}
if (interactive()) {
shiny::shinyApp(ui, server)
}
Run the code above in your browser using DataLab