Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6865 | Rev 6883 | 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(() => {
59
    setCoverImg(`/storage/type/group-cover/code/${uuid}/filename/${cover}`)
60
    setProfileImg(`/storage/type/group/code/${uuid}/filename/${image}`)
61
  }, [cover, image])
62
 
6830 stevensc 63
  return (
64
    <>
65
      <div className="group__actions">
66
        <div
67
          className="group__actions-cover position-relative"
68
          style={{ height: '300px' }}
69
        >
6863 stevensc 70
          <img src={coverImg} alt="Profile cover" className="sidebar__cover" />
71
          {isEdit && (
6830 stevensc 72
            <button
73
              className="button-icon cover__edit-btn"
74
              onClick={() => setModalToShow('cover')}
75
            >
76
              <EditIcon />
77
            </button>
78
          )}
79
        </div>
80
        <div className="group__actions-body">
81
          <div className="card__image-options">
6863 stevensc 82
            {isEdit ? (
6830 stevensc 83
              <img
84
                alt="Profile Image"
6863 stevensc 85
                className={`img ${isEdit && 'cursor-pointer'}`}
86
                src={profileImg}
87
                onClick={() => isEdit && setModalToShow('image')}
6830 stevensc 88
                style={{ zIndex: 10 }}
89
              />
90
            ) : (
6868 stevensc 91
              <Avatar imageUrl={profileImg} size="xl" name={name} />
6830 stevensc 92
            )}
93
          </div>
94
          <h1>{name}</h1>
95
          <span>{groupType}</span>
96
          <div className="row" style={{ gap: '.5rem' }}>
97
            {linkInmail && (
98
              <a href={linkInmail} className="button btn btn-primary">
99
                Contactar con el Administrador
100
              </a>
101
            )}
6865 stevensc 102
            {linkAccept && (
6830 stevensc 103
              <button
6865 stevensc 104
                onClick={() => handleActionLink(linkAccept)}
6830 stevensc 105
                className="button btn btn-primary"
106
              >
107
                Aceptar invitacion
108
              </button>
109
            )}
6865 stevensc 110
            {linkCancel && (
6830 stevensc 111
              <button
6865 stevensc 112
                onClick={() => handleActionLink(linkCancel)}
6830 stevensc 113
                className="button btn btn-secondary"
114
              >
115
                Cancelar invitacion
116
              </button>
117
            )}
6865 stevensc 118
            {linkLeave && (
6830 stevensc 119
              <button
6865 stevensc 120
                onClick={() => handleActionLink(linkLeave)}
6830 stevensc 121
                className="button btn btn-secondary"
122
              >
123
                Abandonar grupo
124
              </button>
125
            )}
6865 stevensc 126
            {linkRequest && (
6830 stevensc 127
              <button
6865 stevensc 128
                onClick={() => handleActionLink(linkRequest)}
6830 stevensc 129
                className="button btn btn-primary"
130
              >
131
                {accessibility === 'Auto unirse'
132
                  ? 'Unirse'
133
                  : 'Solicitar membresia'}
134
              </button>
135
            )}
136
          </div>
137
        </div>
138
      </div>
139
      <CoverModal
140
        isOpen={modalToShow === 'cover'}
6865 stevensc 141
        sizes={coverSize}
6830 stevensc 142
        onClose={() => closeModal()}
143
        onComplete={(newImage) => setCoverImg(newImage)}
144
      />
145
      <ImageModal
146
        show={modalToShow === 'image'}
6865 stevensc 147
        id={uuid}
148
        sizes={imageSize}
6830 stevensc 149
        onClose={() => closeModal()}
150
        onComplete={(newImage) => setProfileImg(newImage)}
151
      />
152
    </>
153
  )
154
}
155
 
156
export default GroupActions