Files
smesh/src/components/PostEditor/index.tsx
2025-08-29 22:59:00 +08:00

106 lines
2.6 KiB
TypeScript

import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle
} from '@/components/ui/dialog'
import { ScrollArea } from '@/components/ui/scroll-area'
import {
Sheet,
SheetContent,
SheetDescription,
SheetHeader,
SheetTitle
} from '@/components/ui/sheet'
import { useScreenSize } from '@/providers/ScreenSizeProvider'
import postEditor from '@/services/post-editor.service'
import { Event } from 'nostr-tools'
import { Dispatch, useMemo } from 'react'
import PostContent from './PostContent'
import Title from './Title'
export default function PostEditor({
defaultContent = '',
parentEvent,
open,
setOpen,
openFrom
}: {
defaultContent?: string
parentEvent?: Event
open: boolean
setOpen: Dispatch<boolean>
openFrom?: string[]
}) {
const { isSmallScreen } = useScreenSize()
const content = useMemo(() => {
return (
<PostContent
defaultContent={defaultContent}
parentEvent={parentEvent}
close={() => setOpen(false)}
openFrom={openFrom}
/>
)
}, [])
if (isSmallScreen) {
return (
<Sheet open={open} onOpenChange={setOpen}>
<SheetContent
className="h-full w-full p-0 border-none"
side="bottom"
hideClose
onEscapeKeyDown={(e) => {
if (postEditor.isSuggestionPopupOpen) {
e.preventDefault()
postEditor.closeSuggestionPopup()
}
}}
>
<ScrollArea className="px-4 h-full max-h-screen">
<div className="space-y-4 px-2 py-6">
<SheetHeader>
<SheetTitle className="text-start">
<Title parentEvent={parentEvent} />
</SheetTitle>
<SheetDescription className="hidden" />
</SheetHeader>
{content}
</div>
</ScrollArea>
</SheetContent>
</Sheet>
)
}
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogContent
className="p-0 max-w-2xl"
withoutClose
onEscapeKeyDown={(e) => {
if (postEditor.isSuggestionPopupOpen) {
e.preventDefault()
postEditor.closeSuggestionPopup()
}
}}
>
<ScrollArea className="px-4 h-full max-h-screen">
<div className="space-y-4 px-2 py-6">
<DialogHeader>
<DialogTitle>
<Title parentEvent={parentEvent} />
</DialogTitle>
<DialogDescription className="hidden" />
</DialogHeader>
{content}
</div>
</ScrollArea>
</DialogContent>
</Dialog>
)
}