Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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