mirror of
https://github.com/tooot-app/app
synced 2025-06-05 22:19:13 +02:00
Fix #616
This commit is contained in:
@ -196,37 +196,19 @@ const TimelineDefault: React.FC<Props> = ({
|
|||||||
</ContextMenu.Trigger>
|
</ContextMenu.Trigger>
|
||||||
|
|
||||||
<ContextMenu.Content>
|
<ContextMenu.Content>
|
||||||
{mShare.map((mGroup, index) => (
|
{[mShare, mStatus, mInstance].map(type => (
|
||||||
<ContextMenu.Group key={index}>
|
<>
|
||||||
{mGroup.map(menu => (
|
{type.map((mGroup, index) => (
|
||||||
<ContextMenu.Item key={menu.key} {...menu.item}>
|
<ContextMenu.Group key={index}>
|
||||||
<ContextMenu.ItemTitle children={menu.title} />
|
{mGroup.map(menu => (
|
||||||
<ContextMenu.ItemIcon iosIconName={menu.icon} />
|
<ContextMenu.Item key={menu.key} {...menu.item}>
|
||||||
</ContextMenu.Item>
|
<ContextMenu.ItemTitle children={menu.title} />
|
||||||
|
<ContextMenu.ItemIcon ios={{ name: menu.icon }} />
|
||||||
|
</ContextMenu.Item>
|
||||||
|
))}
|
||||||
|
</ContextMenu.Group>
|
||||||
))}
|
))}
|
||||||
</ContextMenu.Group>
|
</>
|
||||||
))}
|
|
||||||
|
|
||||||
{mStatus.map((mGroup, index) => (
|
|
||||||
<ContextMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<ContextMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<ContextMenu.ItemTitle children={menu.title} />
|
|
||||||
<ContextMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</ContextMenu.Item>
|
|
||||||
))}
|
|
||||||
</ContextMenu.Group>
|
|
||||||
))}
|
|
||||||
|
|
||||||
{mInstance.map((mGroup, index) => (
|
|
||||||
<ContextMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<ContextMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<ContextMenu.ItemTitle children={menu.title} />
|
|
||||||
<ContextMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</ContextMenu.Item>
|
|
||||||
))}
|
|
||||||
</ContextMenu.Group>
|
|
||||||
))}
|
))}
|
||||||
</ContextMenu.Content>
|
</ContextMenu.Content>
|
||||||
</ContextMenu.Root>
|
</ContextMenu.Root>
|
||||||
|
@ -164,37 +164,19 @@ const TimelineNotifications: React.FC<Props> = ({ notification, queryKey }) => {
|
|||||||
</ContextMenu.Trigger>
|
</ContextMenu.Trigger>
|
||||||
|
|
||||||
<ContextMenu.Content>
|
<ContextMenu.Content>
|
||||||
{mShare.map((mGroup, index) => (
|
{[mShare, mStatus, mInstance].map(type => (
|
||||||
<ContextMenu.Group key={index}>
|
<>
|
||||||
{mGroup.map(menu => (
|
{type.map((mGroup, index) => (
|
||||||
<ContextMenu.Item key={menu.key} {...menu.item}>
|
<ContextMenu.Group key={index}>
|
||||||
<ContextMenu.ItemTitle children={menu.title} />
|
{mGroup.map(menu => (
|
||||||
<ContextMenu.ItemIcon iosIconName={menu.icon} />
|
<ContextMenu.Item key={menu.key} {...menu.item}>
|
||||||
</ContextMenu.Item>
|
<ContextMenu.ItemTitle children={menu.title} />
|
||||||
|
<ContextMenu.ItemIcon ios={{ name: menu.icon }} />
|
||||||
|
</ContextMenu.Item>
|
||||||
|
))}
|
||||||
|
</ContextMenu.Group>
|
||||||
))}
|
))}
|
||||||
</ContextMenu.Group>
|
</>
|
||||||
))}
|
|
||||||
|
|
||||||
{mStatus.map((mGroup, index) => (
|
|
||||||
<ContextMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<ContextMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<ContextMenu.ItemTitle children={menu.title} />
|
|
||||||
<ContextMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</ContextMenu.Item>
|
|
||||||
))}
|
|
||||||
</ContextMenu.Group>
|
|
||||||
))}
|
|
||||||
|
|
||||||
{mInstance.map((mGroup, index) => (
|
|
||||||
<ContextMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<ContextMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<ContextMenu.ItemTitle children={menu.title} />
|
|
||||||
<ContextMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</ContextMenu.Item>
|
|
||||||
))}
|
|
||||||
</ContextMenu.Group>
|
|
||||||
))}
|
))}
|
||||||
</ContextMenu.Content>
|
</ContextMenu.Content>
|
||||||
</ContextMenu.Root>
|
</ContextMenu.Root>
|
||||||
|
@ -53,34 +53,19 @@ const TimelineHeaderAndroid: React.FC = () => {
|
|||||||
</DropdownMenu.Trigger>
|
</DropdownMenu.Trigger>
|
||||||
|
|
||||||
<DropdownMenu.Content>
|
<DropdownMenu.Content>
|
||||||
{mShare.map((mGroup, index) => (
|
{[mShare, mAccount, mStatus].map(type => (
|
||||||
<DropdownMenu.Group key={index}>
|
<>
|
||||||
{mGroup.map(menu => (
|
{type.map((mGroup, index) => (
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
<DropdownMenu.Group key={index}>
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
{mGroup.map(menu => (
|
||||||
</DropdownMenu.Item>
|
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
||||||
|
<DropdownMenu.ItemTitle children={menu.title} />
|
||||||
|
<DropdownMenu.ItemIcon ios={{ name: menu.icon }} />
|
||||||
|
</DropdownMenu.Item>
|
||||||
|
))}
|
||||||
|
</DropdownMenu.Group>
|
||||||
))}
|
))}
|
||||||
</DropdownMenu.Group>
|
</>
|
||||||
))}
|
|
||||||
|
|
||||||
{mAccount.map((mGroup, index) => (
|
|
||||||
<DropdownMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
))}
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
))}
|
|
||||||
|
|
||||||
{mStatus.map((mGroup, index) => (
|
|
||||||
<DropdownMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
))}
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
))}
|
))}
|
||||||
</DropdownMenu.Content>
|
</DropdownMenu.Content>
|
||||||
</DropdownMenu.Root>
|
</DropdownMenu.Root>
|
||||||
|
@ -83,37 +83,19 @@ const TimelineHeaderDefault: React.FC = () => {
|
|||||||
</DropdownMenu.Trigger>
|
</DropdownMenu.Trigger>
|
||||||
|
|
||||||
<DropdownMenu.Content>
|
<DropdownMenu.Content>
|
||||||
{mShare.map((mGroup, index) => (
|
{[mShare, mAccount, mStatus].map(type => (
|
||||||
<DropdownMenu.Group key={index}>
|
<>
|
||||||
{mGroup.map(menu => (
|
{type.map((mGroup, index) => (
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
<DropdownMenu.Group key={index}>
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
{mGroup.map(menu => (
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
||||||
</DropdownMenu.Item>
|
<DropdownMenu.ItemTitle children={menu.title} />
|
||||||
|
<DropdownMenu.ItemIcon ios={{ name: menu.icon }} />
|
||||||
|
</DropdownMenu.Item>
|
||||||
|
))}
|
||||||
|
</DropdownMenu.Group>
|
||||||
))}
|
))}
|
||||||
</DropdownMenu.Group>
|
</>
|
||||||
))}
|
|
||||||
|
|
||||||
{mAccount.map((mGroup, index) => (
|
|
||||||
<DropdownMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
))}
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
))}
|
|
||||||
|
|
||||||
{mStatus.map((mGroup, index) => (
|
|
||||||
<DropdownMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
))}
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
))}
|
))}
|
||||||
</DropdownMenu.Content>
|
</DropdownMenu.Content>
|
||||||
</DropdownMenu.Root>
|
</DropdownMenu.Root>
|
||||||
|
@ -90,48 +90,19 @@ const TimelineHeaderNotification: React.FC<Props> = ({ notification }) => {
|
|||||||
</DropdownMenu.Trigger>
|
</DropdownMenu.Trigger>
|
||||||
|
|
||||||
<DropdownMenu.Content>
|
<DropdownMenu.Content>
|
||||||
{mShare.map((mGroup, index) => (
|
{[mShare, mStatus, mAccount, mInstance].map(type => (
|
||||||
<DropdownMenu.Group key={index}>
|
<>
|
||||||
{mGroup.map(menu => (
|
{type.map((mGroup, index) => (
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
<DropdownMenu.Group key={index}>
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
{mGroup.map(menu => (
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
||||||
</DropdownMenu.Item>
|
<DropdownMenu.ItemTitle children={menu.title} />
|
||||||
|
<DropdownMenu.ItemIcon ios={{ name: menu.icon }} />
|
||||||
|
</DropdownMenu.Item>
|
||||||
|
))}
|
||||||
|
</DropdownMenu.Group>
|
||||||
))}
|
))}
|
||||||
</DropdownMenu.Group>
|
</>
|
||||||
))}
|
|
||||||
|
|
||||||
{mAccount.map((mGroup, index) => (
|
|
||||||
<DropdownMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
))}
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
))}
|
|
||||||
|
|
||||||
{mStatus.map((mGroup, index) => (
|
|
||||||
<DropdownMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
))}
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
))}
|
|
||||||
|
|
||||||
{mInstance.map((mGroup, index) => (
|
|
||||||
<DropdownMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
))}
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
))}
|
))}
|
||||||
</DropdownMenu.Content>
|
</DropdownMenu.Content>
|
||||||
</DropdownMenu.Root>
|
</DropdownMenu.Root>
|
||||||
|
@ -62,187 +62,185 @@ const menuStatus = ({
|
|||||||
|
|
||||||
const canEditPost = useSelector(checkInstanceFeature('edit_post'))
|
const canEditPost = useSelector(checkInstanceFeature('edit_post'))
|
||||||
|
|
||||||
if (ownAccount) {
|
menus.push([
|
||||||
menus.push([
|
{
|
||||||
{
|
key: 'status-edit',
|
||||||
key: 'status-edit',
|
item: {
|
||||||
item: {
|
onSelect: async () => {
|
||||||
onSelect: async () => {
|
let replyToStatus: Mastodon.Status | undefined = undefined
|
||||||
let replyToStatus: Mastodon.Status | undefined = undefined
|
if (status.in_reply_to_id) {
|
||||||
if (status.in_reply_to_id) {
|
replyToStatus = await apiInstance<Mastodon.Status>({
|
||||||
replyToStatus = await apiInstance<Mastodon.Status>({
|
|
||||||
method: 'get',
|
|
||||||
url: `statuses/${status.in_reply_to_id}`
|
|
||||||
}).then(res => res.body)
|
|
||||||
}
|
|
||||||
apiInstance<{
|
|
||||||
id: Mastodon.Status['id']
|
|
||||||
text: NonNullable<Mastodon.Status['text']>
|
|
||||||
spoiler_text: Mastodon.Status['spoiler_text']
|
|
||||||
}>({
|
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: `statuses/${status.id}/source`
|
url: `statuses/${status.in_reply_to_id}`
|
||||||
}).then(res => {
|
}).then(res => res.body)
|
||||||
navigation.navigate('Screen-Compose', {
|
}
|
||||||
type: 'edit',
|
apiInstance<{
|
||||||
incomingStatus: {
|
id: Mastodon.Status['id']
|
||||||
...status,
|
text: NonNullable<Mastodon.Status['text']>
|
||||||
text: res.body.text,
|
spoiler_text: Mastodon.Status['spoiler_text']
|
||||||
spoiler_text: res.body.spoiler_text
|
}>({
|
||||||
},
|
method: 'get',
|
||||||
...(replyToStatus && { replyToStatus }),
|
url: `statuses/${status.id}/source`
|
||||||
queryKey,
|
}).then(res => {
|
||||||
rootQueryKey
|
navigation.navigate('Screen-Compose', {
|
||||||
})
|
type: 'edit',
|
||||||
|
incomingStatus: {
|
||||||
|
...status,
|
||||||
|
text: res.body.text,
|
||||||
|
spoiler_text: res.body.spoiler_text
|
||||||
|
},
|
||||||
|
...(replyToStatus && { replyToStatus }),
|
||||||
|
queryKey,
|
||||||
|
rootQueryKey
|
||||||
})
|
})
|
||||||
},
|
})
|
||||||
disabled: false,
|
|
||||||
destructive: false,
|
|
||||||
hidden: !canEditPost
|
|
||||||
},
|
},
|
||||||
title: t('componentContextMenu:status.edit.action'),
|
disabled: false,
|
||||||
icon: 'square.and.pencil'
|
destructive: false,
|
||||||
|
hidden: !ownAccount || !canEditPost
|
||||||
},
|
},
|
||||||
{
|
title: t('componentContextMenu:status.edit.action'),
|
||||||
key: 'status-delete-edit',
|
icon: 'square.and.pencil'
|
||||||
item: {
|
},
|
||||||
onSelect: () =>
|
{
|
||||||
Alert.alert(
|
key: 'status-delete-edit',
|
||||||
t('componentContextMenu:status.deleteEdit.alert.title'),
|
item: {
|
||||||
t('componentContextMenu:status.deleteEdit.alert.message'),
|
onSelect: () =>
|
||||||
[
|
Alert.alert(
|
||||||
{
|
t('componentContextMenu:status.deleteEdit.alert.title'),
|
||||||
text: t('common:buttons.confirm'),
|
t('componentContextMenu:status.deleteEdit.alert.message'),
|
||||||
style: 'destructive',
|
[
|
||||||
onPress: async () => {
|
{
|
||||||
let replyToStatus: Mastodon.Status | undefined = undefined
|
text: t('common:buttons.confirm'),
|
||||||
if (status.in_reply_to_id) {
|
style: 'destructive',
|
||||||
replyToStatus = await apiInstance<Mastodon.Status>({
|
onPress: async () => {
|
||||||
method: 'get',
|
let replyToStatus: Mastodon.Status | undefined = undefined
|
||||||
url: `statuses/${status.in_reply_to_id}`
|
if (status.in_reply_to_id) {
|
||||||
}).then(res => res.body)
|
replyToStatus = await apiInstance<Mastodon.Status>({
|
||||||
}
|
method: 'get',
|
||||||
mutation
|
url: `statuses/${status.in_reply_to_id}`
|
||||||
.mutateAsync({
|
}).then(res => res.body)
|
||||||
type: 'deleteItem',
|
|
||||||
source: 'statuses',
|
|
||||||
queryKey,
|
|
||||||
id: status.id
|
|
||||||
})
|
|
||||||
.then(res => {
|
|
||||||
navigation.navigate('Screen-Compose', {
|
|
||||||
type: 'deleteEdit',
|
|
||||||
incomingStatus: res.body as Mastodon.Status,
|
|
||||||
...(replyToStatus && { replyToStatus }),
|
|
||||||
queryKey
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
},
|
mutation
|
||||||
{
|
.mutateAsync({
|
||||||
text: t('common:buttons.cancel')
|
|
||||||
}
|
|
||||||
]
|
|
||||||
),
|
|
||||||
disabled: false,
|
|
||||||
destructive: true,
|
|
||||||
hidden: false
|
|
||||||
},
|
|
||||||
title: t('componentContextMenu:status.deleteEdit.action'),
|
|
||||||
icon: 'pencil.and.outline'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: 'status-delete',
|
|
||||||
item: {
|
|
||||||
onSelect: () =>
|
|
||||||
Alert.alert(
|
|
||||||
t('componentContextMenu:status.delete.alert.title'),
|
|
||||||
t('componentContextMenu:status.delete.alert.message'),
|
|
||||||
[
|
|
||||||
{
|
|
||||||
text: t('common:buttons.confirm'),
|
|
||||||
style: 'destructive',
|
|
||||||
onPress: async () => {
|
|
||||||
mutation.mutate({
|
|
||||||
type: 'deleteItem',
|
type: 'deleteItem',
|
||||||
source: 'statuses',
|
source: 'statuses',
|
||||||
queryKey,
|
queryKey,
|
||||||
rootQueryKey,
|
|
||||||
id: status.id
|
id: status.id
|
||||||
})
|
})
|
||||||
}
|
.then(res => {
|
||||||
},
|
navigation.navigate('Screen-Compose', {
|
||||||
{
|
type: 'deleteEdit',
|
||||||
text: t('common:buttons.cancel'),
|
incomingStatus: res.body as Mastodon.Status,
|
||||||
style: 'default'
|
...(replyToStatus && { replyToStatus }),
|
||||||
|
queryKey
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
]
|
},
|
||||||
),
|
{
|
||||||
disabled: false,
|
text: t('common:buttons.cancel')
|
||||||
destructive: true,
|
|
||||||
hidden: false
|
|
||||||
},
|
|
||||||
title: t('componentContextMenu:status.delete.action'),
|
|
||||||
icon: 'trash'
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
menus.push([
|
|
||||||
{
|
|
||||||
key: 'status-mute',
|
|
||||||
item: {
|
|
||||||
onSelect: () =>
|
|
||||||
mutation.mutate({
|
|
||||||
type: 'updateStatusProperty',
|
|
||||||
queryKey,
|
|
||||||
rootQueryKey,
|
|
||||||
id: status.id,
|
|
||||||
payload: {
|
|
||||||
property: 'muted',
|
|
||||||
currentValue: status.muted,
|
|
||||||
propertyCount: undefined,
|
|
||||||
countValue: undefined
|
|
||||||
}
|
}
|
||||||
}),
|
]
|
||||||
disabled: false,
|
),
|
||||||
destructive: false,
|
disabled: false,
|
||||||
hidden: false
|
destructive: true,
|
||||||
},
|
hidden: !ownAccount
|
||||||
title: t('componentContextMenu:status.mute.action', {
|
|
||||||
defaultValue: 'false',
|
|
||||||
context: (status.muted || false).toString()
|
|
||||||
}),
|
|
||||||
icon: status.muted ? 'speaker' : 'speaker.slash'
|
|
||||||
},
|
},
|
||||||
{
|
title: t('componentContextMenu:status.deleteEdit.action'),
|
||||||
key: 'status-pin',
|
icon: 'pencil.and.outline'
|
||||||
item: {
|
},
|
||||||
onSelect: () =>
|
{
|
||||||
// Also note that reblogs cannot be pinned.
|
key: 'status-delete',
|
||||||
mutation.mutate({
|
item: {
|
||||||
type: 'updateStatusProperty',
|
onSelect: () =>
|
||||||
queryKey,
|
Alert.alert(
|
||||||
rootQueryKey,
|
t('componentContextMenu:status.delete.alert.title'),
|
||||||
id: status.id,
|
t('componentContextMenu:status.delete.alert.message'),
|
||||||
payload: {
|
[
|
||||||
property: 'pinned',
|
{
|
||||||
currentValue: status.pinned,
|
text: t('common:buttons.confirm'),
|
||||||
propertyCount: undefined,
|
style: 'destructive',
|
||||||
countValue: undefined
|
onPress: async () => {
|
||||||
|
mutation.mutate({
|
||||||
|
type: 'deleteItem',
|
||||||
|
source: 'statuses',
|
||||||
|
queryKey,
|
||||||
|
rootQueryKey,
|
||||||
|
id: status.id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: t('common:buttons.cancel'),
|
||||||
|
style: 'default'
|
||||||
}
|
}
|
||||||
}),
|
]
|
||||||
disabled: false,
|
),
|
||||||
destructive: false,
|
disabled: false,
|
||||||
hidden: status.visibility !== 'public' && status.visibility !== 'unlisted'
|
destructive: true,
|
||||||
},
|
hidden: !ownAccount
|
||||||
title: t('componentContextMenu:status.pin.action', {
|
},
|
||||||
defaultValue: 'false',
|
title: t('componentContextMenu:status.delete.action'),
|
||||||
context: (status.pinned || false).toString()
|
icon: 'trash'
|
||||||
}),
|
}
|
||||||
icon: status.pinned ? 'pin.slash' : 'pin'
|
])
|
||||||
}
|
|
||||||
])
|
menus.push([
|
||||||
}
|
{
|
||||||
|
key: 'status-mute',
|
||||||
|
item: {
|
||||||
|
onSelect: () =>
|
||||||
|
mutation.mutate({
|
||||||
|
type: 'updateStatusProperty',
|
||||||
|
queryKey,
|
||||||
|
rootQueryKey,
|
||||||
|
id: status.id,
|
||||||
|
payload: {
|
||||||
|
property: 'muted',
|
||||||
|
currentValue: status.muted
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
disabled: false,
|
||||||
|
destructive: false,
|
||||||
|
hidden:
|
||||||
|
!ownAccount &&
|
||||||
|
!status.mentions.filter(mention => mention.id === instanceAccount.id).length
|
||||||
|
},
|
||||||
|
title: t('componentContextMenu:status.mute.action', {
|
||||||
|
defaultValue: 'false',
|
||||||
|
context: (status.muted || false).toString()
|
||||||
|
}),
|
||||||
|
icon: status.muted ? 'speaker' : 'speaker.slash'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'status-pin',
|
||||||
|
item: {
|
||||||
|
onSelect: () =>
|
||||||
|
// Also note that reblogs cannot be pinned.
|
||||||
|
mutation.mutate({
|
||||||
|
type: 'updateStatusProperty',
|
||||||
|
queryKey,
|
||||||
|
rootQueryKey,
|
||||||
|
id: status.id,
|
||||||
|
payload: {
|
||||||
|
property: 'pinned',
|
||||||
|
currentValue: status.pinned,
|
||||||
|
propertyCount: undefined,
|
||||||
|
countValue: undefined
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
disabled: false,
|
||||||
|
destructive: false,
|
||||||
|
hidden: !ownAccount || (status.visibility !== 'public' && status.visibility !== 'unlisted')
|
||||||
|
},
|
||||||
|
title: t('componentContextMenu:status.pin.action', {
|
||||||
|
defaultValue: 'false',
|
||||||
|
context: (status.pinned || false).toString()
|
||||||
|
}),
|
||||||
|
icon: status.pinned ? 'pin.slash' : 'pin'
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
return menus
|
return menus
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ const Root: React.FC<NativeStackScreenProps<TabLocalStackParamList, 'Tab-Local-R
|
|||||||
disabled={page.page === 'Following'}
|
disabled={page.page === 'Following'}
|
||||||
>
|
>
|
||||||
<DropdownMenu.ItemTitle children={t('tabs.local.name')} />
|
<DropdownMenu.ItemTitle children={t('tabs.local.name')} />
|
||||||
<DropdownMenu.ItemIcon iosIconName='house' />
|
<DropdownMenu.ItemIcon ios={{ name: 'house' }} />
|
||||||
</DropdownMenu.Item>
|
</DropdownMenu.Item>
|
||||||
<DropdownMenu.CheckboxItem
|
<DropdownMenu.CheckboxItem
|
||||||
key='showBoosts'
|
key='showBoosts'
|
||||||
@ -157,7 +157,7 @@ const Root: React.FC<NativeStackScreenProps<TabLocalStackParamList, 'Tab-Local-R
|
|||||||
].map(menu => (
|
].map(menu => (
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
<DropdownMenu.ItemTitle children={menu.title} />
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
<DropdownMenu.ItemIcon ios={{ name: menu.icon }} />
|
||||||
</DropdownMenu.Item>
|
</DropdownMenu.Item>
|
||||||
))
|
))
|
||||||
: undefined}
|
: undefined}
|
||||||
|
@ -55,24 +55,14 @@ const TabMeList: React.FC<TabMeStackScreenProps<'Tab-Me-List'>> = ({
|
|||||||
</DropdownMenu.Trigger>
|
</DropdownMenu.Trigger>
|
||||||
|
|
||||||
<DropdownMenu.Content>
|
<DropdownMenu.Content>
|
||||||
<DropdownMenu.Group>
|
{[listAccounts, listEdit, listDelete].map((menu, index) => (
|
||||||
<DropdownMenu.Item key={listAccounts.key} onSelect={listAccounts.onSelect}>
|
<DropdownMenu.Group key={index}>
|
||||||
<DropdownMenu.ItemTitle children={listAccounts.title} />
|
<DropdownMenu.Item key={menu.key} onSelect={menu.onSelect}>
|
||||||
<DropdownMenu.ItemIcon iosIconName={listAccounts.icon} />
|
<DropdownMenu.ItemTitle children={menu.title} />
|
||||||
</DropdownMenu.Item>
|
<DropdownMenu.ItemIcon ios={{ name: menu.icon }} />
|
||||||
</DropdownMenu.Group>
|
</DropdownMenu.Item>
|
||||||
|
</DropdownMenu.Group>
|
||||||
<DropdownMenu.Group>
|
))}
|
||||||
<DropdownMenu.Item key={listEdit.key} onSelect={listEdit.onSelect}>
|
|
||||||
<DropdownMenu.ItemTitle children={listEdit.title} />
|
|
||||||
<DropdownMenu.ItemIcon iosIconName={listEdit.icon} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
|
|
||||||
<DropdownMenu.Item key={listDelete.key} destructive onSelect={listDelete.onSelect}>
|
|
||||||
<DropdownMenu.ItemTitle children={listDelete.title} />
|
|
||||||
<DropdownMenu.ItemIcon iosIconName={listDelete.icon} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
</DropdownMenu.Content>
|
</DropdownMenu.Content>
|
||||||
</DropdownMenu.Root>
|
</DropdownMenu.Root>
|
||||||
)
|
)
|
||||||
|
@ -55,26 +55,19 @@ const TabSharedAccount: React.FC<TabSharedStackScreenProps<'Tab-Shared-Account'>
|
|||||||
</DropdownMenu.Trigger>
|
</DropdownMenu.Trigger>
|
||||||
|
|
||||||
<DropdownMenu.Content>
|
<DropdownMenu.Content>
|
||||||
{mShare.map((mGroup, index) => (
|
{[mShare, mAccount].map(type => (
|
||||||
<DropdownMenu.Group key={index}>
|
<>
|
||||||
{mGroup.map(menu => (
|
{type.map((mGroup, index) => (
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
<DropdownMenu.Group key={index}>
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
{mGroup.map(menu => (
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
||||||
</DropdownMenu.Item>
|
<DropdownMenu.ItemTitle children={menu.title} />
|
||||||
|
<DropdownMenu.ItemIcon ios={{ name: menu.icon }} />
|
||||||
|
</DropdownMenu.Item>
|
||||||
|
))}
|
||||||
|
</DropdownMenu.Group>
|
||||||
))}
|
))}
|
||||||
</DropdownMenu.Group>
|
</>
|
||||||
))}
|
|
||||||
|
|
||||||
{mAccount.map((mGroup, index) => (
|
|
||||||
<DropdownMenu.Group key={index}>
|
|
||||||
{mGroup.map(menu => (
|
|
||||||
<DropdownMenu.Item key={menu.key} {...menu.item}>
|
|
||||||
<DropdownMenu.ItemTitle children={menu.title} />
|
|
||||||
<DropdownMenu.ItemIcon iosIconName={menu.icon} />
|
|
||||||
</DropdownMenu.Item>
|
|
||||||
))}
|
|
||||||
</DropdownMenu.Group>
|
|
||||||
))}
|
))}
|
||||||
</DropdownMenu.Content>
|
</DropdownMenu.Content>
|
||||||
</DropdownMenu.Root>
|
</DropdownMenu.Root>
|
||||||
|
@ -273,8 +273,8 @@ export type MutationVarsTimelineUpdateStatusProperty = {
|
|||||||
| {
|
| {
|
||||||
property: 'bookmarked' | 'muted' | 'pinned'
|
property: 'bookmarked' | 'muted' | 'pinned'
|
||||||
currentValue: boolean
|
currentValue: boolean
|
||||||
propertyCount: undefined
|
propertyCount?: undefined
|
||||||
countValue: undefined
|
countValue?: undefined
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
property: 'favourited'
|
property: 'favourited'
|
||||||
|
Reference in New Issue
Block a user