this repo has no description
0
fork

Configure Feed

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

at 23e2f59033cebc3e9a956065a53d8a95cd52df61 82 lines 2.3 kB view raw
1import { Trans } from '@lingui/react/macro'; 2import { useContext } from 'preact/hooks'; 3import { useSnapshot } from 'valtio'; 4 5import FilterContext from '../utils/filter-context'; 6import { isFiltered } from '../utils/filters'; 7import states, { getStatus, statusKey } from '../utils/states'; 8import statusPeek from '../utils/status-peek'; 9import { getCurrentAccID } from '../utils/store-utils'; 10 11import Avatar from './avatar'; 12 13function StatusCompact({ sKey }) { 14 const snapStates = useSnapshot(states); 15 const statusReply = snapStates.statusReply[sKey]; 16 if (!statusReply) return null; 17 18 const { id, instance } = statusReply; 19 const status = getStatus(id, instance); 20 if (!status) return null; 21 22 const { 23 account: { id: accountId }, 24 sensitive, 25 spoilerText, 26 account: { avatar, avatarStatic, bot } = {}, 27 visibility, 28 content, 29 language, 30 filtered, 31 } = status; 32 if (sensitive || spoilerText) return null; 33 if (!content) return null; 34 35 const srKey = statusKey(id, instance); 36 const statusPeekText = statusPeek(status); 37 38 const currentAccount = getCurrentAccID(); 39 const isSelf = currentAccount && currentAccount === accountId; 40 41 const filterContext = useContext(FilterContext); 42 let filterInfo = !isSelf && isFiltered(filtered, filterContext); 43 44 // This is fine. Images are converted to emojis so they are 45 // in a way, already "obscured" 46 if (filterInfo?.action === 'blur') filterInfo = null; 47 48 if (filterInfo?.action === 'hide') return null; 49 50 const filterTitleStr = filterInfo?.titlesStr || ''; 51 52 return ( 53 <article 54 class={`status compact-reply shazam ${ 55 visibility === 'direct' ? 'visibility-direct' : '' 56 }`} 57 tabindex="-1" 58 data-state-post-id={srKey} 59 > 60 <Avatar url={avatarStatic || avatar} squircle={bot} /> 61 <div 62 class="content-compact" 63 title={statusPeekText} 64 lang={language} 65 dir="auto" 66 > 67 {filterInfo ? ( 68 <b class="status-filtered-badge badge-meta" title={filterTitleStr}> 69 <span> 70 <Trans>Filtered</Trans> 71 </span> 72 <span>{filterTitleStr}</span> 73 </b> 74 ) : ( 75 <span>{statusPeekText}</span> 76 )} 77 </div> 78 </article> 79 ); 80} 81 82export default StatusCompact;