import { Meteor } from 'meteor/meteor'; import React, {useState, useRef, useEffect, Suspense} from 'react'; import { useTracker, useFind } from 'meteor/react-meteor-data/suspense'; // import { FilesCol } from '/imports/api/files.js'; import { useNavigate, Link } from 'react-router-dom'; import { Roles } from 'meteor/roles'; // import { useUserContext } from '/imports/api/contexts/AppContext'; // import { groupBy } from 'lodash'; //import Radium from 'radium'; import { useLongTap } from '../hooks'; const IndicadorMissatges = ({notif}) => { return {notif && } ; }; const useLongPress = (mostraMenu, setMostraMenu) => { const [isPressed, setIsPressed] = useState(false); const [startTime, setStartTime] = useState(0); const [hasLongPressed, setHasLongPressed] = useState(false); const targetRef = useRef(null); const onPointerDown = (e) => { if (!isPressed) { setIsPressed(true); setStartTime(Date.now()); } }; const onPointerUp = () => { if (isPressed) { setIsPressed(false); // Clear any pending timeout clearTimeout(timeoutId?.current); } }; const onPointerMove = () => { if (!isPressed) return; // Check pointer position changes and update state if needed // You can implement your own logic here to detect movement }; useEffect(() => { let timeoutId = undefined; if (isPressed) { timeoutId = setTimeout(() => { const duration = Date.now() - startTime; if (duration >= 500 && isPressed) { setHasLongPressed(true); setMostraMenu(true); } }, 500); } return () => clearTimeout(timeoutId); }, [isPressed]); useEffect(() => { const handleDocumentClick = (e) => { if (targetRef.current && !targetRef.current.contains(e.target)) { setHasLongPressed(false); setIsPressed(false); setMostraMenu(false); } }; document.addEventListener('click', handleDocumentClick); document.addEventListener('touchstart', handleDocumentClick); document.addEventListener('pointerdown', handleDocumentClick); return () => { document.removeEventListener('click', handleDocumentClick); document.removeEventListener('touchstart', handleDocumentClick); document.removeEventListener('pointerdown', handleDocumentClick); }; }, [targetRef]); return { hasLongPressed, setHasLongPressed, onPointerDown, onPointerUp, onPointerMove, targetRef }; }; const UserStat = ({esAdministrador, setEsAdministrador}) => { // const [esAdministrador, setEsAdministrador] = useState(false); const [mostraMenu, setMostraMenu] = useState(false); const { hasLongPressed, setHasLongPressed, onPointerDown, onPointerUp, onPointerMove, targetRef } = useLongPress(mostraMenu, setMostraMenu); const u = useTracker("user", async () => await Meteor.userAsync()); const userId = Meteor.userId(); // useEffect(() => { // (async () => { // const comprovaAdmin = await Roles.userIsInRoleAsync(userId, ["admin"]); // setEsAdministrador(comprovaAdmin); // })(); // }, [Meteor.userId()]); // const u = useUserContext(); // console.log("UUU: ", u); const navigate = useNavigate(); // const files = useTracker(() => { // const filesHandle = Meteor.subscribe('files.avatar'); // // const docsReadyYet = filesHandle.ready(); // const files = FilesCol?.find({"meta.userId": Meteor.userId()}, {sort: {name: 1}}).fetch(); // Meteor.userId() ?? "nop" // return files; // }); // const uname = useTracker(() => Meteor.user({ fields: { 'username': 1 } })?.username ); //const avatarLink = u.avatarLink; // alert("avLnk: ", u.profile.avatarLink); // if (hasLongPressed) { // setMostraMenu(true); // } return
{ // setMostraMenu(true); // }} onPointerDown={onPointerDown} onPointerUp={onPointerUp} onPointerMove={onPointerMove} ref={targetRef} // // title="Logout" // onClick={ev => { // ev.stopPropagation(); // ev.preventDefault(); // // console.log("u: ", u); // navigate(`/${u.username}`); // }} // onPointerCancel={onPointerCancel} // onPointerOut={onPointerOut} > {/* setHasLongPressed(!hasLongPressed)}> {hasLongPressed ? 'Yes!' : 'No'} */} { (u && esAdministrador) &&
ADMIN
} {u?.username} { ev.preventDefault(); ev.stopPropagation(); alert("Click en missatges"); }} >
{ mostraMenu &&
{ setMostraMenu(false); }} > {/* */}
{ //setEditaPerfil(true); ev.stopPropagation(); ev.preventDefault(); navigate(`/c/config`); }} >Configuración
{/* */}
{ Meteor.logout(err => { err && alert(`Problema: ${err}`); }); navigate(`/`); }} >Cierra la sesión
}

; }; export { UserStat };