I have a Shiny
app that shows the database
as a DT
table. In this table there is a column called Project.File.Location
that contains a project's path
.
I want the app to have the ability to make these paths clickable
, so that when the user clicks on a path
the app will open that folder
.
How can I do this?
Please note that this app will not be deployed on the
RShiny
server rather I will be using theRInno
package to create a standalone desktop app.Based on Iz100's comments, maybe
flexdashboard
could be another option as it's an .Rmd file so I think doesn't deploy the app.
Sample Data:
structure(list(Reference.Number = c("33333", "44444", "22222",
"55555", "66666"), Request.Date = c("1/6/2022", "1/6/2022", "1/19/2022",
"1/20/2021", "1/24/2022"), Requestor.Name = c("Comm Dist 3 by Kitty",
"Comm Dist 3 by Kitty", "Updated maps for David",
" Stone Cold", "Updated SOE 60 inch wall map"), Requestor.Dept.Div = c("C 3 Staff",
"C 3 Staff", "Unincorp & Comm", "Mt.Rushmore AME Church Ft. Billy",
"SOE"), Requestor.Phone = c("", "", "", "", ""), Contact.Person = c("Tommy",
"Tommy", "Bob", "Bob", "Joe"), Contact.Phone = c("1111",
"2222", "3333", "ext 1111", "3434"), Deadline = c("1/20/2022",
"1/20/2022", "1/22/2022", "", "1/24/2022"), Project.Description = c("45x36 portrait map ",
"45x36 portrait map ",
"24x24 Unincorporated areas, "Percent Females Aged 25 - 55 Below Poverty Level By Zip Code",
"SOE Wall Map 60x60 p), Project.File.Location = c("",
"", "C:\\ABC\\Tommy\\work|Map-Projects\\BD Unincororated\\#14785 Unincorporated 24x24.pdf",
"C:\\ABC\\Demographics\\Demographic_Request\\FemalesAge10-18BelowPoveryLevel\\FemalesAge10-18BelowPoveryLevel.aprx",
"C:\\ABC\\Tommy\\work|Map-Projects\\BD Unincororated\\#14786 V P 60x60.pdf"
), PDF.File.....Map.Name.... = c("", "", "", "C:\\ABC\\Demographics\\Demographic_Request\\FemalesAge10-18BelowPoveryLevel\\pdfs\\MapNo14785.pdf",
""), Assigned.To = c("", "", "", "", ""), Completion.Date = c("",
"", "", "", ""), Notes = c(NA, NA, NA, NA, NA), Year = c(2022,
2022, 2022, 2022, 2022)), class = "data.frame", row.names = c(NA, -5L))
Code:
library(shiny)
library(shinythemes)
library(shinyWidgets)
library(shinyanimate)
library(DT)
library(tidyverse)
# Define UI for application that draws a histogram
ui = navbarPage(
tags$style("table, .table {color: unset;} .dataTable th, .datatables input {color: white}"),
title = div("GIS Team Projects"),
theme = shinytheme("cyborg"),
tabPanel("GIS Projects",
icon = icon("info"),
div(p(h1("Instructions:"),style="text-align: justify;")),
p("1. The user can add their project details.", style="color:black"),
uiOutput("all"),
sidebarLayout(
sidebarPanel(
actionButton("addData", "Add Project Details"),
),
mainPanel(
downloadButton("download1","Download data as csv"),
DTOutput("contents")),)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
myData = df
# Create an 'empty' tibble
user_table =
myData %>%
slice(1) %>%
# Transpose the first row of test into two columns
gather(key = "column_name", value = "value") %>%
# Replace all values with ""
mutate(value = "") %>%
# Reshape the data from long to wide
spread(column_name, value) %>%
# Rearrange the column order to match that of test
select(colnames(myData))
# Display data as is
output$contents =
renderDT(myData,
server = FALSE,
editable = TRUE,
options = list(lengthChange = TRUE),
rownames = FALSE)
# Store a proxy of contents
proxy = dataTableProxy(outputId = "contents")
# Each time addData is pressed, add user_table to proxy
observeEvent(eventExpr = input$addData, {
proxy %>%
addRow(user_table)
})
}
# Run the application
shinyApp(ui = ui, server = server)