diff options
Diffstat (limited to 'src/view/lib/notifee.ts')
-rw-r--r-- | src/view/lib/notifee.ts | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/view/lib/notifee.ts b/src/view/lib/notifee.ts new file mode 100644 index 000000000..5e1917381 --- /dev/null +++ b/src/view/lib/notifee.ts @@ -0,0 +1,54 @@ +import notifee from '@notifee/react-native' +import {AppBskyEmbedImages} from '@atproto/api' +import {NotificationsViewItemModel} from '../../state/models/notifications-view' +import {enforceLen} from '../../lib/strings' + +export function displayNotification( + title: string, + body?: string, + image?: string, +) { + const opts: {title: string; body?: string; ios?: any} = {title} + if (body) { + opts.body = enforceLen(body, 70, true) + } + if (image) { + opts.ios = { + attachments: [{url: image}], + } + } + return notifee.displayNotification(opts) +} + +export function displayNotificationFromModel( + notif: NotificationsViewItemModel, +) { + let author = notif.author.displayName || notif.author.handle + let title: string + let body: string = '' + if (notif.isUpvote) { + title = `${author} liked your post` + body = notif.additionalPost?.thread?.postRecord?.text || '' + } else if (notif.isRepost) { + title = `${author} reposted your post` + body = notif.additionalPost?.thread?.postRecord?.text || '' + } else if (notif.isMention) { + title = `${author} mentioned you` + body = notif.additionalPost?.thread?.postRecord?.text || '' + } else if (notif.isReply) { + title = `${author} replied to your post` + body = notif.additionalPost?.thread?.postRecord?.text || '' + } else if (notif.isFollow) { + title = `${author} followed you` + } else { + return + } + let image + if ( + AppBskyEmbedImages.isPresented(notif.additionalPost?.thread?.post.embed) && + notif.additionalPost?.thread?.post.embed.images[0]?.thumb + ) { + image = notif.additionalPost.thread.post.embed.images[0].thumb + } + return displayNotification(title, body, image) +} |