filter out subs after unsubscribe
This commit is contained in:
@@ -2,12 +2,17 @@ import {useMemo, useState} from 'react'
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {
|
||||||
type AppBskyNotificationDefs,
|
type AppBskyNotificationDefs,
|
||||||
|
type AppBskyNotificationListActivitySubscriptions,
|
||||||
type ModerationOpts,
|
type ModerationOpts,
|
||||||
type Un$Typed,
|
type Un$Typed,
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
import {msg, Trans} from '@lingui/macro'
|
import {msg, Trans} from '@lingui/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {useMutation, useQueryClient} from '@tanstack/react-query'
|
import {
|
||||||
|
type InfiniteData,
|
||||||
|
useMutation,
|
||||||
|
useQueryClient,
|
||||||
|
} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
import {cleanError} from '#/lib/strings/errors'
|
import {cleanError} from '#/lib/strings/errors'
|
||||||
@@ -15,6 +20,7 @@ import {sanitizeHandle} from '#/lib/strings/handles'
|
|||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {isWeb} from '#/platform/detection'
|
import {isWeb} from '#/platform/detection'
|
||||||
import {updateProfileShadow} from '#/state/cache/profile-shadow'
|
import {updateProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
|
import {RQKEY_getActivitySubscriptions} from '#/state/queries/activity-subscriptions'
|
||||||
import {useAgent} from '#/state/session'
|
import {useAgent} from '#/state/session'
|
||||||
import * as Toast from '#/view/com/util/Toast'
|
import * as Toast from '#/view/com/util/Toast'
|
||||||
import {platform, useTheme, web} from '#/alf'
|
import {platform, useTheme, web} from '#/alf'
|
||||||
@@ -121,34 +127,54 @@ function DialogInner({
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
onSuccess: (_data, activitySubscription) => {
|
onSuccess: (_data, activitySubscription) => {
|
||||||
control.close(() =>
|
control.close(() => {
|
||||||
updateProfileShadow(queryClient, profile.did, {
|
updateProfileShadow(queryClient, profile.did, {
|
||||||
activitySubscription,
|
activitySubscription,
|
||||||
}),
|
|
||||||
)
|
|
||||||
if (!activitySubscription.post && !activitySubscription.reply) {
|
|
||||||
logger.metric('activitySubscription:disable', {})
|
|
||||||
Toast.show(
|
|
||||||
_(
|
|
||||||
msg`You will no longer receive notifications for ${sanitizeHandle(profile.handle, '@')}`,
|
|
||||||
),
|
|
||||||
'check',
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
logger.metric('activitySubscription:enable', {
|
|
||||||
setting: activitySubscription.reply ? 'posts_and_replies' : 'posts',
|
|
||||||
})
|
})
|
||||||
if (!initialState.post && !initialState.reply) {
|
|
||||||
|
if (!activitySubscription.post && !activitySubscription.reply) {
|
||||||
|
logger.metric('activitySubscription:disable', {})
|
||||||
Toast.show(
|
Toast.show(
|
||||||
_(
|
_(
|
||||||
msg`You'll start receiving notifications for ${sanitizeHandle(profile.handle, '@')}!`,
|
msg`You will no longer receive notifications for ${sanitizeHandle(profile.handle, '@')}`,
|
||||||
),
|
),
|
||||||
'check',
|
'check',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// filter out the subscription
|
||||||
|
queryClient.setQueryData(
|
||||||
|
RQKEY_getActivitySubscriptions,
|
||||||
|
(
|
||||||
|
old?: InfiniteData<AppBskyNotificationListActivitySubscriptions.OutputSchema>,
|
||||||
|
) => {
|
||||||
|
if (!old) return old
|
||||||
|
return {
|
||||||
|
...old,
|
||||||
|
pages: old.pages.map(page => ({
|
||||||
|
...page,
|
||||||
|
subscriptions: page.subscriptions.filter(
|
||||||
|
item => item.did !== profile.did,
|
||||||
|
),
|
||||||
|
})),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
Toast.show(_(msg`Changes saved`), 'check')
|
logger.metric('activitySubscription:enable', {
|
||||||
|
setting: activitySubscription.reply ? 'posts_and_replies' : 'posts',
|
||||||
|
})
|
||||||
|
if (!initialState.post && !initialState.reply) {
|
||||||
|
Toast.show(
|
||||||
|
_(
|
||||||
|
msg`You'll start receiving notifications for ${sanitizeHandle(profile.handle, '@')}!`,
|
||||||
|
),
|
||||||
|
'check',
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Toast.show(_(msg`Changes saved`), 'check')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
},
|
},
|
||||||
onError: err => {
|
onError: err => {
|
||||||
logger.error('Could not save activity subscription', {message: err})
|
logger.error('Could not save activity subscription', {message: err})
|
||||||
|
|||||||
@@ -154,10 +154,10 @@ export function ActivityNotificationSettingsScreen({}: Props) {
|
|||||||
By default, only accounts you follow can receive
|
By default, only accounts you follow can receive
|
||||||
alerts from you – this can be changed in{' '}
|
alerts from you – this can be changed in{' '}
|
||||||
<InlineLinkText
|
<InlineLinkText
|
||||||
label={_(msg`Privacy & Security settings`)}
|
label={_(msg`Privacy and Security settings`)}
|
||||||
to={{screen: 'PrivacyAndSecuritySettings'}}
|
to={{screen: 'PrivacyAndSecuritySettings'}}
|
||||||
style={[a.font_bold]}>
|
style={[a.font_bold]}>
|
||||||
Settings → Privacy & Security
|
Settings → Privacy and Security
|
||||||
</InlineLinkText>
|
</InlineLinkText>
|
||||||
.
|
.
|
||||||
</Trans>
|
</Trans>
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import {
|
|||||||
import {useAgent, useSession} from '#/state/session'
|
import {useAgent, useSession} from '#/state/session'
|
||||||
import * as Toast from '#/view/com/util/Toast'
|
import * as Toast from '#/view/com/util/Toast'
|
||||||
|
|
||||||
const RQKEY_getActivitySubscriptions = ['activity-subscriptions']
|
export const RQKEY_getActivitySubscriptions = ['activity-subscriptions']
|
||||||
const RQKEY_getNotificationDeclaration = ['notification-declaration']
|
export const RQKEY_getNotificationDeclaration = ['notification-declaration']
|
||||||
|
|
||||||
export function useActivitySubscriptionsQuery() {
|
export function useActivitySubscriptionsQuery() {
|
||||||
const agent = useAgent()
|
const agent = useAgent()
|
||||||
|
|||||||
Reference in New Issue
Block a user