@ -38,18 +38,24 @@ const MemoHeader: React.FC<Props> = ({
onReactionSelectorOpenChange ,
} ) = > {
const t = useTranslate ( ) ;
// Get shared state from context
const { memo , creator , isArchived , commentAmount , isInMemoDetailPage , parentPage , readonly , relativeTimeFormat , nsfw , showNSFWContent } =
useMemoViewContext ( ) ;
const timestamp = memo . displayTime ? timestampDate ( memo . displayTime ) : undefined ;
const displayTime = isArchived ? (
timestamp ? . toLocaleString ( i18n . language )
( memo . displayTime ? timestamp Date( memo . displayTime ) : undefined ) ? . toLocaleString ( i18n . language )
) : (
< relative - time datetime = { timestamp ? . toISOString ( ) } lang = { i18n . language } format = { relativeTimeFormat } / >
< relative - time
datetime = { ( memo . displayTime ? timestampDate ( memo . displayTime ) : undefined ) ? . toISOString ( ) }
lang = { i18n . language }
format = { relativeTimeFormat }
> < / r e l a t i v e - t i m e >
) ;
return (
< div className = "w-full flex flex-row justify-between items-center gap-2" >
{ /* Left section: Creator info or time */ }
< div className = "w-auto max-w-[calc(100%-8rem)] grow flex flex-row justify-start items-center" >
{ showCreator && creator ? (
< CreatorDisplay creator = { creator } displayTime = { displayTime } onGotoDetail = { onGotoDetail } / >
@ -58,7 +64,9 @@ const MemoHeader: React.FC<Props> = ({
) }
< / div >
{ /* Right section: Actions */ }
< div className = "flex flex-row justify-end items-center select-none shrink-0 gap-2" >
{ /* Reaction selector */ }
{ ! isArchived && (
< ReactionSelector
className = { cn ( "border-none w-auto h-auto" , reactionSelectorOpen && "block!" , "hidden group-hover:block" ) }
@ -67,6 +75,7 @@ const MemoHeader: React.FC<Props> = ({
/ >
) }
{ /* Comment count link */ }
{ ! isInMemoDetailPage && (
< Link
className = { cn (
@ -82,6 +91,7 @@ const MemoHeader: React.FC<Props> = ({
< / Link >
) }
{ /* Visibility icon */ }
{ showVisibility && memo . visibility !== Visibility . PRIVATE && (
< Tooltip >
< TooltipTrigger >
@ -95,6 +105,7 @@ const MemoHeader: React.FC<Props> = ({
< / Tooltip >
) }
{ /* Pinned indicator */ }
{ showPinned && memo . pinned && (
< TooltipProvider >
< Tooltip >
@ -110,12 +121,14 @@ const MemoHeader: React.FC<Props> = ({
< / TooltipProvider >
) }
{ /* NSFW hide button */ }
{ nsfw && showNSFWContent && onToggleNsfwVisibility && (
< span className = "cursor-pointer" >
< EyeOffIcon className = "w-4 h-auto text-primary" onClick = { onToggleNsfwVisibility } / >
< / span >
) }
{ /* Action menu */ }
< MemoActionMenu memo = { memo } readonly = { readonly } onEdit = { onEdit } / >
< / div >
< / div >