mirror of
https://github.com/mastodon/mastodon.git
synced 2025-01-01 16:05:08 +01:00
Display description of first captioned media in notifications
This commit is contained in:
parent
3ddeaca863
commit
d52abc6a13
@ -19,6 +19,11 @@ import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
|||||||
import { EmbeddedStatusContent } from './embedded_status_content';
|
import { EmbeddedStatusContent } from './embedded_status_content';
|
||||||
|
|
||||||
export type Mention = RecordOf<{ url: string; acct: string }>;
|
export type Mention = RecordOf<{ url: string; acct: string }>;
|
||||||
|
export type MediaAttachment = RecordOf<{
|
||||||
|
id: string;
|
||||||
|
type: string;
|
||||||
|
description?: string;
|
||||||
|
}>;
|
||||||
|
|
||||||
export const EmbeddedStatus: React.FC<{ statusId: string }> = ({
|
export const EmbeddedStatus: React.FC<{ statusId: string }> = ({
|
||||||
statusId,
|
statusId,
|
||||||
@ -114,9 +119,72 @@ export const EmbeddedStatus: React.FC<{ statusId: string }> = ({
|
|||||||
const language = status.get('language') as string;
|
const language = status.get('language') as string;
|
||||||
const mentions = status.get('mentions') as ImmutableList<Mention>;
|
const mentions = status.get('mentions') as ImmutableList<Mention>;
|
||||||
const expanded = !status.get('hidden') || !contentWarning;
|
const expanded = !status.get('hidden') || !contentWarning;
|
||||||
const mediaAttachmentsSize = (
|
const mediaAttachments = status.get(
|
||||||
status.get('media_attachments') as ImmutableList<unknown>
|
'media_attachments',
|
||||||
).size;
|
) as ImmutableList<MediaAttachment>;
|
||||||
|
const mediaAttachmentsSize = mediaAttachments.size;
|
||||||
|
const mediaAttachmentDescription = mediaAttachments.find(
|
||||||
|
(attachment) => !!attachment.get('description'),
|
||||||
|
)?.get('description');
|
||||||
|
|
||||||
|
const mediaAttachmentsList = [];
|
||||||
|
if (expanded) {
|
||||||
|
if (poll) {
|
||||||
|
mediaAttachmentsList.push(
|
||||||
|
<div
|
||||||
|
className='notification-group__embedded-status__attachments reply-indicator__attachments'
|
||||||
|
key='poll-indicator'
|
||||||
|
>
|
||||||
|
<Icon icon={BarChart4BarsIcon} id='bar-chart-4-bars' />
|
||||||
|
<FormattedMessage id='reply_indicator.poll' defaultMessage='Poll' />
|
||||||
|
</div>,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mediaAttachmentDescription) {
|
||||||
|
mediaAttachmentsList.push(
|
||||||
|
<div
|
||||||
|
className='notification-group__embedded-status__attachments reply-indicator__attachments'
|
||||||
|
key='media-description-indicator'
|
||||||
|
>
|
||||||
|
<Icon icon={PhotoLibraryIcon} id='photo-library' />
|
||||||
|
<span>
|
||||||
|
{mediaAttachmentDescription}
|
||||||
|
</span>
|
||||||
|
</div>,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (mediaAttachmentsSize > 1) {
|
||||||
|
mediaAttachmentsList.push(
|
||||||
|
<div
|
||||||
|
className='notification-group__embedded-status__attachments reply-indicator__attachments'
|
||||||
|
key='media-other-indicator'
|
||||||
|
>
|
||||||
|
<Icon icon={PhotoLibraryIcon} id='photo-library' />
|
||||||
|
<FormattedMessage
|
||||||
|
id='reply_indicator.and_other_attachments'
|
||||||
|
defaultMessage='and {count, plural, one {# other attachment} other {# other attachments}}'
|
||||||
|
values={{ count: mediaAttachmentsSize - 1 }}
|
||||||
|
/>
|
||||||
|
</div>,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else if (mediaAttachmentsSize > 0) {
|
||||||
|
mediaAttachmentsList.push(
|
||||||
|
<div
|
||||||
|
className='notification-group__embedded-status__attachments reply-indicator__attachments'
|
||||||
|
key='media-indicator'
|
||||||
|
>
|
||||||
|
<Icon icon={PhotoLibraryIcon} id='photo-library' />
|
||||||
|
<FormattedMessage
|
||||||
|
id='reply_indicator.attachments'
|
||||||
|
defaultMessage='{count, plural, one {# attachment} other {# attachments}}'
|
||||||
|
values={{ count: mediaAttachmentsSize }}
|
||||||
|
/>
|
||||||
|
</div>,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@ -150,29 +218,7 @@ export const EmbeddedStatus: React.FC<{ statusId: string }> = ({
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{expanded && (poll || mediaAttachmentsSize > 0) && (
|
{mediaAttachmentsList}
|
||||||
<div className='notification-group__embedded-status__attachments reply-indicator__attachments'>
|
|
||||||
{!!poll && (
|
|
||||||
<>
|
|
||||||
<Icon icon={BarChart4BarsIcon} id='bar-chart-4-bars' />
|
|
||||||
<FormattedMessage
|
|
||||||
id='reply_indicator.poll'
|
|
||||||
defaultMessage='Poll'
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
{mediaAttachmentsSize > 0 && (
|
|
||||||
<>
|
|
||||||
<Icon icon={PhotoLibraryIcon} id='photo-library' />
|
|
||||||
<FormattedMessage
|
|
||||||
id='reply_indicator.attachments'
|
|
||||||
defaultMessage='{count, plural, one {# attachment} other {# attachments}}'
|
|
||||||
values={{ count: mediaAttachmentsSize }}
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -687,6 +687,7 @@
|
|||||||
"relative_time.minutes": "{number}m",
|
"relative_time.minutes": "{number}m",
|
||||||
"relative_time.seconds": "{number}s",
|
"relative_time.seconds": "{number}s",
|
||||||
"relative_time.today": "today",
|
"relative_time.today": "today",
|
||||||
|
"reply_indicator.and_other_attachments": "and {count, plural, one {# other attachment} other {# other attachments}}",
|
||||||
"reply_indicator.attachments": "{count, plural, one {# attachment} other {# attachments}}",
|
"reply_indicator.attachments": "{count, plural, one {# attachment} other {# attachments}}",
|
||||||
"reply_indicator.cancel": "Cancel",
|
"reply_indicator.cancel": "Cancel",
|
||||||
"reply_indicator.poll": "Poll",
|
"reply_indicator.poll": "Poll",
|
||||||
|
@ -10644,6 +10644,12 @@ noscript {
|
|||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
color: $dark-text-color;
|
color: $dark-text-color;
|
||||||
|
|
||||||
|
span {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user