[Glitch] Add quoted_update notification type

Port f3a932d8a1 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
Claire
2025-08-25 17:44:18 +02:00
parent 7e25f6b606
commit 0710138578
6 changed files with 88 additions and 3 deletions

View File

@@ -31,7 +31,8 @@ export type NotificationWithStatusType =
| 'mention' | 'mention'
| 'quote' | 'quote'
| 'poll' | 'poll'
| 'update'; | 'update'
| 'quoted_update';
export type NotificationType = export type NotificationType =
| NotificationWithStatusType | NotificationWithStatusType

View File

@@ -7,6 +7,7 @@ import { FormattedMessage } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import EditIcon from '@/material-icons/400-24px/edit.svg?react';
import FormatQuoteIcon from '@/material-icons/400-24px/format_quote.svg?react';
import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react';
import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react';
import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react'; import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react';
@@ -101,6 +102,14 @@ export default class StatusPrepend extends PureComponent {
values={{ name: link }} values={{ name: link }}
/> />
); );
case 'quoted_update':
return (
<FormattedMessage
id='notification.quoted_update'
defaultMessage='{name} edited a post you have quoted'
values={{ name: link }}
/>
);
case 'quote': case 'quote':
return ( return (
<FormattedMessage <FormattedMessage
@@ -142,9 +151,13 @@ export default class StatusPrepend extends PureComponent {
iconComponent = HomeIcon; iconComponent = HomeIcon;
break; break;
case 'update': case 'update':
case 'quoted_update':
iconId = 'pencil'; iconId = 'pencil';
iconComponent = EditIcon; iconComponent = EditIcon;
break; break;
case 'quote':
iconId = 'quote';
iconComponent = FormatQuoteIcon;
} }
return !type ? null : ( return !type ? null : (

View File

@@ -9,7 +9,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import FlagIcon from '@/material-icons/400-24px/flag-fill.svg?react'; import FlagIcon from '@/material-icons/400-24px/flag-fill.svg?react';
import FormatQuoteIcon from '@/material-icons/400-24px/format_quote.svg?react';
import PersonIcon from '@/material-icons/400-24px/person-fill.svg?react'; import PersonIcon from '@/material-icons/400-24px/person-fill.svg?react';
import PersonAddIcon from '@/material-icons/400-24px/person_add-fill.svg?react'; import PersonAddIcon from '@/material-icons/400-24px/person_add-fill.svg?react';
import { Account } from 'flavours/glitch/components/account'; import { Account } from 'flavours/glitch/components/account';
@@ -286,6 +285,31 @@ class Notification extends ImmutablePureComponent {
); );
} }
renderQuotedUpdate (notification) {
return (
<StatusQuoteManager
containerId={notification.get('id')}
hidden={!!this.props.hidden}
id={notification.get('status')}
account={notification.get('account')}
prepend='quoted_update'
muted
notification={notification}
onMoveDown={this.handleMoveDown}
onMoveUp={this.handleMoveUp}
onMention={this.props.onMention}
contextType='notifications'
getScrollPosition={this.props.getScrollPosition}
updateScrollBottom={this.props.updateScrollBottom}
cachedMediaWidth={this.props.cachedMediaWidth}
cacheMediaWidth={this.props.cacheMediaWidth}
onUnmount={this.props.onUnmount}
withDismiss
unread={this.props.unread}
/>
);
}
renderPoll (notification) { renderPoll (notification) {
return ( return (
<StatusQuoteManager <StatusQuoteManager
@@ -448,6 +472,8 @@ class Notification extends ImmutablePureComponent {
return this.renderStatus(notification); return this.renderStatus(notification);
case 'update': case 'update':
return this.renderUpdate(notification); return this.renderUpdate(notification);
case 'quoted_update':
return this.renderQuotedUpdate(notification);
case 'poll': case 'poll':
return this.renderPoll(notification); return this.renderPoll(notification);
case 'severed_relationships': case 'severed_relationships':

View File

@@ -16,6 +16,7 @@ import { NotificationMention } from './notification_mention';
import { NotificationModerationWarning } from './notification_moderation_warning'; import { NotificationModerationWarning } from './notification_moderation_warning';
import { NotificationPoll } from './notification_poll'; import { NotificationPoll } from './notification_poll';
import { NotificationQuote } from './notification_quote'; import { NotificationQuote } from './notification_quote';
import { NotificationQuotedUpdate } from './notification_quoted_update';
import { NotificationReblog } from './notification_reblog'; import { NotificationReblog } from './notification_reblog';
import { NotificationSeveredRelationships } from './notification_severed_relationships'; import { NotificationSeveredRelationships } from './notification_severed_relationships';
import { NotificationStatus } from './notification_status'; import { NotificationStatus } from './notification_status';
@@ -115,6 +116,14 @@ export const NotificationGroup: React.FC<{
<NotificationUpdate unread={unread} notification={notificationGroup} /> <NotificationUpdate unread={unread} notification={notificationGroup} />
); );
break; break;
case 'quoted_update':
content = (
<NotificationQuotedUpdate
unread={unread}
notification={notificationGroup}
/>
);
break;
case 'admin.sign_up': case 'admin.sign_up':
content = ( content = (
<NotificationAdminSignUp <NotificationAdminSignUp

View File

@@ -0,0 +1,31 @@
import { FormattedMessage } from 'react-intl';
import EditIcon from '@/material-icons/400-24px/edit.svg?react';
import type { NotificationGroupQuotedUpdate } from 'flavours/glitch/models/notification_group';
import type { LabelRenderer } from './notification_group_with_status';
import { NotificationWithStatus } from './notification_with_status';
const labelRenderer: LabelRenderer = (displayedName) => (
<FormattedMessage
id='notification.quoted_update'
defaultMessage='{name} edited a post you have quoted'
values={{ name: displayedName }}
/>
);
export const NotificationQuotedUpdate: React.FC<{
notification: NotificationGroupQuotedUpdate;
unread: boolean;
}> = ({ notification, unread }) => (
<NotificationWithStatus
type='update'
icon={EditIcon}
iconId='edit'
accountIds={notification.sampleAccountIds}
count={notification.notifications_count}
statusId={notification.statusId}
labelRenderer={labelRenderer}
unread={unread}
/>
);

View File

@@ -39,6 +39,8 @@ export type NotificationGroupMention = BaseNotificationWithStatus<'mention'>;
export type NotificationGroupQuote = BaseNotificationWithStatus<'quote'>; export type NotificationGroupQuote = BaseNotificationWithStatus<'quote'>;
export type NotificationGroupPoll = BaseNotificationWithStatus<'poll'>; export type NotificationGroupPoll = BaseNotificationWithStatus<'poll'>;
export type NotificationGroupUpdate = BaseNotificationWithStatus<'update'>; export type NotificationGroupUpdate = BaseNotificationWithStatus<'update'>;
export type NotificationGroupQuotedUpdate =
BaseNotificationWithStatus<'quoted_update'>;
export type NotificationGroupFollow = BaseNotification<'follow'>; export type NotificationGroupFollow = BaseNotification<'follow'>;
export type NotificationGroupFollowRequest = BaseNotification<'follow_request'>; export type NotificationGroupFollowRequest = BaseNotification<'follow_request'>;
export type NotificationGroupAdminSignUp = BaseNotification<'admin.sign_up'>; export type NotificationGroupAdminSignUp = BaseNotification<'admin.sign_up'>;
@@ -91,6 +93,7 @@ export type NotificationGroup =
| NotificationGroupQuote | NotificationGroupQuote
| NotificationGroupPoll | NotificationGroupPoll
| NotificationGroupUpdate | NotificationGroupUpdate
| NotificationGroupQuotedUpdate
| NotificationGroupFollow | NotificationGroupFollow
| NotificationGroupFollowRequest | NotificationGroupFollowRequest
| NotificationGroupModerationWarning | NotificationGroupModerationWarning
@@ -141,7 +144,8 @@ export function createNotificationGroupFromJSON(
case 'mention': case 'mention':
case 'quote': case 'quote':
case 'poll': case 'poll':
case 'update': { case 'update':
case 'quoted_update': {
const { status_id: statusId, ...groupWithoutStatus } = group; const { status_id: statusId, ...groupWithoutStatus } = group;
return { return {
statusId: statusId ?? undefined, statusId: statusId ?? undefined,
@@ -215,6 +219,7 @@ export function createNotificationGroupFromNotificationJSON(
case 'quote': case 'quote':
case 'poll': case 'poll':
case 'update': case 'update':
case 'quoted_update':
return { return {
...group, ...group,
type: notification.type, type: notification.type,