tooot/src/components/ContextMenu/instance.ts

84 lines
2.3 KiB
TypeScript
Raw Normal View History

2022-06-06 22:49:43 +02:00
import { displayMessage } from '@components/Message'
2022-11-22 21:39:25 +01:00
import { QueryKeyTimeline, useTimelineMutation } from '@utils/queryHooks/timeline'
2022-06-06 22:49:43 +02:00
import { getInstanceUrl } from '@utils/slices/instancesSlice'
import { useTheme } from '@utils/styles/ThemeManager'
import { useTranslation } from 'react-i18next'
2022-12-03 01:08:38 +01:00
import { Alert } from 'react-native'
2022-06-06 22:49:43 +02:00
import { useQueryClient } from 'react-query'
import { useSelector } from 'react-redux'
2022-12-03 01:08:38 +01:00
const menuInstance = ({
status,
queryKey,
rootQueryKey
}: {
status?: Mastodon.Status
queryKey?: QueryKeyTimeline
2022-06-06 22:49:43 +02:00
rootQueryKey?: QueryKeyTimeline
2022-12-03 01:08:38 +01:00
}): ContextMenu[][] => {
if (!status || !queryKey) return []
2022-06-06 22:49:43 +02:00
const { theme } = useTheme()
2022-12-03 01:08:38 +01:00
const { t } = useTranslation('componentContextMenu')
2022-06-06 22:49:43 +02:00
const queryClient = useQueryClient()
const mutation = useTimelineMutation({
onSettled: () => {
displayMessage({
theme,
type: 'success',
message: t('common:message.success.message', {
function: t(`instance.block.action`, { instance })
})
})
queryClient.invalidateQueries(queryKey)
rootQueryKey && queryClient.invalidateQueries(rootQueryKey)
}
})
2022-12-03 01:08:38 +01:00
const menus: ContextMenu[][] = []
const currentInstance = useSelector(getInstanceUrl)
const instance = status.uri && status.uri.split(new RegExp(/\/\/(.*?)\//))[1]
2022-06-06 22:49:43 +02:00
if (currentInstance !== instance && instance) {
2022-12-03 01:08:38 +01:00
menus.push([
{
key: 'instance-block',
item: {
onSelect: () =>
Alert.alert(
t('instance.block.alert.title', { instance }),
t('instance.block.alert.message'),
[
{
text: t('instance.block.alert.buttons.confirm'),
style: 'destructive',
onPress: () => {
mutation.mutate({
type: 'domainBlock',
queryKey,
domain: instance
})
}
},
{
text: t('common:buttons.cancel')
}
]
),
disabled: false,
destructive: true,
hidden: false
},
title: t('instance.block.action', { instance }),
icon: ''
}
])
2022-06-06 22:49:43 +02:00
}
2022-12-03 01:08:38 +01:00
return menus
2022-06-06 22:49:43 +02:00
}
2022-12-03 01:08:38 +01:00
export default menuInstance