refactor: emoji picker UX

This commit is contained in:
zerosoul
2022-03-30 23:17:35 +08:00
parent de39e35e0a
commit 764b9b6c94
+25 -3
View File
@@ -1,7 +1,10 @@
// import { useState } from "react";
import { useState } from "react";
import Tippy from "@tippyjs/react";
import styled from "styled-components";
import { useKey } from "rooks";
const StyledBtn = styled.button`
outline: none;
width: fit-content;
background: none;
display: flex;
align-items: center;
@@ -14,18 +17,37 @@ import Picker from "../EmojiPicker";
import SmileIcon from "../../../assets/icons/emoji.smile.svg";
export default function EmojiPicker({ selectEmoji }) {
const [visible, setVisible] = useState(false);
useKey(
"Escape",
(evt) => {
evt.preventDefault();
toggleVisible();
},
{
// eventTypes: ["keydown"],
// target: editableRef,
when: visible,
}
);
const toggleVisible = () => {
console.log("toggle picker");
setVisible((prev) => !prev);
};
const handleSelect = (emoji) => {
selectEmoji(emoji.native);
};
return (
<Tippy
onClickOutside={toggleVisible}
visible={visible}
offset={[-18, 25]}
interactive
placement="top-start"
trigger="click"
// trigger="click"
content={<Picker onSelect={handleSelect} />}
>
<StyledBtn>
<StyledBtn onClick={toggleVisible}>
<SmileIcon />
</StyledBtn>
</Tippy>