feat: enable scrolling for overflowing drawer content

This commit is contained in:
codytseng
2025-09-24 11:15:35 +08:00
parent b73b3512f3
commit 83c95782bd
5 changed files with 50 additions and 42 deletions

View File

@@ -16,7 +16,7 @@ export default function FeedSwitcher({ close }: { close?: () => void }) {
const { feedInfo, switchFeed } = useFeed()
return (
<div className="space-y-4">
<div className="space-y-2">
{pubkey && (
<FeedSwitcherItem
isActive={feedInfo.feedType === 'following'}
@@ -53,46 +53,44 @@ export default function FeedSwitcher({ close }: { close?: () => void }) {
</FeedSwitcherItem>
)}
<div className="space-y-2">
<div className="flex justify-end items-center text-sm">
<SecondaryPageLink
to={toRelaySettings()}
className="text-primary font-semibold"
onClick={() => close?.()}
>
{t('edit')}
</SecondaryPageLink>
</div>
{relaySets
.filter((set) => set.relayUrls.length > 0)
.map((set) => (
<RelaySetCard
key={set.id}
relaySet={set}
select={feedInfo.feedType === 'relays' && set.id === feedInfo.id}
onSelectChange={(select) => {
if (!select) return
switchFeed('relays', { activeRelaySetId: set.id })
close?.()
}}
/>
))}
{favoriteRelays.map((relay) => (
<FeedSwitcherItem
key={relay}
isActive={feedInfo.feedType === 'relay' && feedInfo.id === relay}
onClick={() => {
switchFeed('relay', { relay })
<div className="flex justify-end items-center text-sm">
<SecondaryPageLink
to={toRelaySettings()}
className="text-primary font-semibold"
onClick={() => close?.()}
>
{t('edit')}
</SecondaryPageLink>
</div>
{relaySets
.filter((set) => set.relayUrls.length > 0)
.map((set) => (
<RelaySetCard
key={set.id}
relaySet={set}
select={feedInfo.feedType === 'relays' && set.id === feedInfo.id}
onSelectChange={(select) => {
if (!select) return
switchFeed('relays', { activeRelaySetId: set.id })
close?.()
}}
>
<div className="flex gap-2 items-center w-full">
<RelayIcon url={relay} />
<div className="flex-1 w-0 truncate">{simplifyUrl(relay)}</div>
</div>
</FeedSwitcherItem>
/>
))}
</div>
{favoriteRelays.map((relay) => (
<FeedSwitcherItem
key={relay}
isActive={feedInfo.feedType === 'relay' && feedInfo.id === relay}
onClick={() => {
switchFeed('relay', { relay })
close?.()
}}
>
<div className="flex gap-2 items-center w-full">
<RelayIcon url={relay} />
<div className="flex-1 w-0 truncate">{simplifyUrl(relay)}</div>
</div>
</FeedSwitcherItem>
))}
</div>
)
}

View File

@@ -31,7 +31,7 @@ export function MobileMenu({
{trigger}
<Drawer open={isDrawerOpen} onOpenChange={setIsDrawerOpen}>
<DrawerOverlay onClick={closeDrawer} />
<DrawerContent hideOverlay className="max-h-screen">
<DrawerContent hideOverlay className="max-h-[80vh]">
<div className="overflow-y-auto overscroll-contain py-2" style={{ touchAction: 'pan-y' }}>
{!showSubMenu ? (
menuActions.map((action, index) => {

View File

@@ -218,7 +218,14 @@ export default function PostRelaySelector({
</div>
<Drawer open={isDrawerOpen} onOpenChange={setIsDrawerOpen}>
<DrawerOverlay onClick={() => setIsDrawerOpen(false)} />
<DrawerContent hideOverlay>{content}</DrawerContent>
<DrawerContent className="max-h-[80vh]" hideOverlay>
<div
className="overflow-y-auto overscroll-contain py-2"
style={{ touchAction: 'pan-y' }}
>
{content}
</div>
</DrawerContent>
</Drawer>
</>
)

View File

@@ -85,7 +85,7 @@ const DrawerContent = React.forwardRef<
onOpenAutoFocus={(e) => e.preventDefault()}
{...props}
>
<div className="mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" />
<div className="mx-auto mt-4 pb-2 mb-2 h-2 w-[100px] rounded-full bg-muted" />
{children}
</DrawerPrimitive.Content>
</DrawerPortal>

View File

@@ -20,7 +20,10 @@ export default function FeedButton({ className }: { className?: string }) {
<FeedSwitcherTrigger className={className} onClick={() => setOpen(true)} />
<Drawer open={open} onOpenChange={setOpen}>
<DrawerContent className="max-h-[80vh]">
<div className="py-4 px-2 overflow-auto">
<div
className="overflow-y-auto overscroll-contain py-2 px-4"
style={{ touchAction: 'pan-y' }}
>
<FeedSwitcher close={() => setOpen(false)} />
</div>
</DrawerContent>