Rev 3315 | Rev 4202 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable react/prop-types */import React, { useState, useLayoutEffect, useRef } from 'react';import { axios } from '../utils';import { BiDotsVerticalRounded } from 'react-icons/bi';import { FaTrash } from 'react-icons/fa';import { addNotification } from '../redux/notification/notification.actions';import ProfileInfo from '../dashboard/components/home-section/ProfileInfo';import SocialNetworks from '../dashboard/components/home-section/SocialNetworks';import ConfirmModal from '../shared/confirm-modal/ConfirmModal';import { useDispatch } from 'react-redux';const Notifications = ({ backendVars }) => {const { image, fullName, country, visits, connections, description } = backendVarsconst [notifications, setNotifications] = useState([])const [displayOption, setDisplayOption] = useState(false)const [confirmModalShow, setConfirmModalShow] = useState(false);const dispatch = useDispatch()const menuOptions = useRef(null)const handleConfirmModalShow = () => setConfirmModalShow(!confirmModalShow)const handleAccept = () => {deleteAllNotifications()handleConfirmModalShow()}const handleNotifications = async () => {try {const _notifications = await axios.get('/notifications')setNotifications(_notifications.data.data)} catch (error) {console.log('>>: error > ', error)}}const markReadNotifications = () => {axios.post('/notifications/mark-all-read').then(({ data }) => {!data.success? dispatch(addNotification({ style: 'danger', msg: data.data })): dispatch(addNotification({ style: 'success', msg: data.data }))}).catch(err => {dispatch(addNotification({style: "danger",msg: 'Disculpe, ha ocurrido un error marcando notificaciones como leidas',}))console.log('>>: err > ', err)})}const deleteAllNotifications = () => {axios.post('/notifications/clear').then(({ data }) => {if (!data.success) dispatch(addNotification({ style: 'danger', msg: data.data }))dispatch(addNotification({ style: 'success', msg: data.data }))setNotifications([])}).catch(err => dispatch(addNotification({ style: "danger", msg: `Error: ${err}` })))}useLayoutEffect(() => {const handleClickOutside = (event) => {if (menuOptions.current && !menuOptions.current.contains(event.target)) {setDisplayOption(false)}}document.addEventListener("mousedown", handleClickOutside);return () => {document.removeEventListener("mousedown", handleClickOutside);};}, [menuOptions]);useLayoutEffect(() => {handleNotifications()}, []);return (<><section className="notifications-page"><div className="notifications-grid"><div className='main-left-sidebar' style={{ marginTop: '1.25rem' }}><ProfileInfoimage={image}fullName={fullName}description={description}visits={visits}country={country}connections={connections}/><SocialNetworks /></div><div className="card-body"><div className="container"><div className="messages-sec border-gray px-5 py-4"><div className="d-flex align-items-center justify-content-between position-relative mb-3"><h2 className="card-title" style={{ fontSize: '1.7rem', fontWeight: '700' }}>Notificaciones</h2><div className="cursor-pointer d-flex align-items-center"><BiDotsVerticalRoundedonClick={() => setDisplayOption(!displayOption)}style={{ fontSize: '1.5rem' }}/><div className={`feed-options ${displayOption ? 'active' : ''}`} ref={menuOptions} ><ul><li><buttonclassName="option-btn mb-2"onClick={handleConfirmModalShow}><FaTrash className="mr-1" />Borrar notificaciones</button></li></ul></div></div></div><ul>{notifications.length? [...notifications].reverse().map((element, i) =><li key={i}><div className="notification-item"><div className="d-inline-flex flex-column"><a href={element.link} className='mb-1'>{element.message}</a><span>{element.time_elapsed}</span></div></div></li>):<divclassName="section_admin_title_buttons w-100"style={{ display: 'grid', placeItems: 'center' }}><h1 className="title">No hay notificaciones</h1></div>}</ul></div></div></div></div></section ><ConfirmModalshow={confirmModalShow}onClose={handleConfirmModalShow}onAccept={handleAccept}acceptLabel='Aceptar'/></>)}export default Notifications