import React, {useCallback} from 'react' import { StyleProp, StyleSheet, TouchableOpacity, View, ViewStyle, } from 'react-native' import {Text} from '../text/Text' import {PostDropdownBtn} from '../forms/PostDropdownBtn' import {HeartIcon, HeartIconSolid, CommentBottomArrow} from 'lib/icons' import {s, colors} from 'lib/styles' import {pluralize} from 'lib/strings/helpers' import {useTheme} from 'lib/ThemeContext' import {useStores} from 'state/index' import {RepostButton} from './RepostButton' import {Haptics} from 'lib/haptics' import {HITSLOP_10, HITSLOP_20} from 'lib/constants' interface PostCtrlsOpts { itemUri: string itemCid: string itemHref: string itemTitle: string isAuthor: boolean author: { did: string handle: string displayName?: string | undefined avatar?: string | undefined } text: string indexedAt: string big?: boolean style?: StyleProp replyCount?: number repostCount?: number likeCount?: number isReposted: boolean isLiked: boolean isThreadMuted: boolean onPressReply: () => void onPressToggleRepost: () => Promise onPressToggleLike: () => Promise onCopyPostText: () => void onOpenTranslate: () => void onToggleThreadMute: () => void onDeletePost: () => void } export function PostCtrls(opts: PostCtrlsOpts) { const store = useStores() const theme = useTheme() const defaultCtrlColor = React.useMemo( () => ({ color: theme.palette.default.postCtrl, }), [theme], ) as StyleProp const onRepost = useCallback(() => { store.shell.closeModal() if (!opts.isReposted) { Haptics.default() opts.onPressToggleRepost().catch(_e => undefined) } else { opts.onPressToggleRepost().catch(_e => undefined) } }, [opts, store.shell]) const onQuote = useCallback(() => { store.shell.closeModal() store.shell.openComposer({ quote: { uri: opts.itemUri, cid: opts.itemCid, text: opts.text, author: opts.author, indexedAt: opts.indexedAt, }, }) Haptics.default() }, [ opts.author, opts.indexedAt, opts.itemCid, opts.itemUri, opts.text, store.shell, ]) const onPressToggleLikeWrapper = async () => { if (!opts.isLiked) { Haptics.default() await opts.onPressToggleLike().catch(_e => undefined) } else { await opts.onPressToggleLike().catch(_e => undefined) } } return ( {typeof opts.replyCount !== 'undefined' ? ( {opts.replyCount} ) : undefined} {opts.isLiked ? ( ) : ( )} {typeof opts.likeCount !== 'undefined' ? ( {opts.likeCount} ) : undefined} {opts.big ? undefined : ( )} {/* used for adding pad to the right side */} ) } const styles = StyleSheet.create({ ctrls: { flexDirection: 'row', justifyContent: 'space-between', }, ctrl: { flexDirection: 'row', alignItems: 'center', }, ctrlPad: { paddingTop: 5, paddingBottom: 5, paddingLeft: 5, paddingRight: 5, }, ctrlIconLiked: { color: colors.like, }, mt1: { marginTop: 1, }, })