From 32c6dd2ea3a903e43dbc0161548b74e177f47ac7 Mon Sep 17 00:00:00 2001 From: Helder Ribeiro Date: Thu, 25 Aug 2022 16:28:59 -0300 Subject: [PATCH 1/3] replace shinyalert by shinyWidgets::sendsweetalert --- Dockerfile | 2 +- KVshiny/R/app_server.R | 12 ++++++------ KVshiny/R/mod_server_checkResults.R | 8 +++++--- KVshiny/R/mod_server_fetch.R | 1 - KVshiny/R/mod_server_pdbProcess.R | 7 ++++--- KVshiny/R/mod_server_submitJob.R | 22 ++++++++++++---------- KVshiny/R/mod_server_upload.R | 1 - KVshiny/man/check_results.Rd | 6 +++++- KVshiny/man/pdb_process.Rd | 4 +++- KVshiny/man/submit_job.Rd | 6 +++++- 10 files changed, 41 insertions(+), 28 deletions(-) diff --git a/Dockerfile b/Dockerfile index 90b9d10..33939d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \ libssl-dev \ libxml2-dev -RUN install2.r shiny pkgload remotes devtools bio3d bs4Dash config data.table DT golem NGLVieweR RcppTOML readr rjson shinyalert shinyjs blogdown colourpicker shinyfullscreen shinycssloaders +RUN install2.r shiny pkgload remotes devtools bio3d bs4Dash config data.table DT golem NGLVieweR RcppTOML readr rjson shinyjs blogdown colourpicker shinyfullscreen shinycssloaders #RUN R -e 'devtools::install_github("https://github.com/LBC-LNBio/KVshiny-docker")' # copy the app directory into the image diff --git a/KVshiny/R/app_server.R b/KVshiny/R/app_server.R index 30639ea..e816fa3 100644 --- a/KVshiny/R/app_server.R +++ b/KVshiny/R/app_server.R @@ -69,8 +69,7 @@ app_server <- function( input, output, session ) { get_nonstand_check <- report_nonstand(pdb_input = input$pdb_id) removeModal() if (is.na(get_nonstand_check)){ - shinyWidgets::sendSweetAlert(title = "Oops!", text = "Please insert a valid PDB ID.", type = "error") - #shinyalert("Oops!", "Please insert a valid PDB ID.", type = "error") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Please insert a valid PDB ID.", type = "error") } else{ print("PDB ID ok") } @@ -91,7 +90,8 @@ app_server <- function( input, output, session ) { current_run_id <<- submit_job(input = input, output = output, pdb_name_click_load = pdb_name_click_load, - url_address = url_address) + url_address = url_address, + session = session) removeModal() # If result_pdb object is not null, i.e. the Check button was clicked previously, # all the buttons generated by Check results (next block of code), will be hidden every time we click on submit button. @@ -175,7 +175,7 @@ app_server <- function( input, output, session ) { #Check results in the main Run KVFinder page observeEvent(input$go_to_check_results, { # Get and output the results - result_pdb <<- check_results(input = input, output = output, run_id = current_run_id, is_pg2 = FALSE, url_address = url_address) + result_pdb <<- check_results(input = input, output = output, run_id = current_run_id, is_pg2 = FALSE, url_address = url_address, session = session) # If result_pdb object is not null, i.e. the Check button was clicked in another previous run, # the function showElement below is executed to show the output status that was hidden by the submission button. if(!is.null(result_pdb)){ @@ -190,7 +190,7 @@ app_server <- function( input, output, session ) { } # Create a 'observe' to monitor the results by checking and automatically updating the status each 5s when in queued or running observe({ - result_pdb <<- check_results(input = input, output = output, run_id = current_run_id, is_pg2 = FALSE, url_address = url_address) + result_pdb <<- check_results(input = input, output = output, run_id = current_run_id, is_pg2 = FALSE, url_address = url_address, session = session) if(result_pdb %in% c("queued", "running")){ invalidateLater(5000) #means 5 seconds } else{ #in case of status completed or error, the check_results will not be updated each 5s @@ -212,7 +212,7 @@ app_server <- function( input, output, session ) { #Check results in the secondary page ("get latest results" page) observeEvent(input$check_loc_pg2, { #output[["structure_p2"]] <<- NULL - result_pdb <<- check_results(input = input, output = output, run_id = input$insert_ID, is_pg2 = TRUE, url_address = url_address) + result_pdb <<- check_results(input = input, output = output, run_id = input$insert_ID, is_pg2 = TRUE, url_address = url_address, session = session) # When check results button in page 2 is clicked, the structure visualization and all buttons related to NGL viewer will be hidden # to allow an update if the check button is used multiple times output[["structure_pg2"]] <- renderNGLVieweR({}) diff --git a/KVshiny/R/mod_server_checkResults.R b/KVshiny/R/mod_server_checkResults.R index 931d990..4fa5b3e 100644 --- a/KVshiny/R/mod_server_checkResults.R +++ b/KVshiny/R/mod_server_checkResults.R @@ -4,17 +4,19 @@ #' @param output shiny output #' @param run_id current run id #' @param is_pg2 logical TRUE/FALSE. If TRUE, we calling to create result in page 2 (get latest results page). -#' @url_address url address to conexion +#' @param url_address url address to conexion +#' @param session #' #' @import shiny #' @import RcppTOML #' @import data.table #' @import DT #' @import blogdown +#' @import shinyWidgets #' @export #' -check_results <- function(input, output, run_id, is_pg2, url_address){ +check_results <- function(input, output, run_id, is_pg2, url_address, session){ #check which page to output the results (main page or get latest results page - pg2) #this block was created to allow the use of this function in the main or secondary page if(is_pg2 == TRUE){ #get latest results page @@ -74,7 +76,7 @@ check_results <- function(input, output, run_id, is_pg2, url_address){ result_toml <- parseTOML(input = content_get_output$output$report,fromFile = FALSE,escape = TRUE)$RESULTS #check if the at least one cavity was found if(length(result_toml$AREA) == 0){ - shinyalert("Oops!", "No cavity found. Please check the input parameters and try again.", type = "warning") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "No cavity found. Please check the input parameters and try again.", type = "warning") } else{ #if cavities were found #create result table output[[results_table]] <- renderUI({ diff --git a/KVshiny/R/mod_server_fetch.R b/KVshiny/R/mod_server_fetch.R index 738426f..2c838a8 100644 --- a/KVshiny/R/mod_server_fetch.R +++ b/KVshiny/R/mod_server_fetch.R @@ -4,7 +4,6 @@ #' @param output shiny output #' #' @import shiny -#' @import shinyalert #' #' @export #' diff --git a/KVshiny/R/mod_server_pdbProcess.R b/KVshiny/R/mod_server_pdbProcess.R index 720653c..fe14ca0 100644 --- a/KVshiny/R/mod_server_pdbProcess.R +++ b/KVshiny/R/mod_server_pdbProcess.R @@ -4,13 +4,14 @@ #' @param output shiny output #' @param get_nonstand vector of non-standard residues from the input PDB #' @param mode select between "upload" or "fetch" modes +#' @param session #' #' @import shiny -#' @import shinyalert +#' @import shinyWidgets #' #' @export #' -pdb_process <- function(input, output, get_nonstand, mode){ +pdb_process <- function(input, output, get_nonstand, mode, session){ #if the PDB was uploaded if(mode == "upload"){ #path of the pdb input @@ -34,7 +35,7 @@ pdb_process <- function(input, output, get_nonstand, mode){ #in the case of running the box mode, we have to check if the target residues are correctly in the PDB input check_residues = check_residues_name(pdb_input = pdb_input, target_residues = input$box_residues) if(check_residues == FALSE){ - shinyalert("Oops!", "Please insert a valid list of residues for box mode run.", type = "error") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Please insert a valid list of residues for box mode run.", type = "error") pdb_processed <- "wrong_target_res" } else{ pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = get_nonstand, include_list = include_list) diff --git a/KVshiny/R/mod_server_submitJob.R b/KVshiny/R/mod_server_submitJob.R index 1a39ca4..58cd4d7 100644 --- a/KVshiny/R/mod_server_submitJob.R +++ b/KVshiny/R/mod_server_submitJob.R @@ -3,18 +3,20 @@ #' @param input shiny input #' @param output shiny output #' @param pdb_name_click_load variable of the number of clicks on load button -#' @url_address url address to conexion +#' @param url_address url address to conexion +#' @param session #' #' @import shiny #' @import rjson #' @import jsonlite #' @import rlang #' @import httr +#' @import shinyWidgets #' #' @export #' -submit_job <- function(input, output, pdb_name_click_load, url_address){ +submit_job <- function(input, output, pdb_name_click_load, url_address, session){ #------------------------------------------------------------------- #Get KVFinder parameters from the user interface probein_input <- input[[paste(input$run_mode, "Pin_input", sep = "_")]] @@ -28,24 +30,24 @@ submit_job <- function(input, output, pdb_name_click_load, url_address){ #check if probe in is smaller than probe out if(probein_input > probeout_input){ - shinyalert("Oops!", "Probe In must be smaller than Probe Out.", type = "error") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Probe In must be smaller than Probe Out.", type = "error") # check if user uploaded a PDB or fetched a PDB ID before to submit } else if(is.null(input$input_pdb) & input$pdb_id == ""){ - shinyalert("Oops!", "Please load from PDB or upload a PDB file before to submit.", type = "error") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Please load from PDB or upload a PDB file before to submit.", type = "error") #Check if the user that is using the fetch mode clicked on the Load button before to submit } else if(pdb_name_click_load != "init" & pdb_name_click_load != input$pdb_id){ # - shinyalert("Oops!", "Please after input PDB ID in Choose input section, be sure you loaded the PDB by clicking on the Load button.", type = "error") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Please after input PDB ID in Choose input section, be sure you loaded the PDB by clicking on the Load button.", type = "error") # Just another check if user uploaded a PDB or fetched a PDB ID before to submit } else if(length(input$pdb_id) > 0 & input$send_pdb_id == 0){ - shinyalert("Oops!", "Please load from PDB or upload a PDB file before to submit.", type = "error") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Please load from PDB or upload a PDB file before to submit.", type = "error") } else { #if pass through the above checks... #get pdb_processed from upload mode if(input$input_type == 'pdb_from_file'){ - pdb_processed <- pdb_process(input = input, output = output, get_nonstand = get_nonstand, mode = "upload") + pdb_processed <- pdb_process(input = input, output = output, get_nonstand = get_nonstand, mode = "upload", session = session) #get pdb_processed from fetch mode } else{ - pdb_processed <- pdb_process(input = input, output = output, get_nonstand = get_nonstand, mode = "fetch") + pdb_processed <- pdb_process(input = input, output = output, get_nonstand = get_nonstand, mode = "fetch", session = session) } #check if the list of residues in "target residues" field is appropriated. The function pdb_process (in mod_server_pdbProcess.R) returns "wrong_target_res" if the input is not in the required format if(pdb_processed != "wrong_target_res"){ @@ -57,7 +59,7 @@ submit_job <- function(input, output, pdb_name_click_load, url_address){ } #check if user inserted a valid PDB before do submit if(length(pdb_path) == 0){ - shinyalert("Oops!", "Please insert a valid PDB before to submit.", type = "error") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text ="Please insert a valid PDB before to submit.", type = "error") } else { #Create a KVFinder input file based on the specific target mode to be submitted to the server using submit_prepare function #Whole protein (default parameters) @@ -93,7 +95,7 @@ submit_job <- function(input, output, pdb_name_click_load, url_address){ #return the job id return(get_run_id) } else{ # if the submission status is other than 200 - shinyalert("Oops!", "An error occurred when submitting your job. Perhaps the input file is larger than what our server allows or the input parameters are outside the allowed limits. Please read our Help page and if the problem persist please contact us", type = "error") + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text ="An error occurred when submitting your job. Perhaps the input file is larger than what our server allows or the input parameters are outside the allowed limits. Please read our Help page and if the problem persist please contact us.", type = "error") } } } diff --git a/KVshiny/R/mod_server_upload.R b/KVshiny/R/mod_server_upload.R index e645ea8..2061440 100644 --- a/KVshiny/R/mod_server_upload.R +++ b/KVshiny/R/mod_server_upload.R @@ -4,7 +4,6 @@ #' @param output shiny output #' #' @import shiny -#' @import shinyalert #' #' @export #' diff --git a/KVshiny/man/check_results.Rd b/KVshiny/man/check_results.Rd index 17c3104..e8a401a 100644 --- a/KVshiny/man/check_results.Rd +++ b/KVshiny/man/check_results.Rd @@ -4,7 +4,7 @@ \alias{check_results} \title{Function that check and ouput results in the KVFinder interface} \usage{ -check_results(input, output, run_id, is_pg2) +check_results(input, output, run_id, is_pg2, url_address, session) } \arguments{ \item{input}{shiny input} @@ -14,6 +14,10 @@ check_results(input, output, run_id, is_pg2) \item{run_id}{current run id} \item{is_pg2}{logical TRUE/FALSE. If TRUE, we calling to create result in page 2 (get latest results page).} + +\item{url_address}{url address to conexion} + +\item{session}{} } \description{ Function that check and ouput results in the KVFinder interface diff --git a/KVshiny/man/pdb_process.Rd b/KVshiny/man/pdb_process.Rd index b33c64d..dd91e46 100644 --- a/KVshiny/man/pdb_process.Rd +++ b/KVshiny/man/pdb_process.Rd @@ -4,7 +4,7 @@ \alias{pdb_process} \title{Function that process the uploaded or fetched PDB. This function is called in mod_server_submitJob module.} \usage{ -pdb_process(input, output, get_nonstand, mode) +pdb_process(input, output, get_nonstand, mode, session) } \arguments{ \item{input}{shiny input} @@ -14,6 +14,8 @@ pdb_process(input, output, get_nonstand, mode) \item{get_nonstand}{vector of non-standard residues from the input PDB} \item{mode}{select between "upload" or "fetch" modes} + +\item{session}{} } \description{ Function that process the uploaded or fetched PDB. This function is called in mod_server_submitJob module. diff --git a/KVshiny/man/submit_job.Rd b/KVshiny/man/submit_job.Rd index 3fadf93..ce56eb9 100644 --- a/KVshiny/man/submit_job.Rd +++ b/KVshiny/man/submit_job.Rd @@ -4,7 +4,7 @@ \alias{submit_job} \title{Function that submits the KVFinder job to the server} \usage{ -submit_job(input, output, pdb_name_click_load) +submit_job(input, output, pdb_name_click_load, url_address, session) } \arguments{ \item{input}{shiny input} @@ -12,6 +12,10 @@ submit_job(input, output, pdb_name_click_load) \item{output}{shiny output} \item{pdb_name_click_load}{variable of the number of clicks on load button} + +\item{url_address}{url address to conexion} + +\item{session}{} } \description{ Function that submits the KVFinder job to the server From 37897b6cc097a4d8fbb447f2cc005f31652cff2b Mon Sep 17 00:00:00 2001 From: Helder Ribeiro Date: Thu, 25 Aug 2022 16:58:23 -0300 Subject: [PATCH 2/3] includ tryCatch in deal_sele_nonstand function --- KVshiny/R/app_server.R | 3 +- KVshiny/R/mod_server_pdbProcess.R | 8 ++--- KVshiny/R/utils_pdbProcess_.R | 60 +++++++++++++++++-------------- KVshiny/man/deal_sele_nonstand.Rd | 4 ++- 4 files changed, 42 insertions(+), 33 deletions(-) diff --git a/KVshiny/R/app_server.R b/KVshiny/R/app_server.R index e816fa3..ef72a25 100644 --- a/KVshiny/R/app_server.R +++ b/KVshiny/R/app_server.R @@ -72,9 +72,10 @@ app_server <- function( input, output, session ) { shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Please insert a valid PDB ID.", type = "error") } else{ print("PDB ID ok") + process_fetch(input = input, output = output) } #run process_fetch of mod_server_fetch module to create boxes and buttons of run mode - process_fetch(input = input, output = output) + #process_fetch(input = input, output = output) }) #---------------------------------------------------- diff --git a/KVshiny/R/mod_server_pdbProcess.R b/KVshiny/R/mod_server_pdbProcess.R index fe14ca0..5f7fa96 100644 --- a/KVshiny/R/mod_server_pdbProcess.R +++ b/KVshiny/R/mod_server_pdbProcess.R @@ -26,10 +26,10 @@ pdb_process <- function(input, output, get_nonstand, mode, session){ } #create a processed PDB for each run mode: default, customized, ligand or box mode if(input$run_mode == "mode_def"){ - pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = get_nonstand, include_list = include_list) + pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = get_nonstand, include_list = include_list, session = session) pdb_processed <- list(pdb_processed = pdb_processed) } else if(input$run_mode == "mode_cust"){ - pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = get_nonstand, include_list = include_list) + pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = get_nonstand, include_list = include_list, session = session) pdb_processed <- list(pdb_processed = pdb_processed) } else if(input$run_mode == "box_mode"){ #in the case of running the box mode, we have to check if the target residues are correctly in the PDB input @@ -38,7 +38,7 @@ pdb_process <- function(input, output, get_nonstand, mode, session){ shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Please insert a valid list of residues for box mode run.", type = "error") pdb_processed <- "wrong_target_res" } else{ - pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = get_nonstand, include_list = include_list) + pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = get_nonstand, include_list = include_list, session = session) pdb_processed <- list(pdb_processed = pdb_processed) } } else { #enter in the ligand mode @@ -47,7 +47,7 @@ pdb_process <- function(input, output, get_nonstand, mode, session){ #update nonstandard residues list to exclude the ligand get_nonstand_noLig <- setdiff(get_nonstand,input$lig_name) #get all non-standand but the ligand #by default remove all non standards residues and the ligand - pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = c(get_nonstand,input$lig_name), include_list = include_list) + pdb_processed <- deal_sele_nonstand(pdb_input = pdb_input,nonstand_list = c(get_nonstand,input$lig_name), include_list = include_list, session = session) pdb_processed <- list(pdb_processed = pdb_processed, pdb_lig_processed = pdb_ligand_processed) } return(pdb_processed) diff --git a/KVshiny/R/utils_pdbProcess_.R b/KVshiny/R/utils_pdbProcess_.R index 132e8b0..72daba4 100644 --- a/KVshiny/R/utils_pdbProcess_.R +++ b/KVshiny/R/utils_pdbProcess_.R @@ -12,12 +12,12 @@ #' @export report_nonstand <- function(pdb_input) { - + pdb <- tryCatch({read.pdb(pdb_input)}, error = function(err) { return(NA) }) - + if(!is.na(pdb)) { #get protein indx_p <- atom.select(pdb, string = "protein", inverse= TRUE) @@ -43,40 +43,46 @@ report_nonstand <- function(pdb_input) { #' @param pdb_input Pdb path #' @param nonstand_list List of non-standard residues #' @param include_list List of non-standard residues that must be maintained in the PDB +#' @param session #' #' @import bio3d +#' @import shinyWidgets #' #' @examples #' #' @export #' -deal_sele_nonstand <- function(pdb_input, nonstand_list, include_list){ - pdb <- read.pdb(pdb_input) - - if(is.null(include_list)){ - #get nonstandard selected - indx_s <- atom.select(pdb, resid = nonstand_list, inverse = TRUE) - #subset pdb - clean_pdb <- trim.pdb(pdb, indx_s) - #create random number to name file - rand <- sample(x = 1:100000,size = 1) - outfile = file.path(tempdir(), paste(rand,".pdb",sep = "")) - #write tmp - write.pdb(pdb = clean_pdb, file = outfile) - return(outfile) - } else { - indx_s <- atom.select(pdb, resid = nonstand_list, inverse = TRUE) - indx_i <- atom.select(pdb, resid = include_list) - indx <- combine.select(indx_s, indx_i, operator= "OR") - clean_pdb <- trim.pdb(pdb, indx) - #create random number to name file - rand <- sample(x = 1:100000,size = 1) - outfile = file.path(tempdir(), paste(rand,".pdb",sep = "")) - #write tmp - write.pdb(pdb = clean_pdb, file = outfile) - return(outfile) +deal_sele_nonstand <- function(pdb_input, nonstand_list, include_list, session = session){ + tryCatch({ #test if the pdb_input is an appropriated PDB ID and if the read,pdb function can download successfully this pdb + pdb <- read.pdb(pdb_input) + if(is.null(include_list)){ + #get nonstandard selected + indx_s <- atom.select(pdb, resid = nonstand_list, inverse = TRUE) + #subset pdb + clean_pdb <- trim.pdb(pdb, indx_s) + #create random number to name file + rand <- sample(x = 1:100000,size = 1) + outfile = file.path(tempdir(), paste(rand,".pdb",sep = "")) + #write tmp + write.pdb(pdb = clean_pdb, file = outfile) + return(outfile) + } else { + indx_s <- atom.select(pdb, resid = nonstand_list, inverse = TRUE) + indx_i <- atom.select(pdb, resid = include_list) + indx <- combine.select(indx_s, indx_i, operator= "OR") + clean_pdb <- trim.pdb(pdb, indx) + #create random number to name file + rand <- sample(x = 1:100000,size = 1) + outfile = file.path(tempdir(), paste(rand,".pdb",sep = "")) + #write tmp + write.pdb(pdb = clean_pdb, file = outfile) + return(outfile) + } + }, error = function(e){ + shinyWidgets::sendSweetAlert(session = session,title = "Oops!", text = "Please insert a valid PDB ID.", type = "error") } + ) } diff --git a/KVshiny/man/deal_sele_nonstand.Rd b/KVshiny/man/deal_sele_nonstand.Rd index 9afde8f..7f0f870 100644 --- a/KVshiny/man/deal_sele_nonstand.Rd +++ b/KVshiny/man/deal_sele_nonstand.Rd @@ -4,7 +4,7 @@ \alias{deal_sele_nonstand} \title{Process PDB file according to the selected non-standard residues} \usage{ -deal_sele_nonstand(pdb_input, nonstand_list, include_list) +deal_sele_nonstand(pdb_input, nonstand_list, include_list, session = session) } \arguments{ \item{pdb_input}{Pdb path} @@ -12,6 +12,8 @@ deal_sele_nonstand(pdb_input, nonstand_list, include_list) \item{nonstand_list}{List of non-standard residues} \item{include_list}{List of non-standard residues that must be maintained in the PDB} + +\item{session}{} } \description{ Process PDB file according to the selected non-standard residues From 30ea849dec3b45a213d9c4e2477950c6cb9c5fbe Mon Sep 17 00:00:00 2001 From: Helder Ribeiro Date: Thu, 25 Aug 2022 17:00:12 -0300 Subject: [PATCH 3/3] update NAMESPACE AND DESCRIPTION --- KVshiny/DESCRIPTION | 5 +++-- KVshiny/NAMESPACE | 4 +--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/KVshiny/DESCRIPTION b/KVshiny/DESCRIPTION index 4410c6c..6fb93ba 100644 --- a/KVshiny/DESCRIPTION +++ b/KVshiny/DESCRIPTION @@ -25,9 +25,10 @@ Imports: rjson, rlang, shiny (>= 1.7.1), - shinyalert, shinycssloaders, - shinyjs + shinyfullscreen, + shinyjs, + shinyWidgets Encoding: UTF-8 LazyData: true RoxygenNote: 7.1.2 diff --git a/KVshiny/NAMESPACE b/KVshiny/NAMESPACE index ca21463..9ba8b02 100644 --- a/KVshiny/NAMESPACE +++ b/KVshiny/NAMESPACE @@ -19,9 +19,7 @@ export(kv_help) export(kv_params) export(pdb_process) export(process_fetch) -export(process_fetch_ligmode) export(process_upload) -export(process_upload_ligmode) export(report_nonstand) export(run_app) export(select_cav) @@ -43,7 +41,7 @@ import(readr) import(rjson) import(rlang) import(shiny) -import(shinyalert) +import(shinyWidgets) import(shinycssloaders) import(shinyfullscreen) import(shinyjs)