Commit 735dd1fe authored by Johnny's avatar Johnny

style(MemoView): restore comments and formatting

- Add back descriptive comments removed by editor refactoring commit
- Restore original timestamp calculation format in MemoHeader
- Improve code readability with section comments
parent e61d594d
...@@ -15,6 +15,8 @@ interface Props { ...@@ -15,6 +15,8 @@ interface Props {
const MemoBody: React.FC<Props> = ({ compact, onContentClick, onContentDoubleClick, onToggleNsfwVisibility }) => { const MemoBody: React.FC<Props> = ({ compact, onContentClick, onContentDoubleClick, onToggleNsfwVisibility }) => {
const t = useTranslate(); const t = useTranslate();
// Get shared state from context
const { memo, readonly, parentPage, nsfw, showNSFWContent } = useMemoViewContext(); const { memo, readonly, parentPage, nsfw, showNSFWContent } = useMemoViewContext();
const referencedMemos = memo.relations.filter((relation) => relation.type === MemoRelation_Type.REFERENCE); const referencedMemos = memo.relations.filter((relation) => relation.type === MemoRelation_Type.REFERENCE);
...@@ -34,7 +36,7 @@ const MemoBody: React.FC<Props> = ({ compact, onContentClick, onContentDoubleCli ...@@ -34,7 +36,7 @@ const MemoBody: React.FC<Props> = ({ compact, onContentClick, onContentDoubleCli
readonly={readonly} readonly={readonly}
onClick={onContentClick} onClick={onContentClick}
onDoubleClick={onContentDoubleClick} onDoubleClick={onContentDoubleClick}
compact={memo.pinned ? false : compact} compact={memo.pinned ? false : compact} // Always show full content when pinned
parentPage={parentPage} parentPage={parentPage}
/> />
{memo.location && <LocationDisplay mode="view" location={memo.location} />} {memo.location && <LocationDisplay mode="view" location={memo.location} />}
...@@ -43,6 +45,7 @@ const MemoBody: React.FC<Props> = ({ compact, onContentClick, onContentDoubleCli ...@@ -43,6 +45,7 @@ const MemoBody: React.FC<Props> = ({ compact, onContentClick, onContentDoubleCli
<MemoReactionListView memo={memo} reactions={memo.reactions} /> <MemoReactionListView memo={memo} reactions={memo.reactions} />
</div> </div>
{/* NSFW content overlay */}
{nsfw && !showNSFWContent && ( {nsfw && !showNSFWContent && (
<> <>
<div className="absolute inset-0 bg-transparent" /> <div className="absolute inset-0 bg-transparent" />
......
...@@ -38,18 +38,24 @@ const MemoHeader: React.FC<Props> = ({ ...@@ -38,18 +38,24 @@ const MemoHeader: React.FC<Props> = ({
onReactionSelectorOpenChange, onReactionSelectorOpenChange,
}) => { }) => {
const t = useTranslate(); const t = useTranslate();
// Get shared state from context
const { memo, creator, isArchived, commentAmount, isInMemoDetailPage, parentPage, readonly, relativeTimeFormat, nsfw, showNSFWContent } = const { memo, creator, isArchived, commentAmount, isInMemoDetailPage, parentPage, readonly, relativeTimeFormat, nsfw, showNSFWContent } =
useMemoViewContext(); useMemoViewContext();
const timestamp = memo.displayTime ? timestampDate(memo.displayTime) : undefined;
const displayTime = isArchived ? ( const displayTime = isArchived ? (
timestamp?.toLocaleString(i18n.language) (memo.displayTime ? timestampDate(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}
></relative-time>
); );
return ( return (
<div className="w-full flex flex-row justify-between items-center gap-2"> <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"> <div className="w-auto max-w-[calc(100%-8rem)] grow flex flex-row justify-start items-center">
{showCreator && creator ? ( {showCreator && creator ? (
<CreatorDisplay creator={creator} displayTime={displayTime} onGotoDetail={onGotoDetail} /> <CreatorDisplay creator={creator} displayTime={displayTime} onGotoDetail={onGotoDetail} />
...@@ -58,7 +64,9 @@ const MemoHeader: React.FC<Props> = ({ ...@@ -58,7 +64,9 @@ const MemoHeader: React.FC<Props> = ({
)} )}
</div> </div>
{/* Right section: Actions */}
<div className="flex flex-row justify-end items-center select-none shrink-0 gap-2"> <div className="flex flex-row justify-end items-center select-none shrink-0 gap-2">
{/* Reaction selector */}
{!isArchived && ( {!isArchived && (
<ReactionSelector <ReactionSelector
className={cn("border-none w-auto h-auto", reactionSelectorOpen && "block!", "hidden group-hover:block")} className={cn("border-none w-auto h-auto", reactionSelectorOpen && "block!", "hidden group-hover:block")}
...@@ -67,6 +75,7 @@ const MemoHeader: React.FC<Props> = ({ ...@@ -67,6 +75,7 @@ const MemoHeader: React.FC<Props> = ({
/> />
)} )}
{/* Comment count link */}
{!isInMemoDetailPage && ( {!isInMemoDetailPage && (
<Link <Link
className={cn( className={cn(
...@@ -82,6 +91,7 @@ const MemoHeader: React.FC<Props> = ({ ...@@ -82,6 +91,7 @@ const MemoHeader: React.FC<Props> = ({
</Link> </Link>
)} )}
{/* Visibility icon */}
{showVisibility && memo.visibility !== Visibility.PRIVATE && ( {showVisibility && memo.visibility !== Visibility.PRIVATE && (
<Tooltip> <Tooltip>
<TooltipTrigger> <TooltipTrigger>
...@@ -95,6 +105,7 @@ const MemoHeader: React.FC<Props> = ({ ...@@ -95,6 +105,7 @@ const MemoHeader: React.FC<Props> = ({
</Tooltip> </Tooltip>
)} )}
{/* Pinned indicator */}
{showPinned && memo.pinned && ( {showPinned && memo.pinned && (
<TooltipProvider> <TooltipProvider>
<Tooltip> <Tooltip>
...@@ -110,12 +121,14 @@ const MemoHeader: React.FC<Props> = ({ ...@@ -110,12 +121,14 @@ const MemoHeader: React.FC<Props> = ({
</TooltipProvider> </TooltipProvider>
)} )}
{/* NSFW hide button */}
{nsfw && showNSFWContent && onToggleNsfwVisibility && ( {nsfw && showNSFWContent && onToggleNsfwVisibility && (
<span className="cursor-pointer"> <span className="cursor-pointer">
<EyeOffIcon className="w-4 h-auto text-primary" onClick={onToggleNsfwVisibility} /> <EyeOffIcon className="w-4 h-auto text-primary" onClick={onToggleNsfwVisibility} />
</span> </span>
)} )}
{/* Action menu */}
<MemoActionMenu memo={memo} readonly={readonly} onEdit={onEdit} /> <MemoActionMenu memo={memo} readonly={readonly} onEdit={onEdit} />
</div> </div>
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment