mirror of
https://github.com/Qortal/qortal-mobile.git
synced 2025-04-24 20:07:52 +00:00
84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
import React, { useState, useRef, useEffect } from 'react';
|
|
import Picker, { Theme } from 'emoji-picker-react';
|
|
import './ReactionPicker.css'; // CSS for proper positioning
|
|
import { ButtonBase } from '@mui/material';
|
|
import { isMobile } from '../App';
|
|
|
|
export const ReactionPicker = ({ onReaction }) => {
|
|
const [showPicker, setShowPicker] = useState(false); // Manage picker visibility
|
|
const pickerRef = useRef(null); // Reference to the picker
|
|
|
|
const handleReaction = (emojiObject) => {
|
|
onReaction(emojiObject.emoji); // Handle the selected emoji reaction
|
|
setShowPicker(false); // Close picker after selection
|
|
};
|
|
const handlePicker = (emojiObject) => {
|
|
|
|
onReaction(emojiObject.emoji); // Handle the selected emoji reaction
|
|
setShowPicker(false); // Close picker after selection
|
|
};
|
|
|
|
// Close picker if clicked outside
|
|
useEffect(() => {
|
|
const handleClickOutside = (event) => {
|
|
if (pickerRef.current && !pickerRef.current.contains(event.target)) {
|
|
setShowPicker(false); // Close picker
|
|
}
|
|
};
|
|
|
|
// Add event listener when picker is shown
|
|
if (showPicker) {
|
|
document.addEventListener('mousedown', handleClickOutside);
|
|
} else {
|
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
}
|
|
|
|
// Clean up the event listener on unmount
|
|
return () => {
|
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
};
|
|
}, [showPicker]);
|
|
|
|
return (
|
|
<div className="reaction-container">
|
|
{/* Emoji CTA */}
|
|
<ButtonBase sx={{
|
|
fontSize: '22px'
|
|
}}
|
|
// onTouchStart={(e) => {
|
|
// e.preventDefault(); // Prevent mobile keyboard
|
|
// e.stopPropagation();
|
|
// if(!isMobile) return
|
|
// setShowPicker(!showPicker);
|
|
// }}
|
|
onClick={(e) => {
|
|
e.preventDefault(); // Prevents any focus issues
|
|
e.stopPropagation();
|
|
// if(isMobile) return
|
|
|
|
setShowPicker(!showPicker);
|
|
}}
|
|
|
|
>
|
|
😃
|
|
</ButtonBase>
|
|
|
|
{/* Emoji Picker with dark theme */}
|
|
{showPicker && (
|
|
<div className="emoji-picker" ref={pickerRef} onClick={(e) => e.preventDefault()}>
|
|
<Picker
|
|
height={isMobile ? 350 : 450}
|
|
width={isMobile ? 300 : 350 }
|
|
reactionsDefaultOpen={true}
|
|
onReactionClick={handleReaction}
|
|
onEmojiClick={handlePicker}
|
|
allowExpandReactions={true}
|
|
autoFocusSearch={false}
|
|
theme={Theme.DARK}
|
|
/>
|
|
</div>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|