Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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