add emoji removal

This commit is contained in:
Philipinho
2024-01-22 17:36:41 +01:00
parent 29b4c2b9f2
commit e0e5f7c43d
2 changed files with 28 additions and 5 deletions

View File

@ -1,27 +1,34 @@
import React, { ReactNode } from 'react'; import React, { ReactNode } from 'react';
import data from '@emoji-mart/data'; import data from '@emoji-mart/data';
import Picker from '@emoji-mart/react'; import Picker from '@emoji-mart/react';
import { ActionIcon, Popover } from '@mantine/core'; import { ActionIcon, Popover, Button, useMantineColorScheme } from '@mantine/core';
import { useDisclosure } from '@mantine/hooks'; import { useDisclosure } from '@mantine/hooks';
export interface EmojiPickerInterface { export interface EmojiPickerInterface {
onEmojiSelect: (emoji: any) => void; onEmojiSelect: (emoji: any) => void;
icon: ReactNode; icon: ReactNode;
removeEmojiAction: () => void;
} }
function EmojiPicker({ onEmojiSelect, icon }: EmojiPickerInterface) { function EmojiPicker({ onEmojiSelect, icon, removeEmojiAction }: EmojiPickerInterface) {
const [opened, handlers] = useDisclosure(false); const [opened, handlers] = useDisclosure(false);
const { colorScheme } = useMantineColorScheme();
const handleEmojiSelect = (emoji) => { const handleEmojiSelect = (emoji) => {
onEmojiSelect(emoji); onEmojiSelect(emoji);
handlers.close(); handlers.close();
}; };
const handleRemoveEmoji = () => {
removeEmojiAction();
handlers.close();
};
return ( return (
<Popover <Popover
opened={opened} opened={opened}
onClose={handlers.close} onClose={handlers.close}
width={200} width={332}
position="bottom" position="bottom"
> >
<Popover.Target> <Popover.Target>
@ -30,7 +37,18 @@ function EmojiPicker({ onEmojiSelect, icon }: EmojiPickerInterface) {
</ActionIcon> </ActionIcon>
</Popover.Target> </Popover.Target>
<Popover.Dropdown bg="000" style={{ border: "none" }}> <Popover.Dropdown bg="000" style={{ border: "none" }}>
<Picker data={data} onEmojiSelect={handleEmojiSelect} /> <Picker data={data} onEmojiSelect={handleEmojiSelect}
perLine={8}
skinTonePosition='search'
theme={colorScheme}
/>
<Button variant="default" color="gray"
size="xs"
style={{ position: 'absolute', zIndex: 2, bottom: '1rem', right: '1rem'}}
onClick={handleRemoveEmoji}>
Remove
</Button>
</Popover.Dropdown> </Popover.Dropdown>
</Popover> </Popover>
); );

View File

@ -113,6 +113,11 @@ function Node({ node, style, dragHandle }: NodeRendererProps<any>) {
updatePageMutation.mutateAsync({ id: node.id, icon: emoji.native }); updatePageMutation.mutateAsync({ id: node.id, icon: emoji.native });
}; };
const handleRemoveEmoji = () => {
handleUpdateNodeIcon(node.id, null);
updatePageMutation.mutateAsync({ id: node.id, icon: null });
};
if (node.willReceiveDrop && node.isClosed) { if (node.willReceiveDrop && node.isClosed) {
setTimeout(() => { setTimeout(() => {
if (node.state.willReceiveDrop) node.open(); if (node.state.willReceiveDrop) node.open();
@ -134,7 +139,7 @@ function Node({ node, style, dragHandle }: NodeRendererProps<any>) {
node.data.icon ? node.data.icon : node.data.icon ? node.data.icon :
<IconFileDescription size="18px" /> <IconFileDescription size="18px" />
}/> } removeEmojiAction={handleRemoveEmoji}/>
</div> </div>
<span className={classes.text}> <span className={classes.text}>