diff --git a/app.R b/app.R index cf33324..becd193 100644 --- a/app.R +++ b/app.R @@ -18,10 +18,7 @@ library(lwgeom) # needed to use sf::st_distance() library(rnaturalearth) # https://github.com/r-spatial/sf/issues/1762 -sf_use_s2(FALSE) - -# Apply the app style to ggplot2 plots -thematic::thematic_shiny() +sf::sf_use_s2(FALSE) # COUNTRIES @@ -96,18 +93,19 @@ link_slack <- tags$a(shiny::icon("slack"), target = "_blank") -# Accordions -accordion_left <- accordion( +# UI +# accordion_left +accordion_left <- bslib::accordion( open = 'User options', multiple = TRUE, height="100%", id = 'sidebar_accordion', - accordion_panel( + bslib::accordion_panel( id = 'Site metadata', title = 'Site metadata', DT::DTOutput('metadata')), - accordion_panel( + bslib::accordion_panel( id = 'Map options', title = 'Map options', shinyWidgets::materialSwitch( @@ -115,334 +113,347 @@ accordion_left <- accordion( label = "remove HYDROlakes layer", status = "primary" )), - accordion_panel( + bslib::accordion_panel( id = 'User options', title = 'User options', - prettyRadioButtons( # or prettyRadioButtons + shinyWidgets::prettyRadioButtons( inputId = "modify", label = "Is this site the correct lake polygon in NeotomaDB?", choices = c("Yes", "No"), outline = TRUE, plain = TRUE, status = "primary", - icon = icon("check") + icon = shiny::icon("check") ), - uiOutput('dynamicUI') + shiny::uiOutput('dynamicUI') )) -accordion_center <- accordion( +# accordion_center +accordion_center <- bslib::accordion( id = 'map_accordion', open = 'How to use this app?', height="100%", - accordion_panel( + bslib::accordion_panel( id = "Map", title = "Map of the site area", class = 'p-0', shinycssloaders::withSpinner( - leafletOutput('map', - height = 620), + leaflet::leafletOutput('map', + height = 620), type = 2, - color = 'darkgreen', + color = '#1b3964', color.background = 'white')), - accordion_panel( + bslib::accordion_panel( id = "Comments", title = "User decision", - layout_columns( - textOutput('action'), - tags$div( - textAreaInput('notes', - label = 'Comments:'), - downloadButton('submit', 'Submit')))), - accordion_panel( + bslib::layout_columns( + shiny::textOutput('action'), + shiny::tags$div( + shiny::textAreaInput('notes', + label = 'Comments:'), + shiny::downloadButton('submit', 'Submit')))), + bslib::accordion_panel( id = "help", title = "How to use this app?", - tags$img(src = 'img-app.png', - height = 'auto', - width = '100%'), - includeMarkdown("help.md"), - tags$img(src = 'img-app-end.png', - height = 'auto', - width = '100%'))) - -accordion_right <- accordion( + shiny::tags$img(src = "img-app.png", + height = 'auto', + width = '100%'), + shiny::includeMarkdown("help.md"), + shiny::tags$img(src = "img-app-end.png", + height = 'auto', + width = '100%'))) + +# accordion_right +accordion_right <- bslib::accordion( id = "lakes_or_polygons", height="100%", open = FALSE, - accordion_panel( + bslib::accordion_panel( id = "lakes", title = "Hydrolakes DB", - plotOutput('hydrolake', - height = 190), - DT::DTOutput('lakeinfo'), - textOutput('dist', - inline = TRUE), - textOutput('countryinfo'), - plotOutput('country', - height = 190) + shiny::plotOutput('hydrolake', + height = 190), + DT::DTOutput('lakeinfo'), + shiny::textOutput('dist', + inline = TRUE), + shiny::textOutput('countryinfo'), + shiny::plotOutput('country', + height = 190) ), - accordion_panel( + bslib::accordion_panel( id = "polygon", title = "Polygon" , - plotOutput('polygon_new'), + shiny::plotOutput('polygon_new'), DT::DTOutput('polyinfo'), )) # UI - -ui <- bslib::page_navbar( +ui = bslib::page_navbar( title = "NeotomaDB", theme = bslib::bs_theme(version = 5, bootswatch = "minty", navbar_bg = "#1b3964", primary = "#1b3964", - base_font = font_google("Raleway", - wght = "400"), - heading_font = font_google("Raleway", - wght = "200")), + base_font = bslib::font_google("Raleway", + wght = "400"), + heading_font = bslib::font_google("Raleway", + wght = "200")), bslib::nav_panel(title = "Lakes", shinyFeedback::useShinyFeedback(), - bslib::layout_columns( - col_widths = c(9, 3), - row_heights = list("auto", 1), - bslib::layout_sidebar(class = "p-0", - sidebar = sidebar(width = 300, - bg = 'white', - textInput('neositeid', - 'NeotomaDB', - placeholder = "Insert siteID"), - tooltip( - shiny::actionButton('search', 'Search!'), - paste("Check sitesid in the webpage.", - "For this demo you can use site 9606 as an example")), -accordion_left), -accordion_center), -accordion_right)), -nav_spacer(), -nav_menu( - title = "Links", - align = "right", - nav_item(link_neotoma), - nav_item(link_slack) -)) - -server <- function(input, output, session) { - - - observeEvent(input$search, { - hideFeedback("neositeid") + bslib::layout_columns( + col_widths = c(9, 3), + row_heights = list("auto", 1), + bslib::layout_sidebar(class = "p-0", + sidebar = bslib::sidebar( + width = 300, + bg = 'white', + shiny::textInput( + 'neositeid', + 'NeotomaDB', + placeholder = "Insert siteID"), + bslib::tooltip( + shiny::actionButton('search', + 'Search!'), + paste("Check sitesid in the webpage.", + "For this demo you can use site 9606", + "as an example")), + accordion_left), + accordion_center), + accordion_right)), + bslib::nav_spacer(), + bslib::nav_menu( + title = "Links", + align = "right", + bslib::nav_item(link_neotoma), + bslib::nav_item(link_slack) + )) + +server = function(input, output, session) { + + + shiny::observeEvent(input$search, { + shinyFeedback::hideFeedback("neositeid") if (!(input$neositeid %in% unique(sites_country$siteid))){ - feedbackDanger( + shinyFeedback::feedbackDanger( inputId = "neositeid", show = TRUE, text = "Please select a valid siteId" )} - }) -# Select site from the database - neosites_data <- eventReactive(input$search,{ + }) + # Select site from the database + neosites_data <- shiny::eventReactive(input$search,{ sites_country |> - dplyr::mutate(siteid = as.character(siteid)) |> + dplyr::mutate(siteid = as.character(siteid)) |> dplyr::filter(siteid %in% as.character(input$neositeid)) |> - st_transform(3857) + sf::st_transform(3857) }) -# Keep the closest lakes (50 km) to NeotomaDb selected point/polygon - lake_data <- eventReactive(input$search,{ + # Keep the closest lakes (50 km) to NeotomaDb selected point/polygon + lake_data <- shiny::eventReactive(input$search,{ - lakes_country[st_is_within_distance(neosites_data(), - lakes_country, - dist = 50000)[[1]],] |> - st_set_crs(3857) + lakes_country[sf::st_is_within_distance(neosites_data(), + lakes_country, + dist = 50000)[[1]],] |> + sf::st_set_crs(3857) }) # Map - output$map <- renderLeaflet({ - - # Creation of a basic map - lm = leaflet::leaflet() |> - leaflet::addTiles(group = "OpenStreetMap") |> - leaflet::addProviderTiles("Esri.WorldImagery", - group = "Esri.WorldImagery", - options = providerTileOptions(attribution = paste('Tiles', - '© Esri — Source: Esri, i-cubed, USDA, USGS,', - 'AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP,', - 'and the GIS User Community - Powered by Esri'))) |> - leaflet::addLayersControl( - baseGroups = c("EsriWorldImagery", "OpenStreetMap"), - options = layersControlOptions(collapsed = FALSE) - ) |> - leaflet::addMeasure(primaryLengthUnit="kilometers", - secondaryLengthUnit="kilometers") - - - neosites_data = neosites_data() |> st_transform(4326) - lake_data = lake_data() |> st_transform(4326) - - # To zoom in the map - bbx = st_bbox(st_union(neosites_data, lake_data)) - - # The NeotomaDB site could be a point or a polygon - if(sf::st_is(neosites_data(), "POINT")){ - - lm = lm |> - leaflet::addPolygons(data = lake_data, - group = 'lakes', - layerId = ~Hylak_id, # https://rstudio.github.io/leaflet/showhide.html - weight = 5, - color = "blue", - fillColor = "lightblue") |> # hydrolakes - leaflet::addMarkers(data = neosites_data) |> # neotoma sites - fitBounds(lng1 = bbx$xmin[[1]], - lat1= bbx$ymin[[1]], - lng2 = bbx$xmax[[1]], - lat2 = bbx$ymax[[1]]) |> - leafem::addMouseCoordinates() - - }else{ - - lm = lm |> - leaflet::addPolygons(data = lake_data, - group = 'lakes', - layerId = ~Hylak_id, # https://rstudio.github.io/leaflet/showhide.html - weight = 5, - color = "blue", - fillColor = "lightblue") |> # hydrolakes - leaflet::addPolygons(data = neosites_data, - weight = 5, - color = "darkorange", - fillColor = "orange") |> # neotoma sites - leaflet::fitBounds(lng1 = bbx$xmin[[1]], - lat1= bbx$ymin[[1]], - lng2 = bbx$xmax[[1]], - lat2 = bbx$ymax[[1]]) |> - leafem::addMouseCoordinates() - - } - - - # Add toolbar to draw polygons if this is requested by the user - if(!is.null(input$nooptions) && input$nooptions == "Create lake polygon"){ - - lm |> - leaflet.extras::addDrawToolbar(markerOptions = FALSE, - circleMarkerOptions = FALSE, - polylineOptions = FALSE, - circleOptions = FALSE, - rectangleOptions = FALSE, - singleFeature = TRUE) - - }else{ lm } + output$map <- leaflet::renderLeaflet({ + + # Creation of a basic map + lm <- leaflet::leaflet() |> + leaflet::addTiles(group = "OpenStreetMap") |> + leaflet::addProviderTiles("Esri.WorldImagery", + group = "Esri.WorldImagery", + options = leaflet::providerTileOptions(attribution = paste( + 'Tiles', + '© Esri — Source: Esri, i-cubed, USDA, USGS,', + 'AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP,', + 'and the GIS User Community - Powered by Esri'))) |> + leaflet::addLayersControl( + baseGroups = c("EsriWorldImagery", + "OpenStreetMap"), + options = leaflet::layersControlOptions(collapsed = FALSE) + ) |> + leaflet::addMeasure(primaryLengthUnit="kilometers", + secondaryLengthUnit="kilometers") + + + neosites_data = neosites_data() |> + sf::st_transform(4326) + lake_data = lake_data() |> + sf::st_transform(4326) + + # To zoom in the map + bbx = sf::st_bbox(sf::st_union(neosites_data, + lake_data)) + + # The NeotomaDB site could be a point or a polygon + if(sf::st_is(neosites_data(), "POINT")){ + + lm <- lm |> + leaflet::addPolygons(data = lake_data, + group = 'lakes', + layerId = ~Hylak_id, # https://rstudio.github.io/leaflet/showhide.html + weight = 5, + color = "blue", + fillColor = "lightblue") |> # hydrolakes + leaflet::addMarkers(data = neosites_data) |> # neotoma sites + leaflet::fitBounds(lng1 = bbx$xmin[[1]], + lat1= bbx$ymin[[1]], + lng2 = bbx$xmax[[1]], + lat2 = bbx$ymax[[1]]) |> + leafem::addMouseCoordinates() - }) + }else{ + lm <- lm |> + leaflet::addPolygons(data = lake_data, + group = 'lakes', + layerId = ~Hylak_id, # https://rstudio.github.io/leaflet/showhide.html + weight = 5, + color = "blue", + fillColor = "lightblue") |> # hydrolakes + leaflet::addPolygons(data = neosites_data, + weight = 5, + color = "#A5243D", + fillColor = "pink") |> # neotoma sites + leaflet::fitBounds(lng1 = bbx$xmin[[1]], + lat1= bbx$ymin[[1]], + lng2 = bbx$xmax[[1]], + lat2 = bbx$ymax[[1]]) |> + leafem::addMouseCoordinates() -# The user can request to hide the lakes layer - observeEvent(input$removelakes, { + } - proxy <- leafletProxy('map') - print(input$nooptions) + # Add toolbar to draw polygons if this is requested by the user + if(!is.null(input$nooptions) && input$nooptions == "Create lake polygon"){ - if(input$removelakes == TRUE){ - proxy |> hideGroup('lakes') - }else{ - proxy |> showGroup('lakes')} - } + lm |> + leaflet.extras::addDrawToolbar(markerOptions = FALSE, + circleMarkerOptions = FALSE, + polylineOptions = FALSE, + circleOptions = FALSE, + rectangleOptions = FALSE, + singleFeature = TRUE) + + }else{ lm } + + }) + + + # The user can request to hide the lakes layer + shiny::observeEvent(input$removelakes, { + + proxy <- leaflet::leafletProxy('map') + + if(input$removelakes == TRUE){ + proxy |> leaflet::hideGroup('lakes') + }else{ + proxy |> leaflet::showGroup('lakes')} + } ) # The user can request to hide the lakes layer - observe({ - req(input$nooptions) + shiny::observe({ + shiny::req(input$nooptions) - proxy <- leafletProxy('map') + proxy <- leaflet::leafletProxy('map') if(input$modify == 'No' && input$nooptions == "Create lake polygon"){ - proxy |> hideGroup('lakes') + proxy |> leaflet::hideGroup('lakes') }else{ - proxy |> showGroup('lakes')}}) + proxy |> leaflet::showGroup('lakes')}}) -# Open the accordion metadata only once the user selects a siteid -observe({ + # Open the accordion metadata only once the user selects a siteid + shiny::observe({ - if(input$search == 1){ - accordion_panel_open(id = 'sidebar_accordion', - value = 'Site metadata') + if(input$search == 1){ + bslib::accordion_panel_open(id = 'sidebar_accordion', + value = 'Site metadata') - accordion_panel_open(id = 'map_accordion', - value = 'Map of the site area') + bslib::accordion_panel_open(id = 'map_accordion', + value = 'Map of the site area') - accordion_panel_close(id = 'map_accordion', - value = 'How to use this app?') + bslib::accordion_panel_close(id = 'map_accordion', + value = 'How to use this app?') - } + bslib::accordion_panel_open(id = 'lakes_or_polygons', + value = 'Hydrolakes DB') + } - if(input$modify == "No"){ - # Open the accordion to complete and submit comments once they have selected - # what they want to do with the siteid lake data - accordion_panel_open(id = 'map_accordion', - value = 'User decision')} }) -observe({ + if(input$modify == "No"){ + # Open the accordion to complete and submit comments once they have selected + # what they want to do with the siteid lake data + bslib::accordion_panel_open(id = 'map_accordion', + value = 'User decision')} }) - req(input$nooptions) - if(input$modify == "No" && input$nooptions == "Create lake polygon"){ + shiny::observe({ - # Open the accordion when the user wants to create a polygon - accordion_panel_close(id = 'lakes_or_polygons', - value = 'Hydrolakes DB') - accordion_panel_open(id = 'lakes_or_polygons', - value = 'Polygon') + shiny::req(input$nooptions) - }else if(input$modify == "No" && - input$nooptions == "Replace with HYDROLakeDB"){ + if(input$modify == "No" && + input$nooptions == "Create lake polygon"){ - accordion_panel_close(id = 'lakes_or_polygons', - value = 'Polygon') - accordion_panel_open(id = 'lakes_or_polygons', - value = 'Hydrolakes DB')} -}) + # Open the accordion when the user wants to create a polygon + bslib::accordion_panel_close(id = 'lakes_or_polygons', + value = 'Hydrolakes DB') + bslib::accordion_panel_open(id = 'lakes_or_polygons', + value = 'Polygon') + }else if(input$modify == "No" && + input$nooptions == "Replace with HYDROLakeDB"){ + + bslib::accordion_panel_close(id = 'lakes_or_polygons', + value = 'Polygon') + bslib::accordion_panel_open(id = 'lakes_or_polygons', + value = 'Hydrolakes DB')} + }) -# Sidebar table withe the NeotomaDB siteId metadata + + # Sidebar table withe the NeotomaDB siteId metadata output$metadata <- DT::renderDT({ - name = as.character(neosites_data()$sitename) - description = as.character(neosites_data()$sitedescription) - notes = as.character(neosites_data()$notes) + name <- as.character(neosites_data()$sitename) + description <- as.character(neosites_data()$sitedescription) + notes <- as.character(neosites_data()$notes) - data <- data.frame(c(description, - 'notes', notes)) + data <- data.frame(c(description, + 'notes', notes)) - colnames(data) <- as.character(name) + colnames(data) <- as.character(name) - DT::datatable(data, - rownames= FALSE, - options = list(dom = 't', - ordering = FALSE)) + DT::datatable(data, + rownames= FALSE, + options = list(dom = 't', + ordering = FALSE)) }) # Add radiobuttons if the user selects 'no' as option - output$dynamicUI <- renderUI({ + output$dynamicUI <- shiny::renderUI({ if (input$modify == "No") { - prettyRadioButtons( # or prettyRadioButtons + shinyWidgets::prettyRadioButtons( # or prettyRadioButtons inputId = "nooptions", label = "How would you update NeotomaDB?", choices = c("Replace with HYDROLakeDB" , @@ -450,101 +461,104 @@ observe({ outline = TRUE, plain = TRUE, status = "primary", - icon = icon("check")) + icon = shiny::icon("check")) } else { # If the option is not "Option 1", render an empty div - div() + shiny::div() } }) # Select HYDROlakeDB polygon when clicking the map - lk_click <- reactive({ + lk_click <- shiny::reactive({ - req(input$map_shape_click) + shiny::req(input$map_shape_click) - lake_data = lake_data() |> st_transform(4326) + lake_data = lake_data() |> + sf::st_transform(4326) if(!is.null(input$map_shape_click$id)){ - # convert hover coordinates in a sfc point - p = st_sfc(st_point(x=c(input$map_shape_click$lng, - input$map_shape_click$lat), - dim="XY"), - crs = 4326) + # convert hover coordinates in a sfc point + p = sf::st_sfc(sf::st_point(x=c(input$map_shape_click$lng, + input$map_shape_click$lat), + dim="XY"), + crs = 4326) - # detect detect polygon hovered by the user - lk_click = lake_data[st_intersects(lake_data, p, sparse = FALSE),] - lk_click + # detect detect polygon hovered by the user + lk_click <- lake_data[sf::st_intersects(lake_data, p, + sparse = FALSE),] + lk_click } }) -# Display plot clicked on the right sidebar - output$hydrolake <- renderPlot({ + # Display plot clicked on the right sidebar + output$hydrolake <- shiny::renderPlot({ - lake_data = lake_data() |> st_transform(4326) - countries_sf |> st_transform(4326) + shiny::req(input$search) - req(input$search) + lake_data <- lake_data() |> sf::st_transform(4326) + countries_sf |> sf::st_transform(4326) if(!is.null(input$map_shape_click$id)){ + # plot polygon of lake of interest - ggplot()+ - geom_sf(data = lk_click(), - fill = 'aliceblue', - lwd = 0.5)+ - theme_void() + - ggtitle(paste(as.character(lk_click()$Lake_name))) + - theme(text = element_text(size = 15)) + ggplot2::ggplot()+ + ggplot2::geom_sf(data = lk_click(), + fill = 'aliceblue', + lwd = 0.5)+ + ggplot2::theme_void() + + ggplot2::ggtitle(paste(as.character(lk_click()$Lake_name))) + + ggplot2::theme(text = ggplot2::element_text(size = 15)) } }) # Hydrolake clicked distance to NeotomaDB selected point - output$dist <- renderText({ - req(input$search) + output$dist <- shiny::renderText({ - # Message - validate( - need(!is.null(input$map_shape_click), - "Please, click one of the HYDROlakes in the map") + shiny::req(input$search) + + # Message if there is no click on a lake + shiny::validate( + shiny::need(!is.null(input$map_shape_click), + "Please, click one of the HYDROlakes in the map") ) - neosites_data = neosites_data() |> st_transform(4326) - lk_click = lk_click() |> st_transform(4326) + neosites_data <- neosites_data() |> + sf::st_transform(4326) + lk_click = lk_click() |> + sf::st_transform(4326) paste0("Distance within the site: ", - round((st_distance(lk_click, neosites_data))/1000, + round((sf::st_distance(lk_click, + neosites_data))/1000, digits = 2), ' km') }) - - - - -# Table with HYDROlakeDB lake clicked data + # Table with HYDROlakeDB lake clicked data output$lakeinfo <- DT::renderDT({ - if(!is.null(input$map_shape_click)){ + if(!is.null(input$map_shape_click)){ datalk <- t(data.frame(c('Hylak_id', - lk_click()$Hylak_id), - c('Elevation (masl)', - lk_click()$Elevation), - c('Shore length (km)', - lk_click()$Shore_len), - c('Lake area (km^2)', - lk_click()$Lake_area), - c('Volume total (mcm)', - lk_click()$Vol_total), - c('Depth average (m)', - lk_click()$Depth_avg))) + lk_click()$Hylak_id), + c('Elevation (masl)', + lk_click()$Elevation), + c('Shore length (km)', + lk_click()$Shore_len), + c('Lake area (km^2)', + lk_click()$Lake_area), + c('Volume total (mcm)', + lk_click()$Vol_total), + c('Depth average (m)', + lk_click()$Depth_avg))) colnames(datalk) <- NULL @@ -559,47 +573,45 @@ observe({ }) -# Map of the country where the lake is placed - output$country <- renderPlot({ + # Map of the country where the lake is placed + output$country <- shiny::renderPlot({ - req(input$map_shape_click$id) + shiny::req(input$map_shape_click$id) - - countries_sf |> st_transform(4326) + countries_sf |> + sf::st_transform(4326) if(!is.null(input$map_shape_click$id)){ - csf = countries_sf |> + csf <- countries_sf |> dplyr::filter(COUNTRY == lk_click()$COUNTRY) - print(csf) - # plot polygon of lake of interest - - world = ne_countries(scale = 'small', - returnclass = "sf") - - ggplot() + - geom_sf(data = world, - fill= 'antiquewhite') + - geom_sf(data = csf, - fill = 'darkgreen', - lwd = 0.5) + - theme_void() + - coord_sf(crs = "+proj=moll") + - theme(panel.grid.major = element_line(color = gray(.5), - linetype = 'dashed', - linewidth = 0.5)) + # plot polygon of lake of interest + world <- rnaturalearth::ne_countries(scale = 'small', + returnclass = "sf") + + ggplot2::ggplot() + + ggplot2::geom_sf(data = world, + fill= 'antiquewhite') + + ggplot2::geom_sf(data = csf, + fill = '#A5243D', + lwd = 0.5) + + ggplot2::theme_void() + + ggplot2::coord_sf(crs = "+proj=moll") + + ggplot2::theme(panel.grid.major = ggplot2::element_line(color = gray(.5), + linetype = 'dashed', + linewidth = 0.5)) - } -}) + } + }) -# Add country name - output$countryinfo <- renderText({ + # Add country name + output$countryinfo <- shiny::renderText({ - req(input$map_shape_click$id) + shiny::req(input$map_shape_click$id) - if(!is.null(input$map_shape_click$id)){ + if(!is.null(input$map_shape_click$id)){ csf = countries_sf |> dplyr::filter(COUNTRY == lk_click()$COUNTRY) @@ -610,24 +622,25 @@ observe({ # Display user comments in the screen - output$notes <- renderText({ input$notes }) + output$notes <- shiny::renderText({ input$notes }) # Text - output$action <- renderText({ + output$action <- shiny::renderText({ if(input$modify == 'Yes'){ - paste("The NeotomaDB site", input$neositeid, "is correct and don't need to be replaced") + paste("The NeotomaDB site", + input$neositeid, "is correct and don't need to be replaced") }else if(input$nooptions == "Replace with HYDROLakeDB"){ # Message - validate( - need(!is.null(input$map_shape_click), - "Please, click one of the HYDROlakes in the map") + shiny::validate( + shiny::need(!is.null(input$map_shape_click), + "Please, click one of the HYDROlakes in the map") ) paste("The NeotomaDB site", input$neositeid, @@ -637,9 +650,9 @@ observe({ }else{ # Message - validate( - need(!is.null(input$map_draw_new_feature), - "Please, create a polygon in the map") + shiny::validate( + shiny::need(!is.null(input$map_draw_new_feature), + "Please, create a polygon in the map") ) @@ -650,24 +663,26 @@ observe({ }) - polygon_sf <- reactive({ + polygon_sf <- shiny::reactive({ - coords = input$map_draw_new_feature$geometry$coordinates + # coordinates new polygon + coords <- input$map_draw_new_feature$geometry$coordinates coords_matrix <- sapply(coords[[1]], unlist) - polygon <- st_polygon(list(t(coords_matrix))) - polygon_sf <- st_sfc(polygon, crs = 4326) # meters - polygon_sf |> st_transform(3857) + + # convert the polygon to sf + polygon <- sf::st_polygon(list(t(coords_matrix))) + polygon_sf <- sf::st_sfc(polygon, crs = 4326) + polygon_sf |> + sf::st_transform(3857) # meters }) # Subset of data to send in relation with user input - data_submit <- reactive({ - - + data_submit <- shiny::reactive({ if(input$modify == 'Yes'){ - data_submit <- data.frame('siteId' = input$neositeid, + data_submit <- data.frame('siteId' = input$neositeid, 'comments' = input$notes) }else if(input$modify == "No" && @@ -684,24 +699,24 @@ observe({ if(!is.null(input$map_draw_new_feature)){ - polygon_sf() + polygon_sf() } data_submit <- data.frame('siteId' = input$neositeid, 'comments' = input$notes) - poly_submit = st_sf(data_submit, geometry = polygon_sf()) + poly_submit <- sf::st_sf(data_submit, geometry = polygon_sf()) poly_submit - } + } }) -# Save user selections as csv - output$submit <- downloadHandler( + # Save user selections as csv + output$submit <- shiny::downloadHandler( filename = function(){ paste0("lake_", input$neositeid, @@ -711,18 +726,17 @@ observe({ if(input$modify == 'Yes'){ - print(data_submit()) write.csv(data_submit(), fname) }else if(input$modify == 'No' && input$nooptions == 'Create lake polygon'){ - print(data_submit()) - st_write(data_submit(), fname, layer_options = "GEOMETRY=AS_WKT") + + sf::st_write(data_submit(), fname, + layer_options = "GEOMETRY=AS_WKT") }else{ - print(data_submit()) write.csv(data_submit(), fname) } @@ -737,20 +751,19 @@ observe({ if(!is.null(input$map_draw_new_feature)){ poly_4326 <- polygon_sf() |> - st_transform(4326) + sf::st_transform(4326) - bbox <- st_bbox(poly_4326) + bbox <- sf::st_bbox(poly_4326) - area <- st_area(polygon_sf()) + area <- sf::st_area(polygon_sf()) area <- units::set_units(area, km^2) - perimeter <- st_length(st_boundary(polygon_sf())) + perimeter <- sf::st_length(st_boundary(polygon_sf())) perimeter <- units::set_units(perimeter, km) - print(st_crs(polygon_sf(), - parameters = TRUE)) + datap <- t(data.frame(c('Min Latitude', round(bbox$xmin, digit = 2)), @@ -764,11 +777,11 @@ observe({ round(bbox$ymax, digit = 2)), c(paste0('Area (km^2)'), - round(area, - digits = 2)), - c(paste0('Shore length (km)'), - round(perimeter, - digits = 2)))) + round(area, + digits = 2)), + c(paste0('Shore length (km)'), + round(perimeter, + digits = 2)))) colnames(datap) <- NULL @@ -783,24 +796,24 @@ observe({ }) - output$polygon_new <- renderPlot({ + output$polygon_new <- shiny::renderPlot({ # Message - validate( - need(!is.null(input$map_draw_new_feature), - "Please, create a polygon in the map") + shiny::validate( + shiny::need(!is.null(input$map_draw_new_feature), + "Please, create a polygon in the map") ) + # plot recently created polygon - ggplot()+ - geom_sf(data = polygon_sf(), - fill = 'aliceblue', - lwd = 0.5)+ - theme_void() + ggplot2::ggplot()+ + ggplot2::geom_sf(data = polygon_sf(), + fill = 'aliceblue', + lwd = 0.5)+ + ggplot2::theme_void() }) } - -shinyApp(ui, server) \ No newline at end of file +shinyApp(ui, server) diff --git a/renv.lock b/renv.lock index f13897c..dd2c7f6 100644 --- a/renv.lock +++ b/renv.lock @@ -9,13 +9,6 @@ ] }, "Packages": { - "AsioHeaders": { - "Package": "AsioHeaders", - "Version": "1.22.1-2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "85bf3bd8fa58da21a22d84fd4f4ef0a8" - }, "BH": { "Package": "BH", "Version": "1.81.0-1", @@ -36,9 +29,9 @@ }, "DT": { "Package": "DT", - "Version": "0.30", + "Version": "0.31", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "crosstalk", "htmltools", @@ -49,7 +42,7 @@ "magrittr", "promises" ], - "Hash": "dffb4d94a00be1b4a4507e53ab95bd90" + "Hash": "77b5189f5272ae2b21e3ac2175ad107c" }, "KernSmooth": { "Package": "KernSmooth", @@ -146,16 +139,6 @@ ], "Hash": "cad6cf7f1d5f6e906700b9d3e718c796" }, - "backports": { - "Package": "backports", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "c39fbec8a30d23e721980b8afb31984c" - }, "base64enc": { "Package": "base64enc", "Version": "0.1-3", @@ -166,18 +149,11 @@ ], "Hash": "543776ae6848fde2f48ff3816d0628bc" }, - "brio": { - "Package": "brio", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "976cf154dfb043c012d87cddd8bca363" - }, "bslib": { "Package": "bslib", - "Version": "0.5.1", + "Version": "0.6.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "base64enc", @@ -186,12 +162,13 @@ "htmltools", "jquerylib", "jsonlite", + "lifecycle", "memoise", "mime", "rlang", "sass" ], - "Hash": "283015ddfbb9d7bf15ea9f0b5698f0d9" + "Hash": "c0d8599494bc7fb408cd206bbdd9cab0" }, "cachem": { "Package": "cachem", @@ -204,50 +181,6 @@ ], "Hash": "c35768291560ce302c0a6589f92e837d" }, - "callr": { - "Package": "callr", - "Version": "3.7.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "processx", - "utils" - ], - "Hash": "9b2191ede20fa29828139b9900922e51" - }, - "checkmate": { - "Package": "checkmate", - "Version": "2.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "backports", - "utils" - ], - "Hash": "c01cab1cb0f9125211a6fc99d540e315" - }, - "chromote": { - "Package": "chromote", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "curl", - "fastmap", - "jsonlite", - "later", - "magrittr", - "processx", - "promises", - "rlang", - "websocket" - ], - "Hash": "14c8f71bf7b112634b154f8a6a0867e1" - }, "class": { "Package": "class", "Version": "7.3-22", @@ -279,24 +212,14 @@ }, "cli": { "Package": "cli", - "Version": "3.6.1", + "Version": "3.6.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "utils" ], - "Hash": "89e6d8219950eac806ae0c489052048a" - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-18", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "019388fc48e48b3da0d3a76ff94608a8" + "Hash": "1216ac65ac55ec0058a6f75d7ca0fd52" }, "colorspace": { "Package": "colorspace", @@ -321,13 +244,13 @@ }, "cpp11": { "Package": "cpp11", - "Version": "0.4.6", + "Version": "0.4.7", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], - "Hash": "707fae4bbf73697ec8d85f9d7076c061" + "Hash": "5a295d7d963cc5035284dcdbaf334f4e" }, "crayon": { "Package": "crayon", @@ -343,55 +266,26 @@ }, "crosstalk": { "Package": "crosstalk", - "Version": "1.2.0", + "Version": "1.2.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R6", "htmltools", "jsonlite", "lazyeval" ], - "Hash": "6aa54f69598c32177e920eb3402e8293" + "Hash": "ab12c7b080a57475248a30f4db6298c0" }, "curl": { "Package": "curl", - "Version": "5.1.0", + "Version": "5.2.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], - "Hash": "9123f3ef96a2c1a93927d828b2fe7d4c" - }, - "desc": { - "Package": "desc", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "rprojroot", - "utils" - ], - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" - }, - "diffobj": { - "Package": "diffobj", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "crayon", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" + "Hash": "ce88d13c0b10fe88a37d9c59dba2d7f9" }, "digest": { "Package": "digest", @@ -406,9 +300,9 @@ }, "dplyr": { "Package": "dplyr", - "Version": "1.1.3", + "Version": "1.1.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "R6", @@ -425,13 +319,13 @@ "utils", "vctrs" ], - "Hash": "e85ffbebaad5f70e1a2e2ef4302b4949" + "Hash": "fedd9d00c2944ff00a0e2696ccf048ec" }, "e1071": { "Package": "e1071", - "Version": "1.7-13", + "Version": "1.7-14", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "class", "grDevices", @@ -441,7 +335,7 @@ "stats", "utils" ], - "Hash": "1046cb48d06cb40c2900d8878f03a0fe" + "Hash": "4ef372b716824753719a8a38b258442d" }, "ellipsis": { "Package": "ellipsis", @@ -467,15 +361,15 @@ }, "fansi": { "Package": "fansi", - "Version": "1.0.5", + "Version": "1.0.6", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "grDevices", "utils" ], - "Hash": "3e8583a60163b4bc1a80016e63b9959e" + "Hash": "962174cf2aeb5b9eea581522286a911f" }, "farver": { "Package": "farver", @@ -575,17 +469,6 @@ ], "Hash": "313d31eff2274ecf4c1d3581db7241f9" }, - "globals": { - "Package": "globals", - "Version": "0.16.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "codetools" - ], - "Hash": "baa9585ab4ce47a9f4618e671778cc6f" - }, "glue": { "Package": "glue", "Version": "1.6.2", @@ -656,9 +539,9 @@ }, "htmlwidgets": { "Package": "htmlwidgets", - "Version": "1.6.2", + "Version": "1.6.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "grDevices", "htmltools", @@ -667,13 +550,13 @@ "rmarkdown", "yaml" ], - "Hash": "a865aa85bcb2697f47505bfd70422471" + "Hash": "04291cc45198225444a397606810ac37" }, "httpuv": { "Package": "httpuv", - "Version": "1.6.12", + "Version": "1.6.13", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "R6", @@ -682,7 +565,7 @@ "promises", "utils" ], - "Hash": "c992f75861325961c29a188b45e549f7" + "Hash": "d23d2879001f3d82ee9dc38a9ef53c4c" }, "httr": { "Package": "httr", @@ -734,13 +617,13 @@ }, "jsonlite": { "Package": "jsonlite", - "Version": "1.8.7", + "Version": "1.8.8", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "methods" ], - "Hash": "266a20443ca13c65688b2116d5220f76" + "Hash": "e1b9c55281c5adc4dd113652d9e26768" }, "knitr": { "Package": "knitr", @@ -771,14 +654,14 @@ }, "later": { "Package": "later", - "Version": "1.3.1", + "Version": "1.3.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "Rcpp", "rlang" ], - "Hash": "40401c9cf2bc2259dfe83311c9384710" + "Hash": "a3e051d405326b8b0012377434c62b37" }, "lattice": { "Package": "lattice", @@ -826,9 +709,9 @@ }, "leaflet": { "Package": "leaflet", - "Version": "2.2.0", + "Version": "2.2.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "RColorBrewer", @@ -847,7 +730,7 @@ "viridis", "xfun" ], - "Hash": "f73dcc38ff38127bc11ea776786996de" + "Hash": "6e09cb2c9dc2e5a1e71a413e60c3834e" }, "leaflet.extras": { "Package": "leaflet.extras", @@ -913,16 +796,16 @@ }, "markdown": { "Package": "markdown", - "Version": "1.11", + "Version": "1.12", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "commonmark", "utils", "xfun" ], - "Hash": "82b8d62b5451f8adea7d11a99dfea633" + "Hash": "765cf53992401b3b6c297b69e1edb8bd" }, "memoise": { "Package": "memoise", @@ -1026,35 +909,6 @@ ], "Hash": "15da5a8412f317beeee6175fbc76f4bb" }, - "pingr": { - "Package": "pingr", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "processx", - "utils" - ], - "Hash": "b762f8f7d305f7eb0bab96eb1a3c782a" - }, - "pkgbuild": { - "Package": "pkgbuild", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "callr", - "cli", - "crayon", - "desc", - "prettyunits", - "processx", - "rprojroot" - ], - "Hash": "beb25b32a957a22a5c301a9e441190b3" - }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", @@ -1065,27 +919,6 @@ ], "Hash": "01f28d4278f15c76cddbea05899c5d6f" }, - "pkgload": { - "Package": "pkgload", - "Version": "1.3.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "crayon", - "desc", - "fs", - "glue", - "methods", - "pkgbuild", - "rlang", - "rprojroot", - "utils", - "withr" - ], - "Hash": "903d68319ae9923fb2e2ee7fa8230b91" - }, "png": { "Package": "png", "Version": "0.1-8", @@ -1096,36 +929,6 @@ ], "Hash": "bd54ba8a0a5faded999a7aab6e46b374" }, - "praise": { - "Package": "praise", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a555924add98c99d2f411e37e7d25e9f" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" - }, - "processx": { - "Package": "processx", - "Version": "3.8.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "ps", - "utils" - ], - "Hash": "3efbd8ac1be0296a46c55387aeace0f3" - }, "promises": { "Package": "promises", "Version": "1.2.1", @@ -1154,17 +957,6 @@ ], "Hash": "e0ef355c12942cf7a6b91a6cfaea8b3e" }, - "ps": { - "Package": "ps", - "Version": "1.7.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "709d852d33178db54b17c722e5b1e594" - }, "purrr": { "Package": "purrr", "Version": "1.0.2", @@ -1211,16 +1003,6 @@ ], "Hash": "7d6eda494f34a644420ac1bfd2a8023a" }, - "rematch2": { - "Package": "rematch2", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "tibble" - ], - "Hash": "76c9e04c712a05848ae7a23d2f170a40" - }, "renv": { "Package": "renv", "Version": "1.0.3", @@ -1268,7 +1050,7 @@ }, "rnaturalearth": { "Package": "rnaturalearth", - "Version": "0.3.4", + "Version": "1.0.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1276,21 +1058,10 @@ "httr", "jsonlite", "sf", - "sp", "terra", "utils" ], - "Hash": "cc93c2e9d777b357103cdc322fb9a649" - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.0.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "4c8415e0ec1e29f3f4f6fc108bef0144" + "Hash": "aa0a8f2acc5aa2cfe250319c9fd28632" }, "rsconnect": { "Package": "rsconnect", @@ -1323,21 +1094,21 @@ }, "s2": { "Package": "s2", - "Version": "1.1.4", + "Version": "1.1.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "Rcpp", "wk" ], - "Hash": "f1cbe03bb3346f8e817518ffa20f9f5a" + "Hash": "a93c11b1037ccc257a3d0eb3563b061e" }, "sass": { "Package": "sass", - "Version": "0.4.7", + "Version": "0.4.8", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R6", "fs", @@ -1345,25 +1116,27 @@ "rappdirs", "rlang" ], - "Hash": "6bd4d33b50ff927191ec9acbf52fd056" + "Hash": "168f9353c76d4c4b0a0bbf72e2c2d035" }, "scales": { "Package": "scales", - "Version": "1.2.1", + "Version": "1.3.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "R6", "RColorBrewer", + "cli", "farver", + "glue", "labeling", "lifecycle", "munsell", "rlang", "viridisLite" ], - "Hash": "906cb23d2f1c5680b8ce439b44c6fa63" + "Hash": "c19df082ba346b0ffa6f833e92de34d1" }, "sf": { "Package": "sf", @@ -1402,9 +1175,9 @@ }, "shiny": { "Package": "shiny", - "Version": "1.7.5.1", + "Version": "1.8.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "R6", @@ -1432,7 +1205,7 @@ "withr", "xtable" ], - "Hash": "5ec01cc255f2138fc2f0dc74d2b1a1a1" + "Hash": "3a1f41807d648a908e3c7f0334bf85e6" }, "shinyFeedback": { "Package": "shinyFeedback", @@ -1480,32 +1253,6 @@ ], "Hash": "f39bb3c44a9b496723ec7e86f9a771d8" }, - "shinytest2": { - "Package": "shinytest2", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "callr", - "checkmate", - "chromote", - "cpp11", - "crayon", - "ellipsis", - "fs", - "globals", - "httr", - "jsonlite", - "pingr", - "rlang", - "rmarkdown", - "shiny", - "testthat", - "withr" - ], - "Hash": "04e60b31d4afef1d221ede5fafb0c6f6" - }, "sourcetools": { "Package": "sourcetools", "Version": "0.1.7-1", @@ -1518,9 +1265,9 @@ }, "sp": { "Package": "sp", - "Version": "2.1-1", + "Version": "2.1-2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "grDevices", @@ -1531,11 +1278,11 @@ "stats", "utils" ], - "Hash": "e9090fe4ff468d366aa6a76a9b3ec078" + "Hash": "40a9887191d33b2521a1d741f8c8aea2" }, "stringi": { "Package": "stringi", - "Version": "1.7.12", + "Version": "1.8.3", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -1544,13 +1291,13 @@ "tools", "utils" ], - "Hash": "ca8bd84263c77310739d2cf64d84d7c9" + "Hash": "058aebddea264f4c99401515182e656a" }, "stringr": { "Package": "stringr", - "Version": "1.5.0", + "Version": "1.5.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", @@ -1561,7 +1308,7 @@ "stringi", "vctrs" ], - "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" + "Hash": "960e2ae9e09656611e0b8214ad543207" }, "sys": { "Package": "sys", @@ -1582,35 +1329,6 @@ ], "Hash": "c011cc748506148c793428eb8ec101f9" }, - "testthat": { - "Package": "testthat", - "Version": "3.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "brio", - "callr", - "cli", - "desc", - "digest", - "evaluate", - "jsonlite", - "lifecycle", - "magrittr", - "methods", - "pkgload", - "praise", - "processx", - "ps", - "rlang", - "utils", - "waldo", - "withr" - ], - "Hash": "4767a686ebe986e6cb01d075b3f09729" - }, "thematic": { "Package": "thematic", "Version": "0.1.4", @@ -1691,24 +1409,24 @@ }, "tinytex": { "Package": "tinytex", - "Version": "0.48", + "Version": "0.49", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "xfun" ], - "Hash": "8f96d229b7311beb32b94cf413b13f84" + "Hash": "5ac22900ae0f386e54f1c307eca7d843" }, "units": { "Package": "units", - "Version": "0.8-4", + "Version": "0.8-5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "Rcpp" ], - "Hash": "e0fbcea25008a7540c83c2c294135de0" + "Hash": "119d19da480e873f72241ff6962ffd83" }, "utf8": { "Package": "utf8", @@ -1722,9 +1440,9 @@ }, "vctrs": { "Package": "vctrs", - "Version": "0.6.4", + "Version": "0.6.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", @@ -1732,7 +1450,7 @@ "lifecycle", "rlang" ], - "Hash": "266c1ca411266ba8f365fcc726444b87" + "Hash": "c03fa420630029418f7e6da3667aac4a" }, "viridis": { "Package": "viridis", @@ -1757,37 +1475,6 @@ ], "Hash": "c826c7c4241b6fc89ff55aaea3fa7491" }, - "waldo": { - "Package": "waldo", - "Version": "0.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "diffobj", - "fansi", - "glue", - "methods", - "rematch2", - "rlang", - "tibble" - ], - "Hash": "c7d3fd6d29ab077cbac8f0e2751449e6" - }, - "websocket": { - "Package": "websocket", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "AsioHeaders", - "R6", - "cpp11", - "later" - ], - "Hash": "76e0d400757e318cca33def29ccebbc2" - }, "withr": { "Package": "withr", "Version": "2.5.2", @@ -1803,13 +1490,13 @@ }, "wk": { "Package": "wk", - "Version": "0.9.0", + "Version": "0.9.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], - "Hash": "f58cfa8d9c3a78a309d455a647dee853" + "Hash": "5d4545e140e36476f35f20d0ca87963e" }, "xfun": { "Package": "xfun", @@ -1836,10 +1523,10 @@ }, "yaml": { "Package": "yaml", - "Version": "2.3.7", + "Version": "2.3.8", "Source": "Repository", "Repository": "CRAN", - "Hash": "0d0056cc5383fbc240ccd0cb584bf436" + "Hash": "29240487a071f535f5e5d5a323b7afbd" } } } diff --git a/rsconnect/shinyapps.io/flor/neotoma-lakes.dcf b/rsconnect/shinyapps.io/flor/neotoma-lakes.dcf index d3b1555..b4624c2 100644 --- a/rsconnect/shinyapps.io/flor/neotoma-lakes.dcf +++ b/rsconnect/shinyapps.io/flor/neotoma-lakes.dcf @@ -5,9 +5,9 @@ account: flor server: shinyapps.io hostUrl: https://api.shinyapps.io/v1 appId: 10513624 -bundleId: 8032988 +bundleId: 8049952 url: https://flor.shinyapps.io/neotoma-lakes/ version: 1 asMultiple: FALSE asStatic: FALSE -ignoredFiles: helper_script.R +ignoredFiles: .github/workflows/check-app.yaml|.github/workflows/deploy-app.yaml|.Rprofile|Dockerfile|README.md|README.Rmd