Proyectos de Subversion LeadersLinked - SPA

Rev

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

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