Giter Club home page Giter Club logo

cookies's Introduction

cookies

Lifecycle: experimental CRAN status Codecov test coverage R-CMD-check

Cookies are name-value pairs that are saved in a user’s browser by a website. Cookies allow websites to persist information about the user and their use of the website. The goal of {cookies} it to make it as easy as possible to use cookies in shiny apps.

Installation

Install the released version of {cookies} from CRAN:

install.packages("cookies")

Or install the development version of {cookies} from GitHub with:

# install.packages("pak")
pak::pak("shinyworks/cookies")

Use Cases

Several potential use cases motivated the creation of this package.

Saving Settings

In general, cookies can be used to save some sort of setting about the user. This allows you to restore their state (or otherwise know something about that user) the next time they load your app.

Here we’ll use a simple example to demonstrate this concept.

library(cookies)
library(shiny)

# Wrap your ui with add_cookie_handlers() to enable cookies.
ui <- add_cookie_handlers(
  fluidPage(
    titlePanel("A Simple App"),
    fluidRow(
      sliderInput(
        "number_selector",
        label = paste(
          "Select a number.",
          "This selector sets the cookie value.",
          "It also initializes with the cookie value.",
          "Refresh to see it remembered.",
          sep = "\n"
        ),
        min = 1,
        max = 10,
        value = 1
      ),
      sliderInput(
        "number_selector_no_cookie",
        label = paste(
          "Select a number.",
          "This one is not connected to the cookie.",
          "When you refresh, it will always initialize to 1.",
          sep = "\n"
        ),
        min = 1,
        max = 10,
        value = 1
      )
    )
  )
)

server <- function(input, output, session) {
  # When the value changes, set a cookie.
  observeEvent(
    input$number_selector,
    {
      set_cookie(
        cookie_name = "selected_number",
        cookie_value = input$number_selector
      )
    }
  )

  # Initialize the top slider from any cookies that come in at the start.
  observeEvent(
    get_cookie("selected_number"),
    updateSliderInput(
      inputId = "number_selector",
      value = get_cookie("selected_number")
    ),
    once = TRUE
  )
}

shinyApp(
  ui,
  server,
  # Cookies only work in an actual browser.
  options = list(
    launch.browser = TRUE
  )
)

If you run that code, make selections, and refresh your browser, you should see that the first slider is remembered, while the second is not.

Other Use Cases

  • Authentication: This was the motivating use case for this package. You can see a working example of how this can be implemented in {shinyslack}.
  • Last visit: You could log a datestamp when the page loads (and transfer any existing value to another variable or another cookie) to, for example, notify users about new features since their last visit.
  • Many others: If you have a use case but you aren’t certain how to implement it, please open an issue!

Code of Conduct

Please note that the cookies project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

cookies's People

Contributors

jonthegeek avatar jnolis avatar imgbot[bot] avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.