Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
7065 stevensc 1
import React, { useEffect, useState } from 'react'
7066 stevensc 2
import { axios } from '../../utils'
7062 stevensc 3
import { useParams } from 'react-router-dom'
7066 stevensc 4
import { Col, Container, Row } from 'react-bootstrap'
5
import { addNotification } from '../../redux/notification/notification.actions'
6
import { useDispatch, useSelector } from 'react-redux'
7
import {
8
  Card,
9
  CardActions,
10
  CardContent,
11
  CardMedia,
12
  Typography,
13
} from '@mui/material'
14
import parse from 'html-react-parser'
7065 stevensc 15
import styled from 'styled-components'
7066 stevensc 16
import FileDownloadIcon from '@mui/icons-material/FileDownload'
7062 stevensc 17
 
7066 stevensc 18
import ReactionsButton from '../../components/UI/buttons/ReactionsButton'
19
 
7065 stevensc 20
const KnowledgeCard = styled(Card)`
21
  background-color: var(--bg-color);
22
  border-radius: var(--border-radius);
23
  overflow: hidden;
24
  height: fit-content;
25
`
26
 
7066 stevensc 27
const KnowledgeActions = styled(CardActions)`
7067 stevensc 28
  & > * {
7066 stevensc 29
    flex: 1;
30
    max-width: calc(100% / 3);
31
  }
32
`
33
 
7062 stevensc 34
const KnowledgeViewPage = () => {
7065 stevensc 35
  const [knowledge, setKnowledge] = useState({
36
    category: '',
37
    title: '',
38
    description: '',
39
    link: null,
40
    image: '',
41
    attachment: '',
42
    reaction: '',
43
    routeComments: '',
44
    routeCommentAdd: '',
45
    routeSaveReaction: '',
46
    routeDeleteReaction: '',
47
  })
48
  const labels = useSelector(({ intl }) => intl.labels)
49
  const dispatch = useDispatch()
7062 stevensc 50
  const { uuid } = useParams()
51
 
7066 stevensc 52
  const changeReaction = (reaction) => {
53
    setKnowledge((prevKnowledge) => ({ ...prevKnowledge, reaction }))
54
  }
55
 
7062 stevensc 56
  useEffect(() => {
57
    axios
58
      .get(`/knowledge-area/view/${uuid}`, {
59
        headers: {
60
          'Content-Type': 'application/json',
61
        },
62
      })
7065 stevensc 63
      .then((response) => {
64
        const { data, success } = response.data
65
        if (!success) {
66
          const errorMessage =
67
            typeof data === 'string' ? data : labels.error_there_was_an_error
68
 
69
          dispatch(addNotification({ style: 'danger', msg: errorMessage }))
70
          return
71
        }
72
 
73
        setKnowledge(data)
74
      })
75
      .catch((err) => {
76
        dispatch(
77
          addNotification({
78
            style: 'danger',
79
            msg: labels.error_there_was_an_error,
80
          })
81
        )
82
        throw new Error(err)
83
      })
7062 stevensc 84
  }, [uuid])
85
 
7065 stevensc 86
  return (
87
    <Container as="section">
7066 stevensc 88
      <Row>
89
        <Col className="mx-auto" md="8">
90
          <KnowledgeCard>
91
            <CardMedia
92
              component="img"
7067 stevensc 93
              height="250"
7066 stevensc 94
              image={knowledge.image}
95
              alt={`${knowledge.title} image`}
96
            />
97
            <CardContent>
98
              <Typography variant="h5">{knowledge.title}</Typography>
99
              <Typography variant="subtitle1" color="text.secondary">
100
                {knowledge.category}
101
              </Typography>
102
              {knowledge.description && parse(knowledge.description)}
103
            </CardContent>
7067 stevensc 104
            <KnowledgeActions>
7066 stevensc 105
              <li>
106
                <ReactionsButton
107
                  onChange={changeReaction}
108
                  currentReaction={knowledge.reaction}
109
                  withLabel
110
                  deleteUrl={knowledge.routeDeleteReaction}
111
                  reactionTypesUrl={{
112
                    r: knowledge.routeSaveReaction,
113
                    s: knowledge.routeSaveReaction,
114
                    l: knowledge.routeSaveReaction,
115
                    i: knowledge.routeSaveReaction,
116
                    f: knowledge.routeSaveReaction,
117
                  }}
118
                />
119
              </li>
120
              {knowledge.attachment && (
121
                <li>
122
                  <a
123
                    href={knowledge.attachment}
124
                    download
125
                    className="btn reaction-btn"
126
                  >
127
                    <FileDownloadIcon />
128
                    {labels.knowledge_area_download_attachment}
129
                  </a>
130
                </li>
131
              )}
132
              {knowledge.link && (
133
                <li>
134
                  <a
135
                    href={knowledge.link}
136
                    className="btn reaction-btn"
137
                    target="_blank"
138
                    rel="noreferrer"
139
                  >
140
                    {labels.knowledge_area_go_to_link}
141
                  </a>
142
                </li>
143
              )}
144
            </KnowledgeActions>
145
          </KnowledgeCard>
146
        </Col>
147
      </Row>
7065 stevensc 148
    </Container>
149
  )
7062 stevensc 150
}
151
 
152
export default KnowledgeViewPage