Proyectos de Subversion LeadersLinked - SPA

Rev

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