diff --git a/src/components/CampaignCard.tsx b/src/components/CampaignCard.tsx index 0a46419e..2dc8549f 100644 --- a/src/components/CampaignCard.tsx +++ b/src/components/CampaignCard.tsx @@ -1,14 +1,15 @@ import { useMemo } from 'react'; import type { ReactNode } from 'react'; +import { useTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; import { CalendarClock, EyeOff, HandHeart, MapPin, ShieldCheck } from 'lucide-react'; +import { AuthorByline } from '@/components/AuthorByline'; import { Badge } from '@/components/ui/badge'; import { Card } from '@/components/ui/card'; import { Progress } from '@/components/ui/progress'; import { Skeleton } from '@/components/ui/skeleton'; import { CampaignModerationMenu } from '@/components/CampaignModerationMenu'; -import { useAuthor } from '@/hooks/useAuthor'; import { useBtcPrice } from '@/hooks/useBtcPrice'; import { useCampaignDonations } from '@/hooks/useCampaignDonations'; import { useCampaignModeration } from '@/hooks/useCampaignModeration'; @@ -20,7 +21,6 @@ import { parseCampaign, } from '@/lib/campaign'; import { formatCampaignAmount, formatUsdGoal, satsToUsd } from '@/lib/formatCampaignAmount'; -import { genUserName } from '@/lib/genUserName'; import { sanitizeUrl } from '@/lib/sanitizeUrl'; import { cn } from '@/lib/utils'; @@ -142,22 +142,18 @@ interface CampaignCardProps { * `` to the campaign's naddr-based detail route. */ export function CampaignCard({ campaign, variant = 'compact', className, footerBadge }: CampaignCardProps) { + const { t } = useTranslation(); const { translatedEvent, translateAction } = useEventTranslation(campaign.event, { iconOnly: true, buttonClassName: 'size-8 rounded-full p-0 text-muted-foreground hover:text-primary hover:bg-primary/10', }); const displayCampaign = parseCampaign(translatedEvent) ?? campaign; - const author = useAuthor(campaign.pubkey); const { data: stats } = useCampaignDonations(campaign); const { data: btcPrice } = useBtcPrice(); const { data: moderation } = useCampaignModeration(); const naddr = useMemo(() => encodeCampaignNaddr(campaign), [campaign]); const cover = sanitizeUrl(displayCampaign.banner); - const creatorName = - author.data?.metadata?.display_name || - author.data?.metadata?.name || - genUserName(campaign.pubkey); const deadline = campaign.deadline ? formatDeadline(campaign.deadline) : null; const raisedSats = stats?.totalSats ?? 0; const countryLabel = getCampaignCountryLabel(campaign); @@ -303,11 +299,11 @@ export function CampaignCard({ campaign, variant = 'compact', className, footerB )}
-
- by {creatorName} +
+ {!isSilentPayment && stats && stats.donorCount > 0 && ( - - · {stats.donorCount} {stats.donorCount === 1 ? 'donor' : 'donors'} + + · {t('common.donors', { count: stats.donorCount })} )}
diff --git a/src/components/discovery/CommunityMiniCard.tsx b/src/components/discovery/CommunityMiniCard.tsx index 36480127..f18e1ae9 100644 --- a/src/components/discovery/CommunityMiniCard.tsx +++ b/src/components/discovery/CommunityMiniCard.tsx @@ -2,12 +2,11 @@ import { Link } from 'react-router-dom'; import { Users } from 'lucide-react'; import { nip19 } from 'nostr-tools'; +import { AuthorByline } from '@/components/AuthorByline'; import { CommunityModerationOverlay } from '@/components/CommunityModerationMenu'; import { Card } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; -import { useAuthor } from '@/hooks/useAuthor'; import { useEventTranslation } from '@/hooks/useEventTranslation'; -import { genUserName } from '@/lib/genUserName'; import { sanitizeUrl } from '@/lib/sanitizeUrl'; import { cn } from '@/lib/utils'; import { @@ -55,13 +54,7 @@ export function CommunityMiniCard({ community, className }: CommunityMiniCardPro buttonClassName: 'size-8 rounded-full p-0 text-muted-foreground hover:text-primary hover:bg-primary/10', }); const displayCommunity = parseCommunityEvent(translatedEvent) ?? community; - const founder = useAuthor(community.founderPubkey); const banner = sanitizeUrl(displayCommunity.image); - const founderName = - founder.data?.metadata?.display_name || - founder.data?.metadata?.name || - genUserName(community.founderPubkey); - const founderAvatar = sanitizeUrl(founder.data?.metadata?.picture); const naddr = nip19.naddrEncode({ kind: COMMUNITY_DEFINITION_KIND, @@ -107,21 +100,7 @@ export function CommunityMiniCard({ community, className }: CommunityMiniCardPro

)}
-
- {founderAvatar ? ( - - ) : ( -
- )} - - by {founderName} - -
+ {translateAction}