Rev 5933 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable react/prop-types */import React, { useState, useLayoutEffect, useRef } from 'react'import { BiDotsVerticalRounded } from 'react-icons/bi'import DeleteOutline from '@mui/icons-material/DeleteOutline'import { axios } from '../utils'import SocialNetworks from '../dashboard/components/home-section/SocialNetworks'import ConfirmModal from '../shared/confirm-modal/ConfirmModal'import { useDispatch } from 'react-redux'import { addNotification } from '../redux/notification/notification.actions'import ProfileInfo from '../dashboard/components/home-section/ProfileInfo'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 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}` })))}const deleteNotification = (url) => {axios.post(url).then(({ data: response }) => {if (!response.success) {return dispatch(addNotification({ style: 'danger', msg: response.data }))}dispatch(addNotification({ style: 'success', msg: response.data }))setNotifications((prevNotifications) =>prevNotifications.filter((notification) => notification.link_delete !== url))}).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 (<><main className="notifications-grid container px-0"><aside className="main-left-sidebar d-none d-md-flex"><ProfileInfoimage={image}fullName={fullName}description={description}visits={visits}country={country}connections={connections}/></aside><div className="notification-list"><div className="notification-header"><h2>Notificaciones</h2><div className="cursor-pointer d-flex align-items-center"><BiDotsVerticalRoundedonClick={() => setDisplayOption(!displayOption)}style={{ fontSize: '1.5rem' }}/><divclassName={`feed-options ${displayOption ? 'active' : ''}`}ref={menuOptions}><ul><li><buttonclassName="option-btn"onClick={handleConfirmModalShow}><i className="fa fa-trash-o mr-1" />Borrar notificaciones</button></li></ul></div></div></div><ul>{notifications.length ? ([...notifications].reverse().map((element, index) => (<li key={index}><div className="notification-item"><divclassName="d-flex align-items-center justify-content-between"style={{ gap: '.5rem' }}><a href={element.link}>{element.message}</a><DeleteOutlineclassName="cursor-pointer"onClick={() => deleteNotification(element.link_delete)}/></div><span>{element.time_elapsed}</span></div></li>))) : (<div className="empty-section"><h2>No hay notificaciones</h2></div>)}</ul></div></main><ConfirmModalshow={confirmModalShow}onClose={handleConfirmModalShow}onAccept={handleAccept}acceptLabel="Aceptar"/></>)}export default Notifications