R/app_server.R

Defines functions app_server

#' The application server-side
#' 
#' @param input,output,session Internal parameters for {shiny}. 
#'     DO NOT REMOVE.
#' @import shiny
#' @importFrom dplyr mutate filter select rename
#' @importFrom rmarkdown render
#' @importFrom shinyalert shinyalert
#' @importFrom DT renderDT JS
#' @noRd
app_server <- function( input, output, session ) {
  
  ## Listagem (Busca de Louvores)
  da_lyrics <- eventReactive(input$search_btn, {
    if(input$search_btn > 0 & input$search_string != "") {
      da_lyrics <- lyrics |> 
        mutate(similar = agrepl(input$search_string, .data[[input$search_method]])) |> 
        filter(similar) |> select(-similar)
    } else {
      da_lyrics <- lyrics
    }
    rename(da_lyrics, "Artista" = artist, "Louvor" = music, "Letra" = lyric)
  }, ignoreNULL = FALSE)
  
  ## Adiciona Letra do Louvor Selecionado no Editor
  observeEvent(input$lyrics_tbl_rows_selected, {
    updateTextAreaInput(session, "lyrics_editor",
                        value = da_lyrics()[input$lyrics_tbl_rows_selected,]$Letra)
  })
  
  ## Livro da Biblia Selecionado
  bible_reactive <- reactive({
    filter(bible, book == input$book)
  })
  
  ## Capitulo da Biblia Selecionado
  observeEvent(input$book, {
    freezeReactiveValue(input, "chapter")
    updateSelectInput(inputId = "chapter", choices = unique(bible_reactive()$chapter))
  })
  
  ## Cria Slide Biblia
  observeEvent(input$create_slide_bible_btn, {
    print(bible_reactive())
    print(input$chapter)
    params_list <- list(set_artist = filter(bible_reactive(), chapter == input$chapter)$book, 
                        set_music  = filter(bible_reactive(), chapter == input$chapter)$chapter, 
                        set_lyric = filter(bible_reactive(), chapter == input$chapter)$verses)
    render("inst/template-rmd/template_bible.Rmd", params = params_list)
    shinyalert(title = "Slide Criado!", text = 'Clique em "Abrir Slide" para visualizar',
               size = "s", closeOnEsc = TRUE, closeOnClickOutside = FALSE,
               html = FALSE, type = "success", showConfirmButton = TRUE, showCancelButton = FALSE,
               confirmButtonText = "OK", confirmButtonCol = "#AEDEF4", timer = 0,
               imageUrl = "", animation = TRUE)
    if(input$open_slide_bible_cbox) file.show("inst/template-rmd/template_bible.html")
  })
  
  ## Cria Slide Louvor
  observeEvent(input$create_slide_btn, {
    if((input$lyrics_editor) != "" & !is.null(input$lyrics_tbl_rows_selected)) {
      params_list <- list(set_artist = da_lyrics()[input$lyrics_tbl_rows_selected,]$Artista, 
                          set_music  = da_lyrics()[input$lyrics_tbl_rows_selected,]$Louvor, 
                          set_lyric = da_lyrics()[input$lyrics_tbl_rows_selected,]$Letra)
      render("inst/template-rmd/template_lyrics.Rmd", params = params_list)
      shinyalert(title = "Slide Criado!", text = 'Clique em "Abrir Slide" para visualizar',
                 size = "s", closeOnEsc = TRUE, closeOnClickOutside = FALSE,
                 html = FALSE, type = "success", showConfirmButton = TRUE, showCancelButton = FALSE,
                 confirmButtonText = "OK", confirmButtonCol = "#AEDEF4", timer = 0,
                 imageUrl = "", animation = TRUE)
      if(input$open_slide_cbox) file.show("inst/template-rmd/template_lyrics.html")
    } else {
      shinyalert(title = "Erro!", text = 'Nenhum louvor foi selecionado e adicionado ao editor',
                 size = "s", closeOnEsc = TRUE, closeOnClickOutside = FALSE,
                 html = FALSE, type = "error", showConfirmButton = TRUE, showCancelButton = FALSE,
                 confirmButtonText = "OK", confirmButtonCol = "#AEDEF4", timer = 0,
                 imageUrl = "", animation = TRUE)
    }
  })
  
  ## Cria a Lista de Louvores
  output$lyrics_tbl = renderDT(
    da_lyrics(), rownames = FALSE, selection = 'single',
    options = list(
      pageLength = 8,
      initComplete = JS(
        "function(settings, json) {",
        "$(this.api().table().header()).css({'font-size': '85%'});",
        "}"),
      dom = 'tp',
      language = list(
        zeroRecords = "Nenhuma can\u00e7\u00e3o encontrada. Redefina a busca ou tente novamente com uma frase menor.",
        search = 'Digite parte do nome ou da letra do Louvor:',
        paginate = list(
          'next' = "Pr\u00f3ximo",
          previous = "Anterior"
        )
      ),
      columnDefs = list(list(
        targets = 0,
        render = JS(
          "function(data, type, row, meta) {",
          "return type === 'display' && data != null && data.length > 20 ?",
          "'<span title=\"' + data + '\">' + data.substr(0, 20) + '...</span>' : data;",
          "}")
      ), list(
        targets = 1,
        render = JS(
          "function(data, type, row, meta) {",
          "return type === 'display' && data != null && data.length > 30 ?",
          "'<span title=\"' + data + '\">' + data.substr(0, 30) + '...</span>' : data;",
          "}")
      ), list(
        targets = 2,
        render = JS(
          "function(data, type, row, meta) {",
          "return type === 'display' && data != null && data.length > 55 ?",
          "'<span title=\"' + data + '\">' + data.substr(0, 55) + '...</span>' : data;",
          "}")
      ), list(width = '20%', targets = list(0)), 
      list(width = '30%', targets = list(1)))),
    class = "display"
  )
}
damarals/gospel.slides documentation built on March 19, 2022, 10:50 a.m.