--- title: "Getting started with shinyChatR" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Getting started with shinyChatR} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` ```{r setup} library(shinyChatR) ``` # Database connection for storing chat data If you are using a database connection to store the chat messages, you will need to initialize the database table before using the chat module. The following example shows an example how to do this using the `DBI` and `RSQLite` packages. Replace `db_file` with the path to your database file. The data will be saved in the table `chat_data`. ```{r} library(DBI) library(RSQLite) db_file <- "path_to_your_database_file" conn <- dbConnect(RSQLite::SQLite(), db_file) # initiate chat table df <- data.frame(rowid = numeric(), user = character(), text = character(), time = double()) dbWriteTable(conn, "chat_data", df) ``` Now you can add the chat module to your app: ```{r} ui <- fluidPage( chat_ui("test") ) server <- function(input, output, server) { chat_server("test", db_connection = conn, db_table_name = "chat_data", chat_user = "user2") } # Run the application shinyApp(ui = ui, server = server) ``` ## Reactive user name This example show how the user name can be stored in a reactive. Here the user specifies the name in a textInput field. ```{r} ui <- fluidPage( fluidRow( column(width = 6, # Here the user specifies the user name textInput("user", "Enter User Name"), br(), # add chat ui elements chat_ui("test_reactive"), ) ) ) ``` Then, in the server the user name is save in the reactive `user_rv`. This reactive can be passed into the argument `chat_user`. ```{r} server <- function(input, output, server) { # save user name in reactive user_rv <- reactive({input$user}) # corresponding server part for id test_reactive chat_server("test_reactive", db_connection = conn, db_table_name = "chat_data", chat_user = user_rv ) } ``` # RDS file for storing chat data Also the rds file first needs to be initialized. ```{r} df <- data.frame(rowid = numeric(), user = character(), text = character(), time = double()) test_rds <- "path_to_rds_file.rds" saveRDS(df, test_rds) ``` Now you can add the chat module to your app: ```{r} test_rds <- "path_to_rds_file.rds" ui <- fluidPage( chat_ui("test2") ) server <- function(input, output, server) { chat_server("test2", rds_path = test_rds, chat_user = "user2") } # Run the application shinyApp(ui = ui, server = server) ``` # Update the textInput The following example shows how to use updateChatTextInput to update the textInput field from outside of the module. ```{r} # store db as tempfile. Select different path to store db locally tempdb <- file.path(tempdir(), "db") con <- dbConnect(RSQLite::SQLite(), tempdb) ui <- fluidPage( fluidRow( column(width = 6, # add chat ui elements chat_ui("test1"), ) ), br(), fluidRow( column(width = 6, # add button to update text value actionButton("set_value_abc", "Set text to 'abc'"), ) ), ) server <- function(input, output, server) { # corresponding server part for id test1 chat_server("test1", db_connection = con, db_table_name = "chat_data", chat_user = "user1" ) observeEvent(input$set_value_abc,{ updateChatTextInput(id = "test1", value = "abc") }) } # Run the application shinyApp(ui = ui, server = server) ```