R/vessel_stats.R

Defines functions vessel_stats

Documented in vessel_stats

#' @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)
}
DouglasMesquita/marineApp documentation built on Dec. 17, 2021, 5:29 p.m.