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 type { Account, AccountShapeFull } from '@/mastodon/models/account'; import { selectAccountStatus } from '@/mastodon/selectors/statuses'; import { useAppSelector } from '@/mastodon/store'; 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 { statusId: string; account?: Account | AccountShapeFull; avatarSize?: number; contentBeforeDate?: ReactNode; contentAfterDate?: ReactNode; wrapperProps?: HTMLAttributes; displayNameProps?: DisplayNameProps; onHeaderClick?: MouseEventHandler; className?: string; featured?: boolean; } export type StatusHeaderRenderFn = (args: StatusHeaderProps) => ReactNode; export const StatusHeader: FC = ({ statusId, account, className, avatarSize = 48, wrapperProps, contentBeforeDate, contentAfterDate, onHeaderClick, }) => { const status = useAppSelector((state) => selectAccountStatus(state, statusId), ); if (!status) { return null; } const statusAccount = status.account; const editedAt = status.edited_at; return ( /* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */
{contentBeforeDate} {editedAt && } {contentAfterDate}
); }; const editMessage = defineMessage({ id: 'status.edited', defaultMessage: 'Edited {date}', }); const StatusEditedAt: FC<{ editedAt: string }> = ({ editedAt }) => { const intl = useIntl(); return ( {' '} * ); }; const StatusDisplayName: FC<{ statusAccount?: AccountShapeFull; friendAccount?: Account | AccountShapeFull; avatarSize: number; }> = ({ statusAccount, friendAccount, avatarSize }) => { const AccountComponent = friendAccount ? AvatarOverlay : Avatar; return (
); };