Skip to content

Commit 3ecb8f4

Browse files
committed
Refactor and show icon in place of missing site logo
Fix handling of unresolved site Use globe icon Enforce single child for tooltip by using ternary
1 parent 500e176 commit 3ecb8f4

File tree

1 file changed

+57
-67
lines changed

1 file changed

+57
-67
lines changed

packages/edit-site/src/components/list/added-by.js

Lines changed: 57 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
commentAuthorAvatar as authorIcon,
1919
layout as themeIcon,
2020
plugins as pluginIcon,
21+
globe as globeIcon,
2122
} from '@wordpress/icons';
2223
import { __ } from '@wordpress/i18n';
2324

@@ -35,25 +36,57 @@ function CustomizedTooltip( { isCustomized, children } ) {
3536
);
3637
}
3738

39+
function BaseAddedBy( { text, icon, imageUrl, isCustomized } ) {
40+
const [ isImageLoaded, setIsImageLoaded ] = useState( false );
41+
42+
return (
43+
<HStack alignment="left">
44+
<CustomizedTooltip isCustomized={ isCustomized }>
45+
{ imageUrl ? (
46+
<div
47+
className={ classnames(
48+
'edit-site-list-added-by__avatar',
49+
{
50+
'is-loaded': isImageLoaded,
51+
}
52+
) }
53+
>
54+
<img
55+
onLoad={ () => setIsImageLoaded( true ) }
56+
alt=""
57+
src={ imageUrl }
58+
/>
59+
</div>
60+
) : (
61+
<div
62+
className={ classnames(
63+
'edit-site-list-added-by__icon',
64+
{
65+
'is-customized': isCustomized,
66+
}
67+
) }
68+
>
69+
<Icon icon={ icon } />
70+
</div>
71+
) }
72+
</CustomizedTooltip>
73+
<span>{ text }</span>
74+
</HStack>
75+
);
76+
}
77+
3878
function AddedByTheme( { slug, isCustomized } ) {
3979
const theme = useSelect(
4080
( select ) => select( coreStore ).getTheme( slug ),
4181
[ slug ]
4282
);
4383

4484
return (
45-
<HStack alignment="left">
46-
<CustomizedTooltip isCustomized={ isCustomized }>
47-
<div
48-
className={ classnames( 'edit-site-list-added-by__icon', {
49-
'is-customized': isCustomized,
50-
} ) }
51-
>
52-
<Icon icon={ themeIcon } />
53-
</div>
54-
</CustomizedTooltip>
55-
<span>{ theme?.name?.rendered || slug }</span>
56-
</HStack>
85+
<BaseAddedBy
86+
icon={ themeIcon }
87+
text={ theme?.name?.rendered || slug }
88+
isCustomized={ isCustomized }
89+
/>
5790
);
5891
}
5992

@@ -64,54 +97,25 @@ function AddedByPlugin( { slug, isCustomized } ) {
6497
);
6598

6699
return (
67-
<HStack alignment="left">
68-
<CustomizedTooltip isCustomized={ isCustomized }>
69-
<div
70-
className={ classnames( 'edit-site-list-added-by__icon', {
71-
'is-customized': isCustomized,
72-
} ) }
73-
>
74-
<Icon icon={ pluginIcon } />
75-
</div>
76-
</CustomizedTooltip>
77-
<span>{ plugin?.name || slug }</span>
78-
</HStack>
100+
<BaseAddedBy
101+
icon={ pluginIcon }
102+
text={ plugin?.name || slug }
103+
isCustomized={ isCustomized }
104+
/>
79105
);
80106
}
81107

82108
function AddedByAuthor( { id } ) {
83109
const user = useSelect( ( select ) => select( coreStore ).getUser( id ), [
84110
id,
85111
] );
86-
const [ isImageLoaded, setIsImageLoaded ] = useState( false );
87-
88-
const avatarURL = user?.avatar_urls?.[ 48 ];
89-
const hasAvatar = !! avatarURL;
90112

91113
return (
92-
<HStack alignment="left">
93-
<div
94-
className={ classnames(
95-
hasAvatar
96-
? 'edit-site-list-added-by__avatar'
97-
: 'edit-site-list-added-by__icon',
98-
{
99-
'is-loaded': isImageLoaded,
100-
}
101-
) }
102-
>
103-
{ hasAvatar ? (
104-
<img
105-
onLoad={ () => setIsImageLoaded( true ) }
106-
alt=""
107-
src={ avatarURL }
108-
/>
109-
) : (
110-
<Icon icon={ authorIcon } />
111-
) }
112-
</div>
113-
<span>{ user?.nickname }</span>
114-
</HStack>
114+
<BaseAddedBy
115+
icon={ authorIcon }
116+
imageUrl={ user?.avatar_urls[ 48 ] }
117+
text={ user?.nickname }
118+
/>
115119
);
116120
}
117121

@@ -121,29 +125,15 @@ function AddedBySite() {
121125
const siteData = getEntityRecord( 'root', '__unstableBase' );
122126

123127
return {
124-
name: siteData.name,
128+
name: siteData?.name,
125129
logoURL: siteData?.site_logo
126130
? getMedia( siteData.site_logo )?.source_url
127131
: undefined,
128132
};
129133
}, [] );
130-
const [ isImageLoaded, setIsImageLoaded ] = useState( false );
131134

132135
return (
133-
<HStack alignment="left">
134-
<div
135-
className={ classnames( 'edit-site-list-added-by__avatar', {
136-
'is-loaded': isImageLoaded,
137-
} ) }
138-
>
139-
<img
140-
onLoad={ () => setIsImageLoaded( true ) }
141-
alt=""
142-
src={ logoURL }
143-
/>
144-
</div>
145-
<span>{ name }</span>
146-
</HStack>
136+
<BaseAddedBy icon={ globeIcon } imageUrl={ logoURL } text={ name } />
147137
);
148138
}
149139

0 commit comments

Comments
 (0)