mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at offline-indicator 163 lines 3.7 kB view raw
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}