## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ## ----setup-------------------------------------------------------------------- # library(linkeR) # library(shiny) # library(leaflet) # library(DT) ## ----custom-leaflet----------------------------------------------------------- # server <- function(input, output, session) { # # business_data <- reactive({ # # Your business data here # }) # # output$business_map <- renderLeaflet({ # # Render your map (no popup needed - custom handler will create it) # leaflet(business_data()) %>% # addTiles() %>% # addCircleMarkers( # lng = ~longitude, # lat = ~latitude, # layerId = ~business_id, # radius = ~sqrt(revenue/1000) + 3 # ) # }) # # output$business_table <- renderDT({ # # Your table rendering code # }) # # # Link with custom leaflet behavior # link_plots( # session, # business_map = business_data, # business_table = business_data, # shared_id_column = "business_id", # # # Custom handler for leaflet clicks # leaflet_click_handler = function(map_proxy, selected_data, session) { # if (!is.null(selected_data)) { # # Create rich popup # popup_content <- paste0( # "
", # "

", selected_data$name, "

", # "

Revenue: $", format(selected_data$revenue, big.mark = ","), "

", # "

Category: ", selected_data$category, "

", # "

Rating: ", selected_data$rating, "/5.0 ⭐

", # "
" # ) # # # Custom zoom and popup # map_proxy %>% # leaflet::setView( # lng = selected_data$longitude, # lat = selected_data$latitude, # zoom = 15 # Custom zoom level # ) %>% # leaflet::clearPopups() %>% # leaflet::addPopups( # lng = selected_data$longitude, # lat = selected_data$latitude, # popup = popup_content # ) # } else { # # Handle deselection # map_proxy %>% leaflet::clearPopups() # } # } # ) # } ## ----custom-dt---------------------------------------------------------------- # link_plots( # session, # business_map = business_data, # business_table = business_data, # shared_id_column = "business_id", # # # Custom handler for table clicks # dt_click_handler = function(dt_proxy, selected_data, session) { # if (!is.null(selected_data)) { # # Find the row and select it # current_data <- business_data() # row_idx <- which(current_data$business_id == selected_data$business_id) # # if (length(row_idx) > 0) { # # Select and scroll to row # DT::selectRows(dt_proxy, selected = row_idx[1]) # # # Optional: scroll to the row # page_size <- 10 # Your page size # target_page <- ceiling(row_idx[1] / page_size) # DT::selectPage(dt_proxy, target_page) # # # Show additional info # showNotification( # paste("Selected:", selected_data$name, "- Revenue: $", # format(selected_data$revenue, big.mark = ",")), # type = "message", # duration = 3 # ) # } # } else { # # Handle deselection # DT::selectRows(dt_proxy, selected = integer(0)) # } # } # ) ## ----global-callback---------------------------------------------------------- # link_plots( # session, # business_map = business_data, # business_table = business_data, # shared_id_column = "business_id", # # # Global callback for all selection changes # on_selection_change = function(selected_id, selected_data, source_id, session) { # if (!is.null(selected_data)) { # # Update other UI elements # output$selected_business_info <- renderText({ # paste0( # "Selected: ", selected_data$name, "\n", # "Source: ", source_id, "\n", # "Revenue: $", format(selected_data$revenue, big.mark = ",") # ) # }) # # # Log for analytics # cat("Selection event:", selected_id, "from", source_id, "\n") # # # Update other reactive values # current_selection(selected_data) # } else { # # Handle deselection # output$selected_business_info <- renderText("No selection") # current_selection(NULL) # } # } # ) ## ----conditional-------------------------------------------------------------- # leaflet_click_handler = function(map_proxy, selected_data, session) { # if (!is.null(selected_data)) { # # Different behavior based on data properties # if (selected_data$risk_level == "High") { # # Show warning for high-risk items # showModal(modalDialog( # title = "High Risk Alert", # paste("This location has high risk level:", selected_data$name), # easyClose = TRUE # )) # } # # # Color popup based on risk # popup_color <- switch(selected_data$risk_level, # "Low" = "#d4edda", # "Medium" = "#fff3cd", # "High" = "#f8d7da" # ) # # popup_content <- paste0( # "
", # "

", selected_data$name, "

", # "

Risk Level: ", selected_data$risk_level, "

", # "
" # ) # # map_proxy %>% # leaflet::setView(lng = selected_data$longitude, lat = selected_data$latitude, zoom = 13) %>% # leaflet::clearPopups() %>% # leaflet::addPopups( # lng = selected_data$longitude, # lat = selected_data$latitude, # popup = popup_content # ) # } # }