mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import React from 'react'
2import {StyleProp, View, ViewStyle} from 'react-native'
3import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
4import {toShareUrl} from 'lib/strings/url-helpers'
5import {useStores} from 'state/index'
6import {useTheme} from 'lib/ThemeContext'
7import {shareUrl} from 'lib/sharing'
8import {
9 NativeDropdown,
10 DropdownItem as NativeDropdownItem,
11} from './NativeDropdown'
12import {EventStopper} from '../EventStopper'
13
14export function PostDropdownBtn({
15 testID,
16 itemUri,
17 itemCid,
18 itemHref,
19 isAuthor,
20 isThreadMuted,
21 onCopyPostText,
22 onOpenTranslate,
23 onToggleThreadMute,
24 onDeletePost,
25 style,
26}: {
27 testID: string
28 itemUri: string
29 itemCid: string
30 itemHref: string
31 itemTitle: string
32 isAuthor: boolean
33 isThreadMuted: boolean
34 onCopyPostText: () => void
35 onOpenTranslate: () => void
36 onToggleThreadMute: () => void
37 onDeletePost: () => void
38 style?: StyleProp<ViewStyle>
39}) {
40 const store = useStores()
41 const theme = useTheme()
42 const defaultCtrlColor = theme.palette.default.postCtrl
43
44 const dropdownItems: NativeDropdownItem[] = [
45 {
46 label: 'Translate',
47 onPress() {
48 onOpenTranslate()
49 },
50 testID: 'postDropdownTranslateBtn',
51 icon: {
52 ios: {
53 name: 'character.book.closed',
54 },
55 android: 'ic_menu_sort_alphabetically',
56 web: 'language',
57 },
58 },
59 {
60 label: 'Copy post text',
61 onPress() {
62 onCopyPostText()
63 },
64 testID: 'postDropdownCopyTextBtn',
65 icon: {
66 ios: {
67 name: 'doc.on.doc',
68 },
69 android: 'ic_menu_edit',
70 web: ['far', 'paste'],
71 },
72 },
73 {
74 label: 'Share',
75 onPress() {
76 const url = toShareUrl(itemHref)
77 shareUrl(url)
78 },
79 testID: 'postDropdownShareBtn',
80 icon: {
81 ios: {
82 name: 'square.and.arrow.up',
83 },
84 android: 'ic_menu_share',
85 web: 'share',
86 },
87 },
88 {
89 label: 'separator',
90 },
91 {
92 label: isThreadMuted ? 'Unmute thread' : 'Mute thread',
93 onPress() {
94 onToggleThreadMute()
95 },
96 testID: 'postDropdownMuteThreadBtn',
97 icon: {
98 ios: {
99 name: 'speaker.slash',
100 },
101 android: 'ic_lock_silent_mode',
102 web: 'comment-slash',
103 },
104 },
105 {
106 label: 'separator',
107 },
108 {
109 label: 'Report post',
110 onPress() {
111 store.shell.openModal({
112 name: 'report',
113 uri: itemUri,
114 cid: itemCid,
115 })
116 },
117 testID: 'postDropdownReportBtn',
118 icon: {
119 ios: {
120 name: 'exclamationmark.triangle',
121 },
122 android: 'ic_menu_report_image',
123 web: 'circle-exclamation',
124 },
125 },
126 isAuthor && {
127 label: 'separator',
128 },
129 isAuthor && {
130 label: 'Delete post',
131 onPress() {
132 store.shell.openModal({
133 name: 'confirm',
134 title: 'Delete this post?',
135 message: 'Are you sure? This can not be undone.',
136 onPressConfirm: onDeletePost,
137 })
138 },
139 testID: 'postDropdownDeleteBtn',
140 icon: {
141 ios: {
142 name: 'trash',
143 },
144 android: 'ic_menu_delete',
145 web: ['far', 'trash-can'],
146 },
147 },
148 ].filter(Boolean) as NativeDropdownItem[]
149
150 return (
151 <EventStopper>
152 <NativeDropdown
153 testID={testID}
154 items={dropdownItems}
155 accessibilityLabel="More post options"
156 accessibilityHint="">
157 <View style={style}>
158 <FontAwesomeIcon icon="ellipsis" size={20} color={defaultCtrlColor} />
159 </View>
160 </NativeDropdown>
161 </EventStopper>
162 )
163}