Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
2388 stevensc 1
import React, { useEffect, useState } from 'react'
2614 stevensc 2
import { useNavigate, useParams } from 'react-router-dom'
2403 stevensc 3
import { useDispatch, useSelector } from 'react-redux'
2806 stevensc 4
import { Box, Grid } from '@mui/material'
2368 stevensc 5
import parse from 'html-react-parser'
2362 stevensc 6
 
2390 stevensc 7
import { axios } from '@app/utils'
2403 stevensc 8
import { addNotification } from '@app/redux/notification/notification.actions'
2780 stevensc 9
import { useFetch } from '@hooks'
2385 stevensc 10
 
2362 stevensc 11
import Widget from '@app/components/UI/Widget'
2369 stevensc 12
import AuthNavbar from '@app/components/UI/auth-navbar'
2403 stevensc 13
import Button from '@app/components/UI/buttons/Buttons'
2362 stevensc 14
 
15
function ShorterPostPage() {
2385 stevensc 16
  const { id } = useParams()
2614 stevensc 17
  const navigate = useNavigate()
2403 stevensc 18
 
2388 stevensc 19
  const [post, setPost] = useState({})
2403 stevensc 20
  const dispatch = useDispatch()
3396 stevensc 21
  const { is_logged_in } = useSelector((state) => state.auth)
2368 stevensc 22
 
2403 stevensc 23
  const { data } = useFetch(`/shorter/${id}`, null)
24
 
2388 stevensc 25
  const getPost = async (url) => {
2390 stevensc 26
    return await axios.get(url).then((res) => res.data.data)
2388 stevensc 27
  }
2385 stevensc 28
 
2614 stevensc 29
  const handleClick = () => navigate('/signin')
2403 stevensc 30
 
2388 stevensc 31
  useEffect(() => {
2390 stevensc 32
    if (!data) return
2402 stevensc 33
    if (data?.redirect) {
34
      const redirectUrl = data?.url.split('.com')[1]
2614 stevensc 35
      navigate(redirectUrl)
2402 stevensc 36
      return
37
    }
2388 stevensc 38
 
2389 stevensc 39
    getPost(data?.url)
2388 stevensc 40
      .then((post) => setPost(post))
2403 stevensc 41
      .catch((error) => {
42
        console.log(error)
43
        dispatch(
44
          addNotification({
45
            style: 'danger',
46
            msg: 'Ha ocurrido un error al obtener la información del post. Por favor, intentelo nuevamente.'
47
          })
48
        )
49
      })
2388 stevensc 50
  }, [data])
51
 
2362 stevensc 52
  return (
2369 stevensc 53
    <>
3396 stevensc 54
      {!is_logged_in ? <AuthNavbar /> : null}
2362 stevensc 55
 
2806 stevensc 56
      <Grid
57
        container
58
        sx={{
59
          display: 'flex',
60
          justifyContent: 'center',
61
          alignItems: 'center'
62
        }}
63
      >
64
        <Grid item xs={12} md={8}>
65
          <Widget>
66
            <Widget.Media alt={post.title} src={post.image} height={450} />
2404 stevensc 67
 
2806 stevensc 68
            <Widget.Body>
69
              {parse(post.description ?? '')}
70
 
71
              <Box
72
                sx={{
73
                  display: 'flex',
74
                  flexDirection: 'column',
75
                  justifyContent: 'center',
76
                  alignItems: 'center',
77
                  mt: 2
78
                }}
79
              >
80
                <p>
81
                  Inicie sesion para visualizar los detalles de la publicación.
82
                </p>
3156 stevensc 83
                <Button onClick={handleClick} color='primary'>
2806 stevensc 84
                  Iniciar Sesión
85
                </Button>
86
              </Box>
87
            </Widget.Body>
88
          </Widget>
2362 stevensc 89
        </Grid>
2806 stevensc 90
      </Grid>
2369 stevensc 91
    </>
2362 stevensc 92
  )
93
}
94
 
95
export default ShorterPostPage