feat: enable scrolling for overflowing drawer content
This commit is contained in:
@@ -16,7 +16,7 @@ export default function FeedSwitcher({ close }: { close?: () => void }) {
|
|||||||
const { feedInfo, switchFeed } = useFeed()
|
const { feedInfo, switchFeed } = useFeed()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-4">
|
<div className="space-y-2">
|
||||||
{pubkey && (
|
{pubkey && (
|
||||||
<FeedSwitcherItem
|
<FeedSwitcherItem
|
||||||
isActive={feedInfo.feedType === 'following'}
|
isActive={feedInfo.feedType === 'following'}
|
||||||
@@ -53,46 +53,44 @@ export default function FeedSwitcher({ close }: { close?: () => void }) {
|
|||||||
</FeedSwitcherItem>
|
</FeedSwitcherItem>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<div className="space-y-2">
|
<div className="flex justify-end items-center text-sm">
|
||||||
<div className="flex justify-end items-center text-sm">
|
<SecondaryPageLink
|
||||||
<SecondaryPageLink
|
to={toRelaySettings()}
|
||||||
to={toRelaySettings()}
|
className="text-primary font-semibold"
|
||||||
className="text-primary font-semibold"
|
onClick={() => close?.()}
|
||||||
onClick={() => close?.()}
|
>
|
||||||
>
|
{t('edit')}
|
||||||
{t('edit')}
|
</SecondaryPageLink>
|
||||||
</SecondaryPageLink>
|
</div>
|
||||||
</div>
|
{relaySets
|
||||||
{relaySets
|
.filter((set) => set.relayUrls.length > 0)
|
||||||
.filter((set) => set.relayUrls.length > 0)
|
.map((set) => (
|
||||||
.map((set) => (
|
<RelaySetCard
|
||||||
<RelaySetCard
|
key={set.id}
|
||||||
key={set.id}
|
relaySet={set}
|
||||||
relaySet={set}
|
select={feedInfo.feedType === 'relays' && set.id === feedInfo.id}
|
||||||
select={feedInfo.feedType === 'relays' && set.id === feedInfo.id}
|
onSelectChange={(select) => {
|
||||||
onSelectChange={(select) => {
|
if (!select) return
|
||||||
if (!select) return
|
switchFeed('relays', { activeRelaySetId: set.id })
|
||||||
switchFeed('relays', { activeRelaySetId: set.id })
|
|
||||||
close?.()
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
{favoriteRelays.map((relay) => (
|
|
||||||
<FeedSwitcherItem
|
|
||||||
key={relay}
|
|
||||||
isActive={feedInfo.feedType === 'relay' && feedInfo.id === relay}
|
|
||||||
onClick={() => {
|
|
||||||
switchFeed('relay', { relay })
|
|
||||||
close?.()
|
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>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export function MobileMenu({
|
|||||||
{trigger}
|
{trigger}
|
||||||
<Drawer open={isDrawerOpen} onOpenChange={setIsDrawerOpen}>
|
<Drawer open={isDrawerOpen} onOpenChange={setIsDrawerOpen}>
|
||||||
<DrawerOverlay onClick={closeDrawer} />
|
<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' }}>
|
<div className="overflow-y-auto overscroll-contain py-2" style={{ touchAction: 'pan-y' }}>
|
||||||
{!showSubMenu ? (
|
{!showSubMenu ? (
|
||||||
menuActions.map((action, index) => {
|
menuActions.map((action, index) => {
|
||||||
|
|||||||
@@ -218,7 +218,14 @@ export default function PostRelaySelector({
|
|||||||
</div>
|
</div>
|
||||||
<Drawer open={isDrawerOpen} onOpenChange={setIsDrawerOpen}>
|
<Drawer open={isDrawerOpen} onOpenChange={setIsDrawerOpen}>
|
||||||
<DrawerOverlay onClick={() => setIsDrawerOpen(false)} />
|
<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>
|
</Drawer>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ const DrawerContent = React.forwardRef<
|
|||||||
onOpenAutoFocus={(e) => e.preventDefault()}
|
onOpenAutoFocus={(e) => e.preventDefault()}
|
||||||
{...props}
|
{...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}
|
{children}
|
||||||
</DrawerPrimitive.Content>
|
</DrawerPrimitive.Content>
|
||||||
</DrawerPortal>
|
</DrawerPortal>
|
||||||
|
|||||||
@@ -20,7 +20,10 @@ export default function FeedButton({ className }: { className?: string }) {
|
|||||||
<FeedSwitcherTrigger className={className} onClick={() => setOpen(true)} />
|
<FeedSwitcherTrigger className={className} onClick={() => setOpen(true)} />
|
||||||
<Drawer open={open} onOpenChange={setOpen}>
|
<Drawer open={open} onOpenChange={setOpen}>
|
||||||
<DrawerContent className="max-h-[80vh]">
|
<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)} />
|
<FeedSwitcher close={() => setOpen(false)} />
|
||||||
</div>
|
</div>
|
||||||
</DrawerContent>
|
</DrawerContent>
|
||||||
|
|||||||
Reference in New Issue
Block a user