tooot/src/components/ContextMenu/instance.ts

111 lines
3.0 KiB
TypeScript
Raw Normal View History

2022-06-06 22:49:43 +02:00
import analytics from '@components/analytics'
import { displayMessage } from '@components/Message'
import {
QueryKeyTimeline,
useTimelineMutation
} from '@utils/queryHooks/timeline'
import { getInstanceUrl } from '@utils/slices/instancesSlice'
import { useTheme } from '@utils/styles/ThemeManager'
import { useTranslation } from 'react-i18next'
import { Alert, Platform } from 'react-native'
import { ContextMenuAction } from 'react-native-context-menu-view'
import { useQueryClient } from 'react-query'
import { useSelector } from 'react-redux'
export interface Props {
2022-06-07 20:07:14 +02:00
actions: ContextMenuAction[]
2022-06-06 22:49:43 +02:00
status: Mastodon.Status
queryKey: QueryKeyTimeline
rootQueryKey?: QueryKeyTimeline
}
const contextMenuInstance = ({
2022-06-07 20:07:14 +02:00
actions,
2022-06-06 22:49:43 +02:00
status,
queryKey,
rootQueryKey
}: Props) => {
const { t } = useTranslation('componentContextMenu')
const { theme } = useTheme()
const currentInstance = useSelector(getInstanceUrl)
2022-06-19 12:51:44 +02:00
const instance = status?.uri && status.uri.split(new RegExp(/\/\/(.*?)\//))[1]
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)
}
})
if (currentInstance !== instance && instance) {
switch (Platform.OS) {
case 'ios':
2022-06-07 20:07:14 +02:00
actions.push({
2022-06-06 22:49:43 +02:00
id: 'instance',
title: t('instance.title'),
actions: [
{
id: 'instance-block',
title: t('instance.block.action', { instance }),
destructive: true
}
]
})
break
default:
2022-06-07 20:07:14 +02:00
actions.push({
2022-06-06 22:49:43 +02:00
id: 'instance-block',
title: t('instance.block.action', { instance }),
destructive: true
})
break
}
}
return (index: number) => {
if (
actions[index].id === 'instance-block' ||
(actions[index].id === 'instance' &&
actions[index].actions?.[0].id === 'instance-block')
) {
analytics('timeline_shared_headeractions_domain_block_press', {
page: queryKey[1].page
})
Alert.alert(
t('instance.block.alert.title', { instance }),
t('instance.block.alert.message'),
[
{
text: t('instance.block.alert.buttons.confirm'),
style: 'destructive',
onPress: () => {
analytics('timeline_shared_headeractions_domain_block_confirm', {
page: queryKey && queryKey[1].page
})
mutation.mutate({
type: 'domainBlock',
queryKey,
domain: instance
})
2022-06-06 22:49:43 +02:00
}
},
{
text: t('common:buttons.cancel')
}
]
)
2022-06-06 22:49:43 +02:00
}
}
}
export default contextMenuInstance