diff --git a/server.R b/server.R index 86404b852697f184873e9665e74bff3ba5d3153b..90e2c87d46b24bc2179e0858e4943cd631b397b2 100644 --- a/server.R +++ b/server.R @@ -1,68 +1,68 @@ server <- function(input, output, session) { - r <- reactiveValues( filteredData = all_data, + filteredByProject = all_data, # Étape intermédiaire filtrée par daterange et project_name filteredTopics = NULL, filteredProjects = NULL, filteredAuthors = NULL, filteredReCodes = NULL, - filteredCategories = NULL + filteredCategories = NULL, + filteredByDate = NULL, ) - # Mise à jour des filtres selon la date + # Filtrage par date et project_name uniquement observeEvent(input$daterange, { req(input$daterange) - r$filteredData <- all_data %>% - filter(updated_at >= as.Date(input$daterange[[1]]) & - updated_at <= as.Date(input$daterange[[2]])) + r$filteredByDate <- all_data %>% + filter( + updated_at >= as.Date(input$daterange[[1]]) & + updated_at <= as.Date(input$daterange[[2]]) & + (if (length(input$project_name)) project_name %in% input$project_name else TRUE) + ) + updateFilters() # Mise à jour des choix basés sur le filtrage intermédiaire + }) + + # Mise à jour des autres filtres + observe({ + req(input$daterange) + r$filteredData <- r$filteredByDate %>% + filter( + (if (length(input$topics)) sapply(input$topics, function(t) grepl(t, topics)) %>% rowSums() > 0 else TRUE) & + (if (length(input$author)) author %in% input$author else TRUE) & + (if (length(input$re_code)) re_code %in% input$re_code else TRUE) & + (if (length(input$categorie)) categorie %in% input$categorie else TRUE) + ) updateFilters() }) - # Fonction de mise à jour des filtres + # Fonction de mise à jour des choix pour les filtres updateFilters <- reactive({ - filteredTopics <- r$filteredData$topics %>% - strsplit(",") %>% - unlist() %>% - trimws() %>% - unique() - updateSelectizeInput(session, "topics", choices = filteredTopics, selected = input$topics) - - updateSelectizeInput(session, "project_name", choices = unique(r$filteredData$project_name), selected = input$project_name) - updateSelectizeInput(session, "author", choices = unique(r$filteredData$author), selected = input$author) - updateSelectizeInput(session, "re_code", choices = unique(r$filteredData$re_code), selected = input$re_code) - updateSelectizeInput(session, "categorie", choices = unique(r$filteredData$categorie), selected = input$categorie) + # Basé sur les données filtrées par date et projet + updateSelectizeInput(session, "topics", choices = unique(r$filteredByDate$topics)%>% + strsplit(split = ",") %>% # Divise les chaînes en éléments séparés + unlist() %>% # Aplatit la liste obtenue + na.omit() %>% # Supprime les NA (au cas où) + .[. != ""] %>% # Supprime les chaînes vides + trimws() %>% # suppremie les espace avnt et apres + unique() , selected = input$topics) + updateSelectizeInput(session, "author", choices = unique(r$filteredByDate$author), selected = input$author) + updateSelectizeInput(session, "categorie", choices = unique(r$filteredByDate$categorie), selected = input$categorie) + + # Basé uniquement sur les données globales pour éviter que project_name soit affecté + updateSelectizeInput(session, "project_name", choices = sort(unique(r$filteredByDate$project_name)), selected = input$project_name) }) - # Réinitialisation des filtres sauf les dates + # Réinitialisation des filtres observeEvent(input$reset, { - r$filteredData <- all_data %>% + r$filteredByDate <- all_data %>% filter(updated_at >= as.Date(input$daterange[[1]]) & updated_at <= as.Date(input$daterange[[2]])) + r$filteredData <- r$filteredByDate updateSelectizeInput(session, "topics", selected = NULL) - updateSelectizeInput(session, "project_name", selected = NULL) updateSelectizeInput(session, "author", selected = NULL) - updateSelectizeInput(session, "re_code", selected = NULL) updateSelectizeInput(session, "categorie", selected = NULL) updateFilters() }) - - # Mise à jour des données filtrées - observe({ - req(input$daterange) - r$filteredData <- all_data %>% - filter( - updated_at >= as.Date(input$daterange[[1]]) & - updated_at <= as.Date(input$daterange[[2]]) & - (if (length(input$topics)) sapply(input$topics, function(t) grepl(t, topics)) %>% rowSums() > 0 else TRUE) & - (if (length(input$project_name)) project_name %in% input$project_name else TRUE) & - (if (length(input$author)) author %in% input$author else TRUE) & - (if (length(input$re_code)) re_code %in% input$re_code else TRUE) & - (if (length(input$categorie)) categorie %in% input$categorie else TRUE) - ) - updateFilters() - }) - - # Liens dynamiques pour les projets va partir car les projet en sous groupe ne fonctionne pas output$lien <- renderUI({ projects_with_links <- r$filteredData %>% filter(origine == "Gitlab_Forge" & project_name %in% input$project_name) @@ -87,7 +87,6 @@ server <- function(input, output, session) { ggplot2::labs(shape = "Événement", color = "Événement", x = "") + ggplot2::scale_x_datetime(timezone = "Europe/Paris") + gouvdown::theme_gouv()+ - gouvdown::scale_color_gouv_discrete(palette = "pal_gouv_qual2")+ ggplot2::theme( axis.text.x = ggplot2::element_text(angle = 0, hjust = 1), axis.title.y = ggplot2::element_blank() @@ -96,6 +95,7 @@ server <- function(input, output, session) { plotly::ggplotly(p, tooltip = "text") }) + output$table <- renderDataTable({ req(r$filteredData) datatable(r$filteredData , @@ -111,4 +111,8 @@ server <- function(input, output, session) { ) }) + + + + }