diff --git a/apps/blog/features/layouts/user-profile/profile-layout.tsx b/apps/blog/features/layouts/user-profile/profile-layout.tsx index 6fb3fc56635db20a5ce9e5535881ae692a53b3a1..c06377285713db877f4e507135c97e971037e6a3 100644 --- a/apps/blog/features/layouts/user-profile/profile-layout.tsx +++ b/apps/blog/features/layouts/user-profile/profile-layout.tsx @@ -8,7 +8,7 @@ import { useQuery } from '@tanstack/react-query'; import env from '@beam-australia/react-env'; import { useTranslation } from '@/blog/i18n/client'; -import { Avatar, AvatarFallback, AvatarImage, proxifyImageSrc, getUserAvatarUrl } from '@ui/components'; +import { Avatar, AvatarFallback, AvatarImage, proxifyImageSrc, getUserAvatarUrl, escapeCssUrl, isSafeImageUrl } from '@ui/components'; import { Separator } from '@hive/ui/components/separator'; import TimeAgo from '@ui/components/time-ago'; import { Icons } from '@hive/ui/components/icons'; @@ -29,6 +29,21 @@ import { getTwitterInfo } from '@transaction/lib/custom-api'; import ListItem from './list-item'; import { useUserClient } from '@smart-signer/lib/auth/use-user-client'; +const getCoverImageStyle = (profileData: { posting_json_metadata?: string } | null): string => { + try { + if (!profileData?.posting_json_metadata) return ''; + const metadata = JSON.parse(profileData.posting_json_metadata); + const coverImage = metadata?.profile?.cover_image; + + if (!coverImage || !isSafeImageUrl(coverImage)) return ''; + + const proxifiedUrl = proxifyImageSrc(coverImage, 2048, 512); + return `url('${escapeCssUrl(proxifiedUrl.replace(/ /g, '%20'))}')`; + } catch { + return ''; + } +}; + const ProfileLayout = ({ children }: { children: ReactNode }) => { const { user } = useUserClient(); const { t } = useTranslation('common_blog'); @@ -105,15 +120,7 @@ const ProfileLayout = ({ children }: { children: ReactNode }) => { >
{ + try { + if (!profileData?.posting_json_metadata) return ''; + const metadata = JSON.parse(profileData.posting_json_metadata); + const coverImage = metadata?.profile?.cover_image; + + if (!coverImage || !isSafeImageUrl(coverImage)) return ''; + + const proxifiedUrl = proxifyImageSrc(coverImage, 2048, 512); + return `url('${escapeCssUrl(proxifiedUrl.replace(/ /g, '%20'))}')`; + } catch { + return ''; + } +}; + const ProfileLayout = ({ children }: IProfileLayout) => { const { t } = useTranslation('common_wallet'); const router = useRouter(); @@ -48,15 +64,9 @@ const ProfileLayout = ({ children }: IProfileLayout) => { {profileData ? (