Support Mitra notification subtype

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak 2024-09-14 17:04:31 +02:00
parent 6b7082f8fe
commit 6b6b9cc40a
6 changed files with 26 additions and 12 deletions

View file

@ -24,8 +24,14 @@ const accountNotificationSchema = baseNotificationSchema.extend({
type: z.enum(['follow', 'follow_request', 'admin.sign_up', 'bite']),
});
const mentionNotificationSchema = baseNotificationSchema.extend({
type: z.literal('mention'),
subtype: z.enum(['reply']).nullable().catch(null),
status: statusSchema,
});
const statusNotificationSchema = baseNotificationSchema.extend({
type: z.enum(['mention', 'status', 'reblog', 'favourite', 'poll', 'update', 'event_reminder']),
type: z.enum(['status', 'reblog', 'favourite', 'poll', 'update', 'event_reminder']),
status: statusSchema,
});
@ -77,6 +83,7 @@ const notificationSchema: z.ZodType<Notification> = z.preprocess((notification:
: notification.type?.replace(/^pleroma:/, ''),
}), z.discriminatedUnion('type', [
accountNotificationSchema,
mentionNotificationSchema,
statusNotificationSchema,
reportNotificationSchema,
severedRelationshipNotificationSchema,
@ -89,6 +96,7 @@ const notificationSchema: z.ZodType<Notification> = z.preprocess((notification:
type Notification = z.infer<
| typeof accountNotificationSchema
| typeof mentionNotificationSchema
| typeof statusNotificationSchema
| typeof reportNotificationSchema
| typeof severedRelationshipNotificationSchema

View file

@ -1,6 +1,6 @@
{
"name": "pl-api",
"version": "0.0.31",
"version": "0.0.32",
"type": "module",
"homepage": "https://github.com/mkljczk/pl-fe/tree/fork/packages/pl-api",
"repository": {

View file

@ -134,7 +134,7 @@
"multiselect-react-dropdown": "^2.0.25",
"object-to-formdata": "^4.5.1",
"path-browserify": "^1.0.1",
"pl-api": "^0.0.31",
"pl-api": "^0.0.32",
"postcss": "^8.4.29",
"process": "^0.11.10",
"punycode": "^2.1.1",

View file

@ -40,7 +40,7 @@ const buildLink = (account: Pick<Account, 'acct' | 'display_name_html'>): JSX.El
</bdi>
);
const icons: Partial<Record<NotificationType, string>> = {
const icons: Partial<Record<NotificationType | 'reply', string>> = {
follow: require('@tabler/icons/outline/user-plus.svg'),
follow_request: require('@tabler/icons/outline/user-plus.svg'),
mention: require('@tabler/icons/outline/at.svg'),
@ -56,9 +56,10 @@ const icons: Partial<Record<NotificationType, string>> = {
participation_request: require('@tabler/icons/outline/calendar-event.svg'),
participation_accepted: require('@tabler/icons/outline/calendar-event.svg'),
bite: require('@tabler/icons/outline/pacman.svg'),
reply: require('@tabler/icons/outline/corner-up-left.svg'),
};
const messages: Record<NotificationType, MessageDescriptor> = defineMessages({
const messages: Record<NotificationType | 'reply', MessageDescriptor> = defineMessages({
follow: {
id: 'notification.follow',
defaultMessage: '{name} followed you',
@ -135,11 +136,15 @@ const messages: Record<NotificationType, MessageDescriptor> = defineMessages({
id: 'notification.bite',
defaultMessage: '{name} has bit you',
},
reply: {
id: 'notification.reply',
defaultMessage: '{name} replied to your post',
},
});
const buildMessage = (
intl: IntlShape,
type: NotificationType,
type: NotificationType | 'reply',
accounts: Array<Pick<Account, 'acct' | 'display_name_html'>>,
targetName: string,
instanceTitle: string,
@ -292,7 +297,7 @@ const Notification: React.FC<INotification> = (props) => {
} else if (icons[type]) {
return (
<Icon
src={icons[type]!}
src={icons[type === 'mention' ? notification.subtype || type : type]!}
className='flex-none text-primary-600 dark:text-primary-400'
/>
);
@ -362,7 +367,7 @@ const Notification: React.FC<INotification> = (props) => {
const targetName = notification.type === 'move' ? notification.target.acct : '';
const message: React.ReactNode = account && typeof account === 'object'
? buildMessage(intl, type, accounts, targetName, instance.title)
? buildMessage(intl, type === 'mention' ? notification.subtype || type : type, accounts, targetName, instance.title)
: null;
const ariaLabel = (

View file

@ -1124,6 +1124,7 @@
"notification.pleroma:participation_request": "{name} wants to join your event",
"notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} reposted your post",
"notification.reply": "{name} replied to your post",
"notification.severed_relationships": "Lost connections with {name}",
"notification.status": "{name} just posted",
"notification.update": "{name} edited a post you interacted with",

View file

@ -8240,10 +8240,10 @@ pkg-types@^1.0.3:
mlly "^1.2.0"
pathe "^1.1.0"
pl-api@^0.0.31:
version "0.0.31"
resolved "https://registry.yarnpkg.com/pl-api/-/pl-api-0.0.31.tgz#63720a2620c304e461cf758f566809b78d4ce080"
integrity sha512-L0d7LveBpas9Et9tRePuCfcSb3nzEgbNTyVXbivV7Je+jwGCXnhXo7O7VMl+EnjjJKW+wlqfSer7Y+Db9UCXAw==
pl-api@^0.0.32:
version "0.0.32"
resolved "https://registry.yarnpkg.com/pl-api/-/pl-api-0.0.32.tgz#d6d86342c99c740bdb4e99a67ef249caede7390a"
integrity sha512-uIh98+/5Z9CVoP5b77+tH2ETsSeLKmSXR0vmH7vkxQdjssrv139puy7jv7aYKnbOj2uqm3IDTCyYzI4q0KNFBQ==
dependencies:
blurhash "^2.0.5"
http-link-header "^1.1.3"