import React from 'react' import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native' import {AtUri, AppBskyGraphDefs, RichText} from '@atproto/api' import {Link} from '../util/Link' import {Text} from '../util/text/Text' import {RichText as RichTextCom} from '../util/text/RichText' import {UserAvatar} from '../util/UserAvatar' import {s} from 'lib/styles' import {usePalette} from 'lib/hooks/usePalette' import {useSession} from '#/state/session' import {sanitizeDisplayName} from 'lib/strings/display-names' import {sanitizeHandle} from 'lib/strings/handles' import {makeProfileLink} from 'lib/routes/links' export const ListCard = ({ testID, list, noBg, noBorder, renderButton, style, }: { testID?: string list: AppBskyGraphDefs.ListView noBg?: boolean noBorder?: boolean renderButton?: () => JSX.Element style?: StyleProp }) => { const pal = usePalette('default') const {currentAccount} = useSession() const rkey = React.useMemo(() => { try { const urip = new AtUri(list.uri) return urip.rkey } catch { return '' } }, [list]) const descriptionRichText = React.useMemo(() => { if (list.description) { return new RichText({ text: list.description, facets: list.descriptionFacets, }) } return undefined }, [list]) return ( {sanitizeDisplayName(list.name)} {list.purpose === 'app.bsky.graph.defs#curatelist' && 'User list '} {list.purpose === 'app.bsky.graph.defs#modlist' && 'Moderation list '} by{' '} {list.creator.did === currentAccount?.did ? 'you' : sanitizeHandle(list.creator.handle, '@')} {!!list.viewer?.muted && ( Subscribed )} {renderButton ? ( {renderButton()} ) : undefined} {descriptionRichText ? ( ) : undefined} ) } const styles = StyleSheet.create({ outer: { borderTopWidth: 1, paddingHorizontal: 6, }, outerNoBorder: { borderTopWidth: 0, }, layout: { flexDirection: 'row', alignItems: 'center', }, layoutAvi: { width: 54, paddingLeft: 4, paddingTop: 8, paddingBottom: 10, }, avi: { width: 40, height: 40, borderRadius: 20, resizeMode: 'cover', }, layoutContent: { flex: 1, paddingRight: 10, paddingTop: 10, paddingBottom: 10, }, layoutButton: { paddingRight: 10, }, details: { paddingLeft: 54, paddingRight: 10, paddingBottom: 10, }, pill: { borderRadius: 4, paddingHorizontal: 6, paddingVertical: 2, }, btn: { paddingVertical: 7, borderRadius: 50, marginLeft: 6, paddingHorizontal: 14, }, })