Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1507 | Rev 2278 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
2277 stevensc 1
import React from 'react'
861 stevensc 2
import { Link } from 'react-router-dom'
3
import { useSelector } from 'react-redux'
4
import styled from 'styled-components'
5 stevensc 5
 
2277 stevensc 6
import useFetch from '@app/hooks/useFetch'
5 stevensc 7
 
2277 stevensc 8
import Widget from '@app/components/UI/Widget'
9
import EmptySection from '@app/components/UI/EmptySection'
10
 
861 stevensc 11
const StyledNewsList = styled.ul`
12
  display: flex;
13
  flex-direction: column;
14
  gap: 0.5rem;
15
  max-height: 380px;
864 stevensc 16
  padding-bottom: 10px;
861 stevensc 17
  overflow: auto;
18
`
5 stevensc 19
 
861 stevensc 20
const StyledNewItem = styled.div`
21
  display: flex;
22
  gap: 0.5rem;
890 stevensc 23
  > a:first-child {
24
    flex-shrink: 0;
25
  }
861 stevensc 26
  img {
862 stevensc 27
    width: 100px;
890 stevensc 28
    aspect-ratio: 100/60;
861 stevensc 29
    object-fit: cover;
30
  }
31
  .post-info {
32
    display: flex;
33
    flex-direction: column;
891 stevensc 34
    flex: 1 1 50%;
35
    max-width: calc(100% - (100px + 0.5rem));
861 stevensc 36
    h4 {
37
      font-weight: 600;
38
      font-size: 1.2rem;
890 stevensc 39
      color: var(--subtitle-color);
40
      overflow: hidden;
891 stevensc 41
      white-space: nowrap;
42
      text-overflow: ellipsis;
861 stevensc 43
    }
44
    span {
890 stevensc 45
      color: var(--font-color);
861 stevensc 46
      font-size: 0.8rem;
47
    }
48
  }
49
`
50
 
5 stevensc 51
export default function HomeNews({ currentPost }) {
2277 stevensc 52
  const { data: news } = useFetch('/helpers/posts')
861 stevensc 53
  const labels = useSelector(({ intl }) => intl.labels)
5 stevensc 54
 
55
  return (
2277 stevensc 56
    <Widget>
57
      <Widget.Header title={labels.posts} />
861 stevensc 58
 
2277 stevensc 59
      <Widget.Body>
862 stevensc 60
        <StyledNewsList>
61
          {!news.length ? (
62
            <EmptySection message={labels.not_available_posts} />
63
          ) : (
64
            news.map(({ link, title, image, date }) => {
65
              if (link.includes(currentPost)) return null
5 stevensc 66
 
862 stevensc 67
              return (
68
                <StyledNewItem key={title}>
861 stevensc 69
                  <Link to={link}>
862 stevensc 70
                    <img src={image} alt={`${title} image`} />
5 stevensc 71
                  </Link>
862 stevensc 72
 
73
                  <div className='post-info'>
74
                    <Link to={link}>
75
                      <h4 title={title}>{title}</h4>
76
                    </Link>
77
                    <span>{date}</span>
78
                  </div>
79
                </StyledNewItem>
80
              )
81
            })
82
          )}
83
        </StyledNewsList>
2277 stevensc 84
      </Widget.Body>
85
    </Widget>
861 stevensc 86
  )
5 stevensc 87
}