2021-05-09 21:59:03 +02:00
|
|
|
import { MenuContainer, MenuRow } from '@components/Menu'
|
2021-05-17 23:09:50 +02:00
|
|
|
import { displayMessage } from '@components/Message'
|
2021-05-09 21:59:03 +02:00
|
|
|
import { useActionSheet } from '@expo/react-native-action-sheet'
|
|
|
|
import { StackScreenProps } from '@react-navigation/stack'
|
|
|
|
import { useProfileMutation, useProfileQuery } from '@utils/queryHooks/profile'
|
2021-05-17 23:09:50 +02:00
|
|
|
import { useTheme } from '@utils/styles/ThemeManager'
|
|
|
|
import React, { RefObject, useCallback } from 'react'
|
2021-05-09 21:59:03 +02:00
|
|
|
import { useTranslation } from 'react-i18next'
|
2021-05-17 23:09:50 +02:00
|
|
|
import FlashMessage from 'react-native-flash-message'
|
2021-05-09 21:59:03 +02:00
|
|
|
import { ScrollView } from 'react-native-gesture-handler'
|
2021-05-17 23:09:50 +02:00
|
|
|
import ProfileAvatarHeader from './Root/AvatarHeader'
|
2021-05-09 21:59:03 +02:00
|
|
|
|
2021-05-11 21:38:48 +02:00
|
|
|
const TabMeProfileRoot: React.FC<StackScreenProps<
|
2021-05-09 21:59:03 +02:00
|
|
|
Nav.TabMeProfileStackParamList,
|
|
|
|
'Tab-Me-Profile-Root'
|
2021-05-17 23:09:50 +02:00
|
|
|
> & { messageRef: RefObject<FlashMessage> }> = ({ messageRef, navigation }) => {
|
|
|
|
const { mode } = useTheme()
|
2021-05-09 21:59:03 +02:00
|
|
|
const { t } = useTranslation('screenTabs')
|
|
|
|
|
|
|
|
const { showActionSheetWithOptions } = useActionSheet()
|
|
|
|
|
|
|
|
const { data, isLoading } = useProfileQuery({})
|
2021-05-17 23:09:50 +02:00
|
|
|
const { mutateAsync } = useProfileMutation()
|
2021-05-09 21:59:03 +02:00
|
|
|
|
|
|
|
const onPressVisibility = useCallback(() => {
|
|
|
|
showActionSheetWithOptions(
|
|
|
|
{
|
|
|
|
title: t('me.profile.root.visibility.title'),
|
|
|
|
options: [
|
|
|
|
t('me.profile.root.visibility.options.public'),
|
|
|
|
t('me.profile.root.visibility.options.unlisted'),
|
|
|
|
t('me.profile.root.visibility.options.private'),
|
|
|
|
t('me.profile.root.visibility.options.cancel')
|
|
|
|
],
|
2021-05-09 23:30:13 +02:00
|
|
|
cancelButtonIndex: 3
|
2021-05-09 21:59:03 +02:00
|
|
|
},
|
|
|
|
async buttonIndex => {
|
|
|
|
switch (buttonIndex) {
|
|
|
|
case 0:
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({ type: 'source[privacy]', data: 'public' }).catch(
|
|
|
|
err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.visibility.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
break
|
|
|
|
case 1:
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({ type: 'source[privacy]', data: 'unlisted' }).catch(
|
|
|
|
err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.visibility.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
break
|
|
|
|
case 2:
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({ type: 'source[privacy]', data: 'private' }).catch(
|
|
|
|
err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.visibility.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}, [])
|
|
|
|
|
|
|
|
const onPressSensitive = useCallback(() => {
|
|
|
|
if (data?.source.sensitive === undefined) {
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({ type: 'source[sensitive]', data: true }).catch(err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.sensitive.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
} else {
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({
|
|
|
|
type: 'source[sensitive]',
|
|
|
|
data: !data.source.sensitive
|
|
|
|
}).catch(err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.sensitive.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
}
|
|
|
|
}, [data?.source.sensitive])
|
|
|
|
|
|
|
|
const onPressLock = useCallback(() => {
|
|
|
|
if (data?.locked === undefined) {
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({ type: 'locked', data: true }).catch(err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.lock.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
} else {
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({ type: 'locked', data: !data.locked }).catch(err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.lock.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
}
|
|
|
|
}, [data?.locked])
|
|
|
|
|
|
|
|
const onPressBot = useCallback(() => {
|
|
|
|
if (data?.bot === undefined) {
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({ type: 'bot', data: true }).catch(err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.bot.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
} else {
|
2021-05-17 23:09:50 +02:00
|
|
|
mutateAsync({ type: 'bot', data: !data?.bot }).catch(err =>
|
|
|
|
displayMessage({
|
|
|
|
ref: messageRef,
|
|
|
|
message: t('me.profile.feedback.failed', {
|
|
|
|
type: t('me.profile.root.bot.title')
|
|
|
|
}),
|
|
|
|
...(err && { description: err }),
|
|
|
|
mode,
|
|
|
|
type: 'error'
|
|
|
|
})
|
|
|
|
)
|
2021-05-09 21:59:03 +02:00
|
|
|
}
|
|
|
|
}, [data?.bot])
|
|
|
|
|
|
|
|
return (
|
|
|
|
<ScrollView>
|
|
|
|
<MenuContainer>
|
|
|
|
<MenuRow
|
|
|
|
title={t('me.profile.root.name.title')}
|
|
|
|
content={data?.display_name}
|
|
|
|
loading={isLoading}
|
|
|
|
iconBack='ChevronRight'
|
|
|
|
onPress={() => {
|
|
|
|
data &&
|
|
|
|
navigation.navigate('Tab-Me-Profile-Name', {
|
|
|
|
display_name: data.display_name
|
|
|
|
})
|
|
|
|
}}
|
|
|
|
/>
|
2021-05-17 23:09:50 +02:00
|
|
|
<ProfileAvatarHeader type='avatar' messageRef={messageRef} />
|
|
|
|
<ProfileAvatarHeader type='header' messageRef={messageRef} />
|
2021-05-09 21:59:03 +02:00
|
|
|
<MenuRow
|
|
|
|
title={t('me.profile.root.note.title')}
|
|
|
|
content={data?.source.note}
|
|
|
|
loading={isLoading}
|
|
|
|
iconBack='ChevronRight'
|
|
|
|
onPress={() => {
|
2021-05-13 02:03:24 +02:00
|
|
|
data &&
|
|
|
|
navigation.navigate('Tab-Me-Profile-Note', {
|
|
|
|
note: data.source?.note
|
|
|
|
})
|
2021-05-09 21:59:03 +02:00
|
|
|
}}
|
|
|
|
/>
|
|
|
|
<MenuRow
|
|
|
|
title={t('me.profile.root.fields.title')}
|
|
|
|
content={
|
|
|
|
data?.source.fields && data.source.fields.length
|
|
|
|
? t('me.profile.root.fields.total', {
|
|
|
|
count: data.source.fields.length
|
|
|
|
})
|
|
|
|
: undefined
|
|
|
|
}
|
|
|
|
loading={isLoading}
|
|
|
|
iconBack='ChevronRight'
|
|
|
|
onPress={() => {
|
|
|
|
navigation.navigate('Tab-Me-Profile-Fields', {
|
|
|
|
fields: data?.source.fields
|
|
|
|
})
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
</MenuContainer>
|
|
|
|
<MenuContainer>
|
|
|
|
<MenuRow
|
|
|
|
title={t('me.profile.root.visibility.title')}
|
|
|
|
content={
|
|
|
|
data?.source.privacy
|
|
|
|
? t(`me.profile.root.visibility.options.${data?.source.privacy}`)
|
|
|
|
: undefined
|
|
|
|
}
|
|
|
|
loading={isLoading}
|
|
|
|
iconBack='ChevronRight'
|
|
|
|
onPress={onPressVisibility}
|
|
|
|
/>
|
|
|
|
<MenuRow
|
|
|
|
title={t('me.profile.root.sensitive.title')}
|
|
|
|
switchValue={data?.source.sensitive}
|
|
|
|
switchOnValueChange={onPressSensitive}
|
|
|
|
loading={isLoading}
|
|
|
|
/>
|
|
|
|
</MenuContainer>
|
|
|
|
<MenuContainer>
|
|
|
|
<MenuRow
|
|
|
|
title={t('me.profile.root.lock.title')}
|
|
|
|
description={t('me.profile.root.lock.description')}
|
|
|
|
switchValue={data?.locked}
|
|
|
|
switchOnValueChange={onPressLock}
|
|
|
|
loading={isLoading}
|
|
|
|
/>
|
|
|
|
<MenuRow
|
|
|
|
title={t('me.profile.root.bot.title')}
|
|
|
|
description={t('me.profile.root.bot.description')}
|
|
|
|
switchValue={data?.bot}
|
|
|
|
switchOnValueChange={onPressBot}
|
|
|
|
loading={isLoading}
|
|
|
|
/>
|
|
|
|
</MenuContainer>
|
|
|
|
</ScrollView>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2021-05-11 21:38:48 +02:00
|
|
|
export default TabMeProfileRoot
|