Proyectos de Subversion LeadersLinked - SPA

Rev

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

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