Proyectos de Subversion LeadersLinked - SPA

Rev

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