Hide badges in edit profile, drop 'Add to sidebar' from profile menu

Edit profile (ProfileSettings) renders an interactive ProfileCard for
the avatar/banner/bio editor. The card was showing the user's NIP-58
badge showcase grid, which doesn't belong on the edit form. Add a
showBadges prop to ProfileCard (default true to preserve all other
consumers — NoteCard, PostDetailPage, MusicArtistsTab, MusicDiscoverTab)
and pass showBadges={false} from ProfileSettings.

Profile 3-dots menu: drop the 'Add to sidebar / Remove from sidebar'
row. Sidebar pinning is a feed-management feature that doesn't belong
on a profile-action menu — add-to-list already covers the
list-management use case. Cleans out the supporting machinery
(addToSidebar / removeFromSidebar / orderedItems / sidebarId /
isInSidebar / handleToggleSidebar) and the now-unused Trash2 and
PanelLeft lucide icons.
This commit is contained in:
mkfain
2026-05-22 00:11:36 -05:00
parent ea3a1ff5bd
commit fd3446a2f5
3 changed files with 6 additions and 21 deletions
+4 -1
View File
@@ -95,6 +95,8 @@ export interface ProfileCardProps {
onRemoveAvatar?: () => void;
/** Show NIP-05 row (default true) */
showNip05?: boolean;
/** Show NIP-58 badge showcase row (default true). */
showBadges?: boolean;
/** When provided, render an editable profile fields section below bio */
extraFields?: ProfileField[];
onExtraFieldsChange?: (fields: ProfileField[]) => void;
@@ -107,6 +109,7 @@ export function ProfileCard({
onPickImage,
onRemoveAvatar,
showNip05 = true,
showBadges = true,
extraFields,
onExtraFieldsChange,
}: ProfileCardProps) {
@@ -332,7 +335,7 @@ export function ProfileCard({
</div>
{/* Badge showcase */}
{(badgeRefs.length > 0 || badgesLoading) && (
{showBadges && (badgeRefs.length > 0 || badgesLoading) && (
<div className="px-4 pb-3">
<BadgeShowcaseGrid
items={badgeRefs.map((ref) => ({
+1 -20
View File
@@ -6,7 +6,7 @@ import { useNostr } from '@nostrify/react';
import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query';
import { useSeoMeta } from '@unhead/react';
import { nip19 } from 'nostr-tools';
import { Zap, ClipboardCopy, ExternalLink, VolumeX, Flag, Bitcoin, X, QrCode, Check, Copy, Loader2, Download, Trash2, RotateCcw, Mail, ListPlus, Award, PanelLeft } from 'lucide-react';
import { Zap, ClipboardCopy, ExternalLink, VolumeX, Flag, Bitcoin, X, QrCode, Check, Copy, Loader2, Download, RotateCcw, Mail, ListPlus, Award } from 'lucide-react';
import { Avatar, AvatarImage, AvatarFallback } from '@/components/ui/avatar';
import { Button } from '@/components/ui/button';
@@ -104,9 +104,6 @@ function ProfileMoreMenu({ pubkey, displayName, open, onOpenChange, isOwnProfile
const npubEncoded = useMemo(() => nip19.npubEncode(pubkey), [pubkey]);
const { addMute, removeMute, isMuted } = useMuteList();
const userMuted = isMuted('pubkey', pubkey);
const { addToSidebar, removeFromSidebar, orderedItems } = useFeedSettings();
const sidebarId = `nostr:${npubEncoded}`;
const isInSidebar = orderedItems.includes(sidebarId);
const [reportOpen, setReportOpen] = useState(false);
const [addToListOpen, setAddToListOpen] = useState(false);
const [recoveryOpen, setRecoveryOpen] = useState(false);
@@ -153,17 +150,6 @@ function ProfileMoreMenu({ pubkey, displayName, open, onOpenChange, isOwnProfile
const handleReport = () => openAfterClose(setReportOpen);
const handleAddToList = () => openAfterClose(setAddToListOpen);
const handleToggleSidebar = () => {
if (isInSidebar) {
removeFromSidebar(sidebarId);
toast({ title: 'Removed from sidebar' });
} else {
addToSidebar(sidebarId);
toast({ title: 'Added to sidebar' });
}
close();
};
const handleRecovery = () => openAfterClose(setRecoveryOpen);
const handleGiveBadge = () => openAfterClose(setGiveBadgeOpen);
const handleWriteLetter = () => {
@@ -197,11 +183,6 @@ function ProfileMoreMenu({ pubkey, displayName, open, onOpenChange, isOwnProfile
label="Add to list"
onClick={handleAddToList}
/>
<MenuRow
icon={isInSidebar ? <Trash2 className="size-5" /> : <PanelLeft className="size-5" />}
label={isInSidebar ? 'Remove from sidebar' : 'Add to sidebar'}
onClick={handleToggleSidebar}
/>
</div>
{isOwnProfile && (
+1
View File
@@ -714,6 +714,7 @@ export function ProfileSettings() {
onChange={handleCardChange}
onPickImage={handlePickImage}
onRemoveAvatar={() => form.setValue('picture', '', { shouldDirty: true })}
showBadges={false}
/>
{isUploading && (