@@ -2,50 +2,72 @@ import React from "react"
22import { useBlog } from "../../hooks"
33import BlogGrid from "./BlogGrid/BlogGrid"
44import BlogArticle from "./BlogArticle/BlogArticle"
5- import { Layaout } from ".."
6- import Banner from "../Banner/Banner"
75import Seo from "../Seo/Seo"
8-
9-
6+ import Layout from "../layout"
7+ import Banner from "../Banner/Banner"
108import "./BlogContainer.scss"
119
1210const Blog = ( ) => {
11+ const { allStrapiBlogCategory, allStrapiArticle, allStrapiBlogPage } = useBlog ( )
12+ const categorias = allStrapiBlogCategory . nodes
13+ const articulos = allStrapiArticle . nodes
14+ const { seo, banner } = allStrapiBlogPage . nodes [ 0 ] || { }
15+ const callToAction = allStrapiBlogPage . nodes [ 0 ] ?. callToActionArticle
1316
14- const blogData = useBlog ( )
15- const data = blogData ?. allStrapiBlogCategory ?. nodes
16- const dataArticles = blogData ?. allStrapiArticle ?. nodes
17- const defaultCategory = data [ 0 ] ?. name
18- const filterArticle = data . map ( category => dataArticles . filter ( article => category . name === article ?. blog_category ?. name || defaultCategory ) )
19- const { seo, banner, callToAction } = blogData . allStrapiBlogPage . nodes [ 0 ]
17+ // Para cada categoría, tomo los primeros 3 artículos sin lógica de destacados
18+ const articulosPorCategoria = categorias
19+ . map ( categoria => {
20+ const articulosCat = articulos
21+ . filter ( art => art . blog_category ?. slug === categoria . slug )
22+ . sort ( ( a , b ) => {
23+ // Primero los destacados (true = 1, false = 0)
24+ if ( a . destacado !== b . destacado ) {
25+ return a . destacado ? - 1 : 1
26+ }
2027
28+ // Si ambos son igual en destacado, ordenar por fecha (más nuevo primero)
29+ const fechaA = new Date ( a . publishedAt )
30+ const fechaB = new Date ( b . publishedAt )
31+ return fechaB - fechaA
32+ } ) // <-- cierra el sort
2133
34+ return {
35+ name : categoria . name ,
36+ slug : categoria . slug ,
37+ items : articulosCat . slice ( 0 , 3 ) , // Tomar solo los primeros 3
38+ }
39+ } )
40+ . filter ( grupo => grupo . items . length > 0 )
2241 return (
23- < Layaout >
42+ < Layout >
2443 < Seo
25- title = { seo . pageTitle }
26- description = { seo . pageDescription }
27- keywords = { seo . pageKeywords }
44+ title = { seo ? .pageTitle }
45+ description = { seo ? .pageDescription }
46+ keywords = { seo ? .pageKeywords }
2847 />
2948 < Banner data = { banner } />
30- { data . length > 0 && (
31- < div className = "blog__container container" >
32- { filterArticle ?. map ( ( category , idx ) => (
33- < BlogGrid key = { data [ idx ] . name } title = { category [ 0 ] ?. blog_category ?. name } >
34- { category . map ( item => (
35- < BlogArticle
36- key = { item . id }
37- image = { item . image }
38- title = { item . title }
39- summary = { item . summary }
40- slug = { "/blog/" + item . slug }
41- text = { callToAction }
42- />
43- ) ) }
44- </ BlogGrid >
45- ) ) }
46- </ div >
47- ) }
48- </ Layaout >
49+
50+ < div className = "blog__container container" >
51+ { articulosPorCategoria . map ( ( { name, slug, items } ) => (
52+ < BlogGrid
53+ key = { slug }
54+ title = { name }
55+ viewAllHref = { `/blog/${ slug . toLowerCase ( ) } ` }
56+ >
57+ { items . map ( item => (
58+ < BlogArticle
59+ key = { item . id }
60+ image = { item . image || item . imagePage }
61+ title = { item . title }
62+ summary = { item . summary }
63+ slug = { `/blog/${ item . slug } ` }
64+ text = { callToAction }
65+ />
66+ ) ) }
67+ </ BlogGrid >
68+ ) ) }
69+ </ div >
70+ </ Layout >
4971 )
5072}
5173
0 commit comments