@@ -2,6 +2,11 @@ import clsx from 'clsx'
2
2
import type { EnrichedTweet } from '../utils.js'
3
3
import type { TwitterComponents } from './types.js'
4
4
import { AvatarImg } from './avatar-img.js'
5
+ import {
6
+ Verified ,
7
+ VerifiedGovernment ,
8
+ VerifiedBusiness ,
9
+ } from './icons/index.js'
5
10
import s from './tweet-header.module.css'
6
11
7
12
type Props = {
@@ -11,6 +16,26 @@ type Props = {
11
16
12
17
export const TweetHeader = ( { tweet, components } : Props ) => {
13
18
const Img = components ?. AvatarImg ?? AvatarImg
19
+ const { user } = tweet
20
+ const verified = user . verified || user . is_blue_verified || user . verified_type
21
+ let icon = < Verified />
22
+ let iconClassName : string | null = s . verifiedBlue
23
+
24
+ if ( verified ) {
25
+ if ( ! user . is_blue_verified ) {
26
+ iconClassName = s . verifiedOld
27
+ }
28
+ switch ( user . verified_type ) {
29
+ case 'Government' :
30
+ icon = < VerifiedGovernment />
31
+ iconClassName = s . verifiedGovernment
32
+ break
33
+ case 'Business' :
34
+ icon = < VerifiedBusiness />
35
+ iconClassName = null
36
+ break
37
+ }
38
+ }
14
39
15
40
return (
16
41
< div className = { s . header } >
@@ -20,10 +45,15 @@ export const TweetHeader = ({ tweet, components }: Props) => {
20
45
target = "_blank"
21
46
rel = "noopener noreferrer"
22
47
>
23
- < div className = { s . avatarOverflow } >
48
+ < div
49
+ className = { clsx (
50
+ s . avatarOverflow ,
51
+ user . profile_image_shape === 'Square' && s . avatarSquare
52
+ ) }
53
+ >
24
54
< Img
25
- src = { tweet . user . profile_image_url_https }
26
- alt = { tweet . user . name }
55
+ src = { user . profile_image_url_https }
56
+ alt = { user . name }
27
57
width = { 48 }
28
58
height = { 48 }
29
59
/>
@@ -40,28 +70,11 @@ export const TweetHeader = ({ tweet, components }: Props) => {
40
70
rel = "noopener noreferrer"
41
71
>
42
72
< div className = { s . authorLinkText } >
43
- < span title = { tweet . user . name } > { tweet . user . name } </ span >
73
+ < span title = { user . name } > { user . name } </ span >
44
74
</ div >
45
- { tweet . user . verified ||
46
- ( tweet . user . is_blue_verified && (
47
- < div
48
- className = { clsx (
49
- s . authorVerified ,
50
- tweet . user . is_blue_verified ? s . verifiedBlue : s . verifiedOld
51
- ) }
52
- >
53
- < svg
54
- viewBox = "0 0 24 24"
55
- aria-label = "Verified account"
56
- role = "img"
57
- className = { s . authorVerifiedIcon }
58
- >
59
- < g >
60
- < path d = "M22.25 12c0-1.43-.88-2.67-2.19-3.34.46-1.39.2-2.9-.81-3.91s-2.52-1.27-3.91-.81c-.66-1.31-1.91-2.19-3.34-2.19s-2.67.88-3.33 2.19c-1.4-.46-2.91-.2-3.92.81s-1.26 2.52-.8 3.91c-1.31.67-2.2 1.91-2.2 3.34s.89 2.67 2.2 3.34c-.46 1.39-.21 2.9.8 3.91s2.52 1.26 3.91.81c.67 1.31 1.91 2.19 3.34 2.19s2.68-.88 3.34-2.19c1.39.45 2.9.2 3.91-.81s1.27-2.52.81-3.91c1.31-.67 2.19-1.91 2.19-3.34zm-11.71 4.2L6.8 12.46l1.41-1.42 2.26 2.26 4.8-5.23 1.47 1.36-6.2 6.77z" > </ path >
61
- </ g >
62
- </ svg >
63
- </ div >
64
- ) ) }
75
+ { verified && (
76
+ < div className = { clsx ( s . authorVerified , iconClassName ) } > { icon } </ div >
77
+ ) }
65
78
</ a >
66
79
< div className = { s . authorMeta } >
67
80
< a
@@ -70,14 +83,12 @@ export const TweetHeader = ({ tweet, components }: Props) => {
70
83
target = "_blank"
71
84
rel = "noopener noreferrer"
72
85
>
73
- < span title = { `@${ tweet . user . screen_name } ` } >
74
- @{ tweet . user . screen_name }
75
- </ span >
86
+ < span title = { `@${ user . screen_name } ` } > @{ user . screen_name } </ span >
76
87
</ a >
77
88
< div className = { s . authorFollow } >
78
89
< span className = { s . separator } > ·</ span >
79
90
< a
80
- href = { tweet . user . follow_url }
91
+ href = { user . follow_url }
81
92
className = { s . follow }
82
93
target = "_blank"
83
94
rel = "noopener noreferrer"
0 commit comments