import React, { forwardRef, useEffect, useState } from 'react' import TextareaAutosize from 'react-textarea-autosize' import { useLocalAreas } from '@/hooks/useLocalAreas' import { BACKGROUND_EVENTS } from '@/lib/constants' import { SUCCESS } from '@/lib/helper' import { cn, getUrl } from '@/lib/utils' import { PopoverClose, Portal } from '@radix-ui/react-popover' import { SendHorizontal, X } from 'lucide-react' import { motion, useMotionValue } from 'motion/react' import { Avatar, AvatarFallback, AvatarImage } from '@penx/uikit/avatar' import { Button } from '@penx/uikit/button' import { Checkbox } from '@penx/uikit/checkbox' import { Label } from '@penx/uikit/label' import { LoadingDots } from '@penx/uikit/loading-dots' import { Popover, PopoverContent, PopoverTrigger } from '@penx/uikit/popover' import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from '@penx/uikit/select' import { useAppType } from '../hooks/useAppType' import { useNote } from '../hooks/useNote' // import { BACKGROUND_EVENTS } from '@penx/constants' BACKGROUND_EVENTS const MotionBox = motion.div interface Props { x?: number y?: number } export const QuickAddEditor = forwardRef( function QuickAddEditor({ x, y }, propsRef) { const { destroy } = useAppType() const { note, setNote } = useNote() const [loading, setLoading] = useState(false) const [tips, setTips] = useState('') const { data: areas = [] } = useLocalAreas() const [areaId, setAreaId] = useState('') const onSubmit = async () => { if (!note.trim()) { setTips('Please write something...') return } setLoading(true) const area = areas.find((field) => field.id === areaId)! const data = await chrome.runtime.sendMessage({ type: BACKGROUND_EVENTS.SUBMIT_CONTENT, payload: { content: note, area: area, }, }) if (data?.code === SUCCESS) { setNote('') destroy() } else { setLoading(false) alert('Add note failed. Please try again.') } } const boxWidth = 360 const boxHeight = 200 const posX = x || window.innerWidth / 2 - boxWidth / 2 const posY = y || window.innerHeight * 0.2 // const posX = window.innerWidth / 2 - boxWidth / 2 // const posY = window.innerHeight * 0.2 // console.log('posX:', posX, 'posY:', posY) const containerX = useMotionValue(0) const containerY = useMotionValue(0) const area = areas.find((field) => field.id === areaId) useEffect(() => { if (!areas?.length) return if (!areaId) { setAreaId(areas[0]?.id) } }, [areas]) return ( { containerX.set(containerX.get() + info.delta.x) containerY.set(containerY.get() + info.delta.y) }} >
Add note
{tips &&
{tips}
}
destroy()} >
{ setNote(e.target.value) setTips('') }} onKeyDown={(e) => { if (e.key === 'Enter' && e.metaKey) { e.preventDefault() } }} />
Save to
{area ? ( <> {/* {area?.name.slice(0, 1)} */} {area?.name} ) : ( Select an area )}
{areas.map((field) => (
setAreaId(field.id)} > {field.name.slice(0, 1)} {field.name}
))}
{/*
*/}
) }, )