Proyectos de Subversion LeadersLinked - SPA

Rev

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