import type { FC, HTMLAttributes, MouseEventHandler, ReactNode } from 'react'; import { defineMessage, useIntl } from 'react-intl'; import classNames from 'classnames'; import { Link } from 'react-router-dom'; import { isStatusVisibility } from '@/mastodon/api_types/statuses'; import type { Account } from '@/mastodon/models/account'; import type { Status } from '@/mastodon/models/status'; import { Avatar } from '../avatar'; import { AvatarOverlay } from '../avatar_overlay'; import type { DisplayNameProps } from '../display_name'; import { LinkedDisplayName } from '../display_name'; import { RelativeTimestamp } from '../relative_timestamp'; import { VisibilityIcon } from '../visibility_icon'; export interface StatusHeaderProps { status: Status; account?: Account; avatarSize?: number; children?: ReactNode; wrapperProps?: HTMLAttributes; displayNameProps?: DisplayNameProps; onHeaderClick?: MouseEventHandler; className?: string; featured?: boolean; } export type StatusHeaderRenderFn = (args: StatusHeaderProps) => ReactNode; export const StatusHeader: FC = ({ status, account, children, className, avatarSize = 48, wrapperProps, onHeaderClick, }) => { const statusAccount = status.get('account') as Account | undefined; const editedAt = status.get('edited_at') as string; return ( /* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */
{editedAt && } {children}
); }; export const StatusVisibility: FC<{ visibility: unknown }> = ({ visibility, }) => { if (typeof visibility !== 'string' || !isStatusVisibility(visibility)) { return null; } return ( ); }; const editMessage = defineMessage({ id: 'status.edited', defaultMessage: 'Edited {date}', }); export const StatusEditedAt: FC<{ editedAt: string }> = ({ editedAt }) => { const intl = useIntl(); return ( {' '} * ); }; export const StatusDisplayName: FC<{ statusAccount?: Account; friendAccount?: Account; avatarSize: number; }> = ({ statusAccount, friendAccount, avatarSize }) => { const AccountComponent = friendAccount ? AvatarOverlay : Avatar; return (
); };