Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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