#' @title Create a card with some vessel's statistics
#'
#' @description Create a card with some vessel's statistics
#'
#' @param marine_stats A data.frame with marine's stats
#'
#' @export
vessel_stats <- function(marine_stats) {
vessel_flag <- marine_stats$flag_img
vessel_name <- stringr::str_to_upper(string = marine_stats$vessel_name)
vessel_img <- marine_stats$vessel_img
vessel_img <- ifelse(
test = RCurl::url.exists(url = vessel_img),
yes = vessel_img,
no = "https://lowcostmfg.com/images/product/photo-not-available.jpg"
)
from_text <- marine_stats$port
dep_text <- lubridate::as_datetime(marine_stats$start_date)
to_text <- marine_stats$destination
arr_text <- lubridate::as_datetime(marine_stats$final_date)
vessel_length <- marine_stats$length
vessel_dwt <- marine_stats$dwt
n_msg_mov <- marine_stats$n_msg_mov
speed <- ifelse(is.infinite(x = marine_stats$speed_mov), "-", paste(round(marine_stats$speed_mov, 2), "kt."))
dist <- ifelse(test = is.infinite(x = marine_stats$dist), "-", round(marine_stats$dist, 2))
hours <- marine_stats$time_diff > 60
time <- ifelse(
test = hours,
yes = paste(round(x = marine_stats$time_diff/60, digits = 2), "hrs."),
no = paste(round(x = marine_stats$time_diff, digits = 2), "min.")
)
time <- ifelse(test = dist == 0, "-", time)
out <- shiny.semantic::card(
style = "border-radius: 0; width: 100%; background: #efefef; margin-top: 20px;",
shiny::div(
class = "content",
shiny::div(
class = "header", style = "margin-bottom: 10px",
shiny::tags$img(
src = vessel_flag,
class = "ui mini spaced image"
),
vessel_name
),
shiny::hr(),
shiny.semantic::grid(
grid_template = shiny.semantic::grid_template(
default = list(
areas = rbind(
c("from", "from_ans", "departure"),
c("to", "to_ans", "arrival")
),
cols_width = c("20%", "40%", "40%")
)
),
from = shiny::h5("From:", class = "vessel_info"),
from_ans = shiny::h4(from_text, class = "vessel_info bold"),
to = shiny::h5("To:", class = "vessel_info"),
to_ans = shiny::h4(to_text, class = "vessel_info bold"),
departure = shiny::h5(dep_text, class = "vessel_info", style = "font-size: 10px; float: right;"),
arrival = shiny::h5(arr_text, class = "vessel_info", style = "font-size: 10px; float: right;")
),
shiny::hr(),
shiny::br(),
shiny::tags$img(
src = vessel_img,
class = "ui massive image",
style = "max-height: 250px"
),
shiny.semantic::grid(
grid_template = shiny.semantic::grid_template(
default = list(
areas = rbind(
c("info", "info", "info", "info"),
c("length", "length_ans", "msg", "msg_ans"),
c("dwt", "dwt_ans", "speed", "speed_ans"),
c("signal", "signal", "signal", "signal"),
c("dist", "dist_ans", "time", "time_ans")
),
cols_width = c("20%", "30%", "30%", "20%")
)
),
info = shiny::h4("Vessel's information:", class = "vessel_info bold", style = "padding: 15px 0px 15px 0px"),
length = shiny::h5("Length:", class = "vessel_info"),
length_ans = shiny::h4(paste(vessel_length, "m."), class = "vessel_info bold"),
dwt = shiny::h5("DWT:", class = "vessel_info"),
dwt_ans = shiny::h4(paste(vessel_dwt, "T."), class = "vessel_info bold"),
msg = shiny::h5("# answers:", class = "vessel_info"),
msg_ans = shiny::h4(n_msg_mov, class = "vessel_info bold"),
speed = shiny::h5("Av. speed:", class = "vessel_info"),
speed_ans = shiny::h4(speed, class = "vessel_info bold"),
signal = shiny::h4("Longest distance without a message:", class = "vessel_info bold", style = "padding: 15px 0px 15px 0px"),
dist = shiny::h5("Distance:", class = "vessel_info"),
dist_ans = shiny::h4(paste(round(x = dist), "m."), class = "vessel_info bold"),
time = shiny::h5("Time:", class = "vessel_info"),
time_ans = shiny::h5(time, class = "vessel_info bold")
)
)
)
return(out)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.