tooot/src/screens/Tabs/Shared/Account/Information/Actions.tsx

137 lines
4.5 KiB
TypeScript
Raw Normal View History

import Button from '@components/Button'
2022-12-04 13:26:36 +01:00
import menuAt from '@components/contextMenu/at'
import { RelationshipOutgoing } from '@components/Relationship'
2020-12-27 16:25:29 +01:00
import { useNavigation } from '@react-navigation/native'
import { checkIsMyAccount } from '@utils/helpers/isMyAccount'
import { StyleConstants } from '@utils/styles/constants'
2023-01-02 02:08:12 +01:00
import React, { useContext } from 'react'
2021-01-23 02:41:50 +01:00
import { useTranslation } from 'react-i18next'
2021-05-09 21:59:03 +02:00
import { StyleSheet, View } from 'react-native'
2022-12-04 13:26:36 +01:00
import * as DropdownMenu from 'zeego/dropdown-menu'
2023-01-02 02:08:12 +01:00
import AccountContext from '../Context'
2020-12-27 16:25:29 +01:00
2023-01-02 02:08:12 +01:00
const AccountInformationActions: React.FC = () => {
const { account, relationship, pageMe } = useContext(AccountContext)
2021-01-23 02:41:50 +01:00
2022-11-06 23:39:31 +01:00
if (!account || account.suspended) {
return null
}
2021-05-09 21:59:03 +02:00
const { t } = useTranslation('screenTabs')
2021-08-29 15:25:38 +02:00
const navigation = useNavigation<any>()
2021-05-09 21:59:03 +02:00
if (account?.moved) {
const accountMoved = account.moved
return (
<View style={styles.base}>
<Button
type='text'
content={t('shared.account.moved')}
2022-11-29 23:44:11 +01:00
onPress={() => navigation.push('Tab-Shared-Account', { account: accountMoved })}
2021-05-09 21:59:03 +02:00
/>
</View>
)
}
2023-01-02 02:08:12 +01:00
if (pageMe) {
2021-05-09 21:59:03 +02:00
return (
<View style={styles.base}>
<Button
2023-03-18 23:18:09 +01:00
round
type='icon'
2021-05-09 21:59:03 +02:00
disabled={account === undefined}
2023-03-18 23:18:09 +01:00
content='edit-3'
2021-05-09 21:59:03 +02:00
onPress={() => navigation.navigate('Tab-Me-Profile')}
/>
<Button
round
type='icon'
disabled={account === undefined}
content='sliders'
2023-03-18 23:18:09 +01:00
style={{ marginLeft: StyleConstants.Spacing.M }}
onPress={() =>
navigation.navigate('Tab-Me-Preferences', { screen: 'Tab-Me-Preferences-Root' })
}
/>
2021-05-09 21:59:03 +02:00
</View>
)
}
const isMyAccount = checkIsMyAccount(account?.id)
2021-05-09 21:59:03 +02:00
2022-12-04 13:26:36 +01:00
const mAt = menuAt({ account })
if (!isMyAccount && account) {
2021-05-09 21:59:03 +02:00
return (
<View style={styles.base}>
{relationship && !relationship.blocked_by ? (
2022-12-04 13:26:36 +01:00
<DropdownMenu.Root>
<DropdownMenu.Trigger>
<Button
round
type='icon'
content='at-sign'
2023-07-12 23:36:44 +02:00
style={{ marginRight: StyleConstants.Spacing.S }}
2022-12-04 13:26:36 +01:00
onPress={() => {}}
/>
</DropdownMenu.Trigger>
<DropdownMenu.Content>
2023-01-08 16:59:35 +01:00
{mAt.map((group, index) => (
2022-12-04 13:26:36 +01:00
<DropdownMenu.Group key={index}>
2023-01-08 16:59:35 +01:00
{group.map(item => {
switch (item.type) {
case 'item':
return (
<DropdownMenu.Item key={item.key} {...item.props}>
<DropdownMenu.ItemTitle children={item.title} />
{item.icon ? <DropdownMenu.ItemIcon ios={{ name: item.icon }} /> : null}
</DropdownMenu.Item>
)
case 'sub':
return (
// @ts-ignore
<DropdownMenu.Sub key={item.key}>
<DropdownMenu.SubTrigger key={item.trigger.key} {...item.trigger.props}>
<DropdownMenu.ItemTitle children={item.trigger.title} />
{item.trigger.icon ? (
<DropdownMenu.ItemIcon ios={{ name: item.trigger.icon }} />
) : null}
</DropdownMenu.SubTrigger>
<DropdownMenu.SubContent>
{item.items.map(sub => (
<DropdownMenu.Item key={sub.key} {...sub.props}>
<DropdownMenu.ItemTitle children={sub.title} />
{sub.icon ? (
<DropdownMenu.ItemIcon ios={{ name: sub.icon }} />
) : null}
</DropdownMenu.Item>
))}
</DropdownMenu.SubContent>
</DropdownMenu.Sub>
)
}
})}
2022-12-04 13:26:36 +01:00
</DropdownMenu.Group>
))}
</DropdownMenu.Content>
</DropdownMenu.Root>
) : null}
2021-01-23 02:41:50 +01:00
<RelationshipOutgoing id={account.id} />
2021-05-09 21:59:03 +02:00
</View>
)
} else {
return null
}
2020-12-27 16:25:29 +01:00
}
const styles = StyleSheet.create({
2021-05-09 21:59:03 +02:00
base: {
alignSelf: 'flex-end',
2022-12-04 13:26:36 +01:00
flexDirection: 'row',
2023-07-12 23:36:44 +02:00
alignItems: 'center'
2022-12-04 13:26:36 +01:00
}
2020-12-27 16:25:29 +01:00
})
export default AccountInformationActions