Skip to content

Rediseño da interface con bslib (mantendo o core de R) - #2

Merged
inesortega merged 5 commits into
masterfrom
redesign-bslib
Jun 28, 2026
Merged

Rediseño da interface con bslib (mantendo o core de R)#2
inesortega merged 5 commits into
masterfrom
redesign-bslib

Conversation

@inesortega

@inesortega inesortega commented Jun 27, 2026

Copy link
Copy Markdown
Owner

Resumo

Rediseño visual completo da aplicación Shiny para unha estética máis moderna e limpa, mantendo intacto o core de R (lóxica do servidor, reactivos, mapa, estatísticas e data_loader.R). A nova interface adopta a identidade visual da web do proxecto: paleta teal (#136f6f), fondo claro (#f7fbfb) e tipografía Inter.

Os cambios concéntranse en dous ficheiros: o obxecto ui de app.R e a folla de estilos www/styles.css.

Que cambia (capa de interface)

  • Framework: migración de shinydashboardbslib (Bootstrap 5): page_navbar + sidebar() + nav_panel() + card() + value_box(). Elimínanse shinydashboard e shinythemes do código e os ~15 tags$style(HTML(...)) dispersos, consolidados nun único www/styles.css.
  • Cabeceira: logotipo, título con subtítulo, pestanas con icona como pills teal, badge «NOVO» en Datos e estatísticas e indicador «En directo».
  • Panel de filtros: rango de datas compacto (dateRangeInput) que cabe no panel, chips de cor por tipo de actualización (atenúanse os non seleccionados) e selectores de provincia/concello.
  • Mapa: basemap limpo CartoDB.Positron. Os popups rediséñanse como tarxeta ao estilo do mockup (chip de estado, título, subtítulo, lista de datos e pé con ligazóns), con información distinta segundo o tipo (residuos, praia limpa, convocatoria de limpeza, outras convocatorias) e ligazóns ás imaxes.
  • Datos e estatísticas: tarxetas KPI cun número grande e gráficas (ggplot2) co tema coherente.
  • Outros: footer sempre fixo ao fondo, lenda do mapa como tarxeta con puntos redondos, e limpeza do panel lateral (a información do punto sae agora no popup, non no lateral).

Que se mantén intacto (core de R)

  • Todos os inputId/outputId → o server funciona igual.
  • data(), filtros, leafletProxy, marcadores, estatísticas e gráficas: sen cambios de lóxica.
  • data_loader.R: sen tocar.
  • O navbar usa id = "sidebarID" para conservar input$sidebarID == "map".

Melloras e correccións incluídas

  • Rango de datas por defecto = último mes con datos dispoñibles (calcúlase no servidor ao cargar).
  • Corrección de url_encode_vector: nos puntos con varias imaxes pasábaselle un vector a unha función que asume un escalar (if(!is.na(x))), provocando "the condition has length > 1". Agora codifícase cada URL por separado.
  • Filtrado de coordenadas inválidas antes de pintar marcadores (evita o aviso de validateCoords e fallos de leaflet); as filas sen coordenadas seguen contando nas estatísticas.

Verificación

  • parse() correcto e construción do obxecto ui (bslib) sen erros.
  • Smoke test de execución na imaxe linux/amd64: a app arranca e serve HTTP 200 (Listening on 0.0.0.0:3838), sen erros.
  • Reproducidas e corrixidas as incidencias de runtime cos datos reais (praias.csv).

bslib xa está na imaxe (é dependencia de shiny), polo que non cómpre cambiar o Dockerfile.

inesortega and others added 5 commits June 27, 2026 16:55
- Migrar a UI de shinydashboard -> bslib: page_navbar + sidebar + nav_panel
  + card() + value_box(); elimínanse shinydashboard/shinythemes do código
- bs_theme coa identidade visual de inesortega.github.io (teal #136f6f,
  fondo #f7fbfb, tipografía Inter)
- Consolidar o CSS en www/styles.css (substitúe ~15 tags$style dispersos)
- Mapa: addProviderTiles(CartoDB.Positron) no canto de addTiles()
- KPIs: value_box + renderText/box_value (mesma computación de sempre)
- Gráficas: theme_minimal + paleta de categorías
- Mantéñense TODOS os inputId/outputId, reactivos, observers e data_loader.R;
  o navbar usa id='sidebarID' para conservar input$sidebarID == 'map'

Verificado: parse OK, build do obxecto ui OK, smoke test de runtime
(HTTP 200, "Listening on 0.0.0.0:3838", sen erros).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- "Tipo de actualización": checkboxGroupButtons como chips con punto de cor
  por categoría (mesmo inputId 'legendFilter' e mesmos valores -> server igual)
- Rótulos do panel como micro-rótulos (eyebrow) en maiúsculas
- Logotipo (onda) na marca da cabeceira
- Panel lateral en branco; slider e selects coa paleta teal

Verificado: parse OK, runtime HTTP 200, chips e logo presentes, sen erros.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@inesortega inesortega changed the title Rediseño da UI con bslib (mantendo o core de R) Rediseño da interface con bslib (mantendo o core de R) Jun 28, 2026
@inesortega inesortega self-assigned this Jun 28, 2026
@inesortega
inesortega merged commit 2162767 into master Jun 28, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant