Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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