From 5693722dafc4dd3d2e3fc76baa5591caa1d4a5eb Mon Sep 17 00:00:00 2001 From: Vladimir Date: Sun, 29 Oct 2023 23:46:03 +0300 Subject: [PATCH 1/2] fix: ability to use custom button via buttonRef prop --- src/components/emoji-picker-button.js | 26 +++++++++++------- src/components/emoji-picker-wrapper.js | 38 ++++++++++++-------------- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/components/emoji-picker-button.js b/src/components/emoji-picker-button.js index 45e7b02..429ad5e 100644 --- a/src/components/emoji-picker-button.js +++ b/src/components/emoji-picker-button.js @@ -15,21 +15,27 @@ import React, { useEffect, useRef, useState } from "react"; * @return {JSX.Element} */ function EmojiPickerButton({ showPicker, toggleShowPicker, buttonElement, buttonRef }) { - + const [typeButton, setTypeButton] = useState(/** @type {"OWN" | "REF" | "CUSTOM_CONTENT" | "IDLE"} */ "IDLE"); const localButtonRef = useRef(null); - const [showCustomButtonContent, setShowCustomButtonContent] = useState(false); useEffect(() => { - if ((buttonRef?.current?.childNodes?.length ?? 0) > 2) { - localButtonRef.current.appendChild(buttonRef.current.childNodes[0]); - setShowCustomButtonContent(true); - } else if ((buttonElement?.childNodes?.length ?? 0) > 2) { + if (!buttonRef && !buttonElement) { + setTypeButton("OWN"); + return; + } + + if (buttonRef && buttonRef.current) { + buttonRef.current.addEventListener("click", toggleShowPicker); + setTypeButton("REF"); + return () => buttonRef.current.removeEventListener("click", toggleShowPicker); + } + else if ((buttonElement?.childNodes?.length ?? 0) >= 2) { localButtonRef.current.appendChild(buttonElement?.childNodes[0]); - setShowCustomButtonContent(true); + setTypeButton("CUSTOM_CONTENT"); } - }, [buttonElement?.childNodes]); + }, [buttonRef, buttonElement, buttonElement?.childNodes]) - return ( + return ( typeButton !== "IDLE" && typeButton !== "REF" &&