Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2389 | Rev 2391 | 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'
2
import { useHistory, useParams } from 'react-router-dom'
2369 stevensc 3
import { useSelector } from 'react-redux'
2362 stevensc 4
import { Container, Grid } from '@mui/material'
2368 stevensc 5
import parse from 'html-react-parser'
2362 stevensc 6
 
2390 stevensc 7
import { axios } from '@app/utils'
2385 stevensc 8
import useFetch from '@app/hooks/useFetch'
9
 
2362 stevensc 10
import Widget from '@app/components/UI/Widget'
2368 stevensc 11
import SurveyForm from '@app/components/survey-form/SurveyForm'
2369 stevensc 12
import AuthNavbar from '@app/components/UI/auth-navbar'
2362 stevensc 13
 
14
function ShorterPostPage() {
2385 stevensc 15
  const { id } = useParams()
2388 stevensc 16
  const history = useHistory()
2385 stevensc 17
  const { data } = useFetch(`/shorter/${id}`, null)
2388 stevensc 18
  const [post, setPost] = useState({})
19
  const { isAuth } = useSelector((state) => state.auth)
2368 stevensc 20
 
2388 stevensc 21
  const getPost = async (url) => {
2390 stevensc 22
    return await axios.get(url).then((res) => res.data.data)
2388 stevensc 23
  }
2385 stevensc 24
 
2388 stevensc 25
  useEffect(() => {
2390 stevensc 26
    if (!data) return
2389 stevensc 27
    if (data?.redirect) return history.replace(data?.url)
2388 stevensc 28
 
2389 stevensc 29
    getPost(data?.url)
2388 stevensc 30
      .then((post) => setPost(post))
31
      .catch((error) => console.log(error))
32
  }, [data])
33
 
2362 stevensc 34
  return (
2369 stevensc 35
    <>
36
      {!isAuth ? <AuthNavbar /> : null}
37
      <Container>
38
        <Grid
39
          container
40
          sx={{
41
            display: 'flex',
42
            justifyContent: 'center',
43
            alignItems: 'center'
44
          }}
45
        >
46
          <Grid item xs={12} md={8}>
47
            <Widget>
2388 stevensc 48
              <Widget.Header
49
                avatar={post.shared_image}
50
                title={post.shared_title}
51
              />
2362 stevensc 52
 
2369 stevensc 53
              <Widget.Body>
2385 stevensc 54
                <FeedContent
55
                  type='description'
2388 stevensc 56
                  content={{ owner_description: post.shared_description ?? '' }}
2385 stevensc 57
                />
2369 stevensc 58
              </Widget.Body>
59
            </Widget>
60
          </Grid>
2362 stevensc 61
        </Grid>
2369 stevensc 62
      </Container>
63
    </>
2362 stevensc 64
  )
65
}
66
 
2385 stevensc 67
const FeedContent = ({ type, content }) => {
2368 stevensc 68
  const renderContent = ({
69
    owner_description,
70
    owner_file_image_preview,
71
    owner_file_video,
72
    owner_file_image,
73
    shared_name,
74
    shared_image,
75
    shared_time_elapse,
76
    feed_vote_url
77
  }) => {
2385 stevensc 78
    switch (type) {
2368 stevensc 79
      case 'fast-survey': {
80
        const answers = []
81
        const votes = []
82
 
83
        for (let i = 1; i < 6; i++) {
84
          answers.push(owner_description[`answer${i}`])
85
          votes.push(owner_description[`votes${i}`])
86
        }
87
 
88
        return (
89
          <SurveyForm
90
            active={owner_description.active}
91
            question={owner_description.question}
92
            answers={answers}
93
            votes={votes}
94
            time={owner_description.time_remaining}
95
            voteUrl={feed_vote_url}
96
            resultType={owner_description.result_type}
97
          />
98
        )
99
      }
100
 
101
      case 'video': {
102
        return (
103
          <>
104
            {parse(owner_description ?? '')}
105
            <video controls poster={owner_file_image_preview}>
106
              <source src={owner_file_video} />
107
            </video>
108
          </>
109
        )
110
      }
111
 
112
      case 'image': {
113
        return (
114
          <>
115
            {parse(owner_description ?? '')}
116
            <img src={owner_file_image} loading='lazy' />
117
          </>
118
        )
119
      }
120
 
121
      case 'document': {
122
        return (
123
          <>
124
            {parse(owner_description ?? '')}
125
            <a href={document} target='_blank' rel='noreferrer'>
126
              <img className='pdf' src='/images/extension/pdf.png' alt='pdf' />
127
            </a>
128
          </>
129
        )
130
      }
131
 
132
      case 'shared': {
133
        return (
134
          <>
135
            {parse(owner_description ?? '')}
136
            <Widget>
137
              <Widget.Header
138
                avatar={shared_image}
139
                title={shared_name}
140
                subheader={shared_time_elapse}
141
              />
142
 
143
              <Widget.Body>
144
                {renderContent({
145
                  owner_description,
146
                  owner_file_image_preview,
147
                  owner_file_video,
148
                  owner_file_image,
149
                  shared_name,
150
                  shared_image,
151
                  shared_time_elapse,
152
                  feed_vote_url
153
                })}
154
              </Widget.Body>
155
            </Widget>
156
          </>
157
        )
158
      }
159
 
160
      default: {
2385 stevensc 161
        return parse(owner_description)
2368 stevensc 162
      }
163
    }
164
  }
165
 
2385 stevensc 166
  return <>{renderContent(content)}</>
2368 stevensc 167
}
168
 
2362 stevensc 169
export default ShorterPostPage