Skip to content

[Bug]: HTMLSelect.shinyInput input initially gives NULL #94

Open
@dereckmezquita

Description

@dereckmezquita

Guidelines

  • I agree to follow this project's Contributing Guidelines.

Project Version

0.2.0

Platform and OS Version

macOS 13.1

Existing Issues

No response

What happened?

When I use shiny.blueprint$HTMLSelect.shinyInput on initial start of my app the input is always NULL initially and then gets set.

This doesn't happen if I use the default shiny$selectInput, this works well with no problems.

In order to avoid errors I have to do a check inside my shiny$reactive if null return default value, else return input value.

# sideBar.R
box::use(shiny)
box::use(shiny.blueprint)

supp_plot_options <- lapply(c("RSI", "MACD", "Volume"), \(opt) {
    return(list(value = opt, label = opt))
})

#' @export
ui <- function(id, width = 2) {
    ns <- shiny$NS(id)
    shiny$sidebarPanel(
        shiny$tags$h4("Side bar"),
        shiny.blueprint$HTMLSelect.shinyInput(
            inputId = ns("select_currency"),
            options = c("BTC/USDT", "XMR/USDT"),
            value = "BTC/USDT"
        ),
        shiny.blueprint$HTMLSelect.shinyInput(
            inputId = ns("supplementary_plot"),
            options = supp_plot_options,
            value = "RSI"
        ),
        width = width
    )
}

#' @export
server <- function(id, live_data) {
    shiny$moduleServer(id, \(input, output, session) {
        supplementary_plot <- shiny$reactive({
            if (is.null(input$supplementary_plot)) {
                return(supp_plot_options[[1]]$value)
            }

            return(input$supplementary_plot)
        })

        shiny::observe(print(input$supplementary_plot))

        currency <- shiny$reactive({
            input$select_currency
        })

        return(list(
            currency = currency,
            supplementary_plot = supplementary_plot
        ))
    })
}
r$> shiny::runApp(
        port = 3003,
        launch.browser = FALSE
    )

Listening on http://127.0.0.1:3003
NULL
[1] "RSI"

And if I don't do the is.null check I get this kind of error. Note I'm trying to use this input for other parts of my app this is why I need the values.

...
        supplementary_plot <- shiny$reactive({
            # if (is.null(input$supplementary_plot)) {
            #     return(supp_plot_options[[1]]$value)
            # }

            return(input$supplementary_plot)
        })
...
r$> shiny::runApp(
        port = 3003,
        launch.browser = FALSE
    )

Listening on http://127.0.0.1:3003
NULL
Warning: Error in switch: EXPR must be a length 1 vector
  168: renderPlot [/Users/work/Coding/projects/finance/R-kucoin-trading-bot-playground/R-kucoin-trading-bot/app/view/plot_panel.R#29]
  166: func [/private/var/folders/w4/_q0hj0997zqdg4zllxpwmq0r0000gp/T/RtmpET6HVq/R.INSTALLb54312084973/shiny/R/utils.R#1447]
  126: drawPlot [/private/var/folders/w4/_q0hj0997zqdg4zllxpwmq0r0000gp/T/RtmpET6HVq/R.INSTALLb54312084973/shiny/R/render-plot.R#254]
  112: <reactive:plotObj> [/private/var/folders/w4/_q0hj0997zqdg4zllxpwmq0r0000gp/T/RtmpET6HVq/R.INSTALLb54312084973/shiny/R/render-plot.R#125]
   96: drawReactive [/private/var/folders/w4/_q0hj0997zqdg4zllxpwmq0r0000gp/T/RtmpET6HVq/R.INSTALLb54312084973/shiny/R/reactives.R#870]
   83: renderFunc [/private/var/folders/w4/_q0hj0997zqdg4zllxpwmq0r0000gp/T/RtmpET6HVq/R.INSTALLb54312084973/shiny/R/render-plot.R#164]
   82: output$app-plot_panel-supplementary_plot [/private/var/folders/w4/_q0hj0997zqdg4zllxpwmq0r0000gp/T/RtmpET6HVq/R.INSTALLb54312084973/shiny/R/shinywrappers.R#133]
    1: shiny::runApp [/private/var/folders/w4/_q0hj0997zqdg4zllxpwmq0r0000gp/T/RtmpET6HVq/R.INSTALLb54312084973/shiny/R/runapp.R#388]
[1] "RSI"
^C


r$>

Steps to reproduce

Use my module in an app that uses the value returned from it.

Expected behavior

I expect the default value to be set by shiny.blueprint value argument.

Attachments

No response

Screenshots or Videos

No response

Additional Information

Thank you very much for this package very nice, I love blueprint for my nextjs projects, will definitely use it for shiny.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions