Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 7214 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
7160 stevensc 1
import React from 'react'
2
import { Avatar, Card } from '@mui/material'
3
import { useSelector } from 'react-redux'
7212 stevensc 4
import { useHistory } from 'react-router-dom'
7160 stevensc 5
import styled from 'styled-components'
7212 stevensc 6
 
7160 stevensc 7
import OpenInNewIcon from '@mui/icons-material/OpenInNew'
8
import EditIcon from '@mui/icons-material/Edit'
9
import DeleteIcon from '@mui/icons-material/Delete'
7212 stevensc 10
import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew'
7160 stevensc 11
 
7209 stevensc 12
export const StyledQuestionCard = styled(Card)`
7160 stevensc 13
  background: var(--bg-color);
14
  border: 1px solid var(--border-primary);
15
  border-radius: var(--border-radius);
16
  height: fit-content;
7163 stevensc 17
  padding: 1rem 0;
7160 stevensc 18
  & > * {
19
    padding-right: 1rem;
20
    padding-left: 1rem;
21
  }
22
  & > h2 {
23
    font-size: 2rem;
24
    line-height: 1.2;
25
  }
26
  p {
27
    color: var(--font-color);
28
    font-size: 1rem;
29
    font-weight: 400;
30
    text-align: justify;
31
    margin-bottom: 0.5rem;
32
  }
33
  span {
34
    color: var(--subtitle-color);
35
    font-weight: 600;
36
    font-size: 0.9rem;
37
  }
38
`
39
 
7209 stevensc 40
export const QuestionDetails = styled.div`
7160 stevensc 41
  display: flex;
42
  align-items: center;
43
  flex-wrap: wrap;
44
  gap: 1rem;
45
  justify-content: space-between;
46
  margin-bottom: 0.5rem;
47
  padding-bottom: 0.5rem;
48
  border-bottom: 1px solid var(--border-primary);
49
`
50
 
7209 stevensc 51
export const QuestionUserInfo = styled.div`
7160 stevensc 52
  align-items: center;
53
  background: var(--chat-send);
54
  border-radius: var(--border-radius);
55
  color: var(--font-color);
56
  display: inline-flex;
57
  font-weight: 600;
58
  gap: 0.5rem;
59
  padding: 0.5rem;
60
  width: fit-content;
61
`
62
 
7209 stevensc 63
export const QuestionActions = styled.div`
7162 stevensc 64
  display: flex;
65
  align-items: center;
66
  gap: 0.5rem;
67
  justify-content: space-around;
68
  padding-top: 0.5rem;
69
  border-top: 1px solid var(--border-primary);
70
  & > * {
71
    flex-grow: 1;
72
  }
7165 stevensc 73
  .btn {
7173 stevensc 74
    color: var(--icons-color);
75
    font-size: 1rem !important;
7165 stevensc 76
    border: 1px solid var(--border-primary) !important;
77
    border-radius: var(--border-radius) !important;
78
    padding: 5px !important;
7230 stevensc 79
    position: relative;
7165 stevensc 80
  }
7162 stevensc 81
`
82
 
7209 stevensc 83
export const QuestionStats = styled.div`
7165 stevensc 84
  display: flex;
85
  align-items: center;
86
  gap: 0.5rem;
87
`
88
 
7209 stevensc 89
export const QuestionCategories = styled.ul`
90
  align-items: center;
91
  display: flex;
92
  gap: 0.5rem;
93
  flex-wrap: wrap;
94
  max-width: 200px;
95
  li {
96
    background: var(--chat-send);
97
    border-radius: var(--border-radius);
98
    color: var(--font-color);
99
    padding: 0.4rem 0.6rem;
100
    font-size: 0.9rem;
101
    font-weight: 600;
102
  }
103
`
104
 
7160 stevensc 105
const QuestionCard = ({
7163 stevensc 106
  updated_on = '',
107
  link_add_comment = '',
7212 stevensc 108
  last_answer_on = '',
7163 stevensc 109
  added_on = '',
7160 stevensc 110
  user_name = '',
111
  user_image = '',
112
  title = '',
113
  description = '',
114
  categories = [],
115
  views = 0,
116
  answers = 0,
117
  reactions = 0,
118
  comments = 0,
119
  link_view = '',
120
  link_edit = '',
121
  link_delete = '',
7212 stevensc 122
  link_answers_add = '',
123
  link_answers = '',
7163 stevensc 124
  onDelete = () => null,
125
  onEdit = () => null,
7212 stevensc 126
  onReply = () => null,
7160 stevensc 127
}) => {
128
  const labels = useSelector(({ intl }) => intl.labels)
7163 stevensc 129
  const history = useHistory()
7160 stevensc 130
 
7163 stevensc 131
  const onView = (url = '') => {
132
    history.replace(url)
133
  }
134
 
7213 stevensc 135
  const goBack = () => {
7214 stevensc 136
    history.replace('/my-coach')
7213 stevensc 137
  }
138
 
7160 stevensc 139
  return (
140
    <StyledQuestionCard>
141
      <QuestionDetails>
142
        <QuestionUserInfo>
143
          <Avatar
144
            src={user_image}
145
            alt={`${user_name} profile image`}
146
            sx={{ width: '50px', height: '50px' }}
147
          />
148
          <p>{user_name}</p>
149
        </QuestionUserInfo>
7209 stevensc 150
        <QuestionCategories>
7161 stevensc 151
          {categories.map(({ category }) => (
7160 stevensc 152
            <li key={category}>{category}</li>
153
          ))}
7209 stevensc 154
        </QuestionCategories>
7160 stevensc 155
      </QuestionDetails>
156
 
157
      <h2>{title}</h2>
158
      <span>{`${labels.my_coach_question} ${added_on}`}</span>
7212 stevensc 159
      {last_answer_on && (
7213 stevensc 160
        <span>{`${labels.my_coach_last_answer} ${last_answer_on}`}</span>
7212 stevensc 161
      )}
7160 stevensc 162
      <p className="my-3">{description}</p>
163
 
7165 stevensc 164
      <QuestionStats className="mb-2">
7160 stevensc 165
        <span>{`${answers} ${labels.my_coach_answers}`}</span>
166
        <span>{`${reactions} ${labels.my_coach_reactions}`}</span>
167
        <span>{`${views} ${labels.my_coach_views}`}</span>
168
        <span>{`${comments} ${labels.comments}`}</span>
7165 stevensc 169
      </QuestionStats>
7160 stevensc 170
 
7162 stevensc 171
      <QuestionActions>
7212 stevensc 172
        {link_answers && (
7213 stevensc 173
          <button className="btn feed__share-option" onClick={goBack}>
7212 stevensc 174
            <ArrowBackIosNewIcon />
175
            {labels.back}
176
          </button>
177
        )}
7160 stevensc 178
        {link_view && (
7163 stevensc 179
          <button
180
            className="btn feed__share-option"
181
            onClick={() => onView(link_view)}
182
          >
7160 stevensc 183
            <OpenInNewIcon />
184
            {labels.view}
185
          </button>
186
        )}
187
        {link_edit && (
7163 stevensc 188
          <button
189
            className="btn feed__share-option"
190
            onClick={() => onEdit(link_edit)}
191
          >
7160 stevensc 192
            <EditIcon />
193
            {labels.edit}
194
          </button>
195
        )}
7212 stevensc 196
        {link_answers_add && (
197
          <button
198
            className="btn feed__share-option"
199
            onClick={() => onReply(link_edit)}
200
          >
201
            <EditIcon />
202
            {labels.reply}
203
          </button>
204
        )}
7160 stevensc 205
        {link_delete && (
7163 stevensc 206
          <button
207
            className="btn feed__share-option"
208
            onClick={() => onDelete(link_delete)}
209
          >
7160 stevensc 210
            <DeleteIcon />
211
            {labels.delete}
212
          </button>
213
        )}
7162 stevensc 214
      </QuestionActions>
7160 stevensc 215
    </StyledQuestionCard>
216
  )
217
}
218
 
219
export default QuestionCard