Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
7226 stevensc 1
import React, { useState } from 'react'
6618 stevensc 2
import { useForm } from 'react-hook-form'
7226 stevensc 3
import { useSelector } from 'react-redux'
4
import { Avatar } from '@mui/material'
5
import styled from 'styled-components'
6
import SendIcon from '@mui/icons-material/Send'
6618 stevensc 7
 
7226 stevensc 8
import Options from '../UI/Option'
6618 stevensc 9
import ConfirmModal from '../modals/ConfirmModal'
10
import FormErrorFeedback from '../UI/FormErrorFeedback'
11
 
7226 stevensc 12
const StyledCommentForm = styled.form`
13
  display: flex;
14
  justify-content: flex-start;
15
  align-items: center;
16
  img {
17
    margin-right: 0.5rem;
18
    width: 43px;
19
    height: 43px;
20
  }
21
  input {
22
    flex-grow: 1;
23
    padding: 0.5rem;
24
    background-color: var(--bg-color-secondary);
25
    border: 1px solid var(--border-primary);
26
    border-top-left-radius: var(--border-radius);
27
    border-bottom-left-radius: var(--border-radius);
28
  }
29
  button {
30
    border-top-right-radius: var(--border-radius);
31
    border-bottom-right-radius: var(--border-radius);
32
  }
33
`
34
 
35
export const CommentForm = ({
6618 stevensc 36
  image = '/images/avatar.jpg',
7226 stevensc 37
  onSubmit = () => null,
6618 stevensc 38
}) => {
39
  const { register, handleSubmit, errors, reset } = useForm()
7226 stevensc 40
 
6618 stevensc 41
  const labels = useSelector(({ intl }) => intl.labels)
42
 
7226 stevensc 43
  const submitHandler = handleSubmit(async (data) => {
44
    await onSubmit(data)
45
    reset()
46
  })
6618 stevensc 47
 
48
  return (
7226 stevensc 49
    <>
50
      <StyledCommentForm onSubmit={submitHandler}>
51
        {image && <Avatar src={image} alt="Profile image" />}
6618 stevensc 52
        <input
53
          type="text"
54
          name="comment"
55
          maxLength="256"
56
          placeholder={labels.write_a_comment}
57
          ref={register({ required: 'El campo es requerido' })}
58
        />
7226 stevensc 59
        <button className="btn btn-primary">
60
          <SendIcon />
6618 stevensc 61
        </button>
7226 stevensc 62
      </StyledCommentForm>
6618 stevensc 63
      {errors.comment && (
64
        <FormErrorFeedback>{errors.comment.message}</FormErrorFeedback>
65
      )}
7226 stevensc 66
    </>
6618 stevensc 67
  )
68
}
69
 
7226 stevensc 70
export const CommentsList = ({ comments, onDelete }) => {
6618 stevensc 71
  return (
72
    <ul className="comment-list">
73
      {comments.map((comment) => {
74
        return (
75
          <CommentsList.Item
76
            comment={comment}
77
            onDelete={onDelete}
78
            key={comment.unique}
79
          />
80
        )
81
      })}
82
    </ul>
83
  )
84
}
85
 
7226 stevensc 86
const Comment = ({ onDelete, comment }) => {
87
  const [showConfirmModal, setShowConfirmModal] = useState(false)
88
  const labels = useSelector(({ intl }) => intl.labels)
89
 
6618 stevensc 90
  const {
91
    unique,
92
    user_url,
93
    user_name,
7138 stevensc 94
    // user_image = '/images/avatar.jpg',
6618 stevensc 95
    time_elapsed,
96
    comment: content,
97
    link_delete,
98
  } = comment
99
 
7225 stevensc 100
  const toggleModal = () => {
101
    setShowConfirmModal(!showConfirmModal)
102
  }
6618 stevensc 103
 
104
  return (
105
    <li>
106
      <div className="comment-container">
107
        <div className="comment-content">
108
          <div className="info">
109
            <a href={user_url}>
110
              <h3>{user_name}</h3>
111
            </a>
7226 stevensc 112
            <span>{time_elapsed}</span>
6618 stevensc 113
            <span>
7225 stevensc 114
              {link_delete && (
115
                <Options
116
                  options={[
117
                    {
118
                      label: labels.delete,
119
                      action: toggleModal,
120
                    },
121
                  ]}
122
                />
6618 stevensc 123
              )}
124
            </span>
125
          </div>
126
          <p>{content}</p>
127
        </div>
128
      </div>
129
      <ConfirmModal
130
        show={showConfirmModal}
131
        onClose={toggleModal}
132
        onAccept={() => onDelete(unique, link_delete)}
133
        acceptLabel={labels.accept}
134
      />
135
    </li>
136
  )
137
}
138
 
7226 stevensc 139
CommentsList.Item = Comment