Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
6863 stevensc 1
import React, { useEffect, useState } from 'react'
6830 stevensc 2
import { axios } from '../../utils'
3
import { useDispatch } from 'react-redux'
6865 stevensc 4
import { useLocation, useParams } from 'react-router-dom'
6830 stevensc 5
import { addNotification } from '../../redux/notification/notification.actions'
6
import EditIcon from '@mui/icons-material/EditOutlined'
7
 
8
import Avatar from '../UI/AvatarImage'
9
import CoverModal from '../cover/CoverModal'
10
import ImageModal from '../modals/ImageModal'
11
 
12
const GroupActions = ({
13
  cover,
14
  name,
15
  image,
16
  groupType,
6865 stevensc 17
  accessibility,
18
  coverSize,
19
  imageSize,
6830 stevensc 20
  linkInmail,
6865 stevensc 21
  linkAccept,
22
  linkCancel,
23
  linkLeave,
24
  linkRequest,
6830 stevensc 25
}) => {
6865 stevensc 26
  const [profileImg, setProfileImg] = useState('')
27
  const [coverImg, setCoverImg] = useState('')
6863 stevensc 28
  const [isEdit, setIsEdit] = useState(false)
6830 stevensc 29
  const [modalToShow, setModalToShow] = useState(null)
6865 stevensc 30
  const { pathname } = useLocation()
31
  const { uuid } = useParams()
6830 stevensc 32
  const dispatch = useDispatch()
33
 
6863 stevensc 34
  const closeModal = () => {
35
    setModalToShow(null)
36
  }
6830 stevensc 37
 
38
  const handleActionLink = (url) => {
39
    axios
40
      .post(url)
6863 stevensc 41
      .then(({ data: response }) => {
42
        const { data, success } = response
43
 
44
        if (!success) {
45
          dispatch(addNotification({ style: 'error', msg: data }))
46
          return
6830 stevensc 47
        }
6863 stevensc 48
 
49
        addNotification({ style: 'success', msg: data })
6830 stevensc 50
      })
51
      .catch((err) => console.log('>>: err > ', err))
52
  }
53
 
6863 stevensc 54
  useEffect(() => {
55
    setIsEdit(pathname.includes('edit'))
56
  }, [pathname])
57
 
6865 stevensc 58
  useEffect(() => {
6883 stevensc 59
    setCoverImg(
60
      `/storage/type/group-cover/code/${uuid}${
61
        cover ? `/filename/${cover}` : '/'
62
      }`
63
    )
64
    setProfileImg(
65
      `/storage/type/group/code/${uuid}${image ? `/filename/${image}` : '/'}`
66
    )
6865 stevensc 67
  }, [cover, image])
68
 
6830 stevensc 69
  return (
70
    <>
71
      <div className="group__actions">
72
        <div
73
          className="group__actions-cover position-relative"
74
          style={{ height: '300px' }}
75
        >
6863 stevensc 76
          <img src={coverImg} alt="Profile cover" className="sidebar__cover" />
77
          {isEdit && (
6830 stevensc 78
            <button
79
              className="button-icon cover__edit-btn"
80
              onClick={() => setModalToShow('cover')}
81
            >
82
              <EditIcon />
83
            </button>
84
          )}
85
        </div>
86
        <div className="group__actions-body">
87
          <div className="card__image-options">
6863 stevensc 88
            {isEdit ? (
6830 stevensc 89
              <img
90
                alt="Profile Image"
6863 stevensc 91
                className={`img ${isEdit && 'cursor-pointer'}`}
92
                src={profileImg}
93
                onClick={() => isEdit && setModalToShow('image')}
6830 stevensc 94
                style={{ zIndex: 10 }}
95
              />
96
            ) : (
6868 stevensc 97
              <Avatar imageUrl={profileImg} size="xl" name={name} />
6830 stevensc 98
            )}
99
          </div>
100
          <h1>{name}</h1>
101
          <span>{groupType}</span>
102
          <div className="row" style={{ gap: '.5rem' }}>
103
            {linkInmail && (
104
              <a href={linkInmail} className="button btn btn-primary">
105
                Contactar con el Administrador
106
              </a>
107
            )}
6865 stevensc 108
            {linkAccept && (
6830 stevensc 109
              <button
6865 stevensc 110
                onClick={() => handleActionLink(linkAccept)}
6830 stevensc 111
                className="button btn btn-primary"
112
              >
113
                Aceptar invitacion
114
              </button>
115
            )}
6865 stevensc 116
            {linkCancel && (
6830 stevensc 117
              <button
6865 stevensc 118
                onClick={() => handleActionLink(linkCancel)}
6830 stevensc 119
                className="button btn btn-secondary"
120
              >
121
                Cancelar invitacion
122
              </button>
123
            )}
6865 stevensc 124
            {linkLeave && (
6830 stevensc 125
              <button
6865 stevensc 126
                onClick={() => handleActionLink(linkLeave)}
6830 stevensc 127
                className="button btn btn-secondary"
128
              >
129
                Abandonar grupo
130
              </button>
131
            )}
6865 stevensc 132
            {linkRequest && (
6830 stevensc 133
              <button
6865 stevensc 134
                onClick={() => handleActionLink(linkRequest)}
6830 stevensc 135
                className="button btn btn-primary"
136
              >
137
                {accessibility === 'Auto unirse'
138
                  ? 'Unirse'
139
                  : 'Solicitar membresia'}
140
              </button>
141
            )}
142
          </div>
143
        </div>
144
      </div>
145
      <CoverModal
146
        isOpen={modalToShow === 'cover'}
6865 stevensc 147
        sizes={coverSize}
6830 stevensc 148
        onClose={() => closeModal()}
149
        onComplete={(newImage) => setCoverImg(newImage)}
150
      />
151
      <ImageModal
152
        show={modalToShow === 'image'}
6865 stevensc 153
        id={uuid}
154
        sizes={imageSize}
6830 stevensc 155
        onClose={() => closeModal()}
156
        onComplete={(newImage) => setProfileImg(newImage)}
157
      />
158
    </>
159
  )
160
}
161
 
162
export default GroupActions