feat: improve style of save relay button

This commit is contained in:
codytseng
2025-01-18 17:55:50 +08:00
parent a85f636d24
commit 35b0350728
5 changed files with 22 additions and 35 deletions

View File

@@ -1,12 +1,10 @@
import { useSecondaryPage } from '@/PageManager'
import { Badge } from '@/components/ui/badge'
import { Button } from '@/components/ui/button'
import { useFetchRelayInfo, useFetchRelayList } from '@/hooks'
import { toRelay } from '@/lib/link'
import { userIdToPubkey } from '@/lib/pubkey'
import { simplifyUrl } from '@/lib/url'
import { TMailboxRelay } from '@/types'
import { ListPlus } from 'lucide-react'
import { useMemo } from 'react'
import { useTranslation } from 'react-i18next'
import RelayIcon from '../RelayIcon'
@@ -57,11 +55,7 @@ function RelayItem({ relay }: { relay: TMailboxRelay }) {
</div>
</div>
<div className="flex items-center gap-1 shrink-0" onClick={(e) => e.stopPropagation()}>
<SaveRelayDropdownMenu urls={[url]}>
<Button variant="ghost" size="icon">
<ListPlus />
</Button>
</SaveRelayDropdownMenu>
<SaveRelayDropdownMenu urls={[url]} />
</div>
</div>
)

View File

@@ -1,8 +1,7 @@
import { Button } from '@/components/ui/button'
import { useFetchRelayInfos } from '@/hooks'
import { useFeed } from '@/providers/FeedProvider'
import client from '@/services/client.service'
import { ListPlus, SearchCheck } from 'lucide-react'
import { SearchCheck } from 'lucide-react'
import { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import SaveRelayDropdownMenu from '../SaveRelayDropdownMenu'
@@ -64,11 +63,7 @@ export default function TemporaryRelaySet() {
</div>
))}
</div>
<SaveRelayDropdownMenu urls={temporaryRelayUrls} asChild>
<Button title="save" size="icon" variant="ghost">
<ListPlus />
</Button>
</SaveRelayDropdownMenu>
<SaveRelayDropdownMenu urls={temporaryRelayUrls} />
</div>
)
}

View File

@@ -1,3 +1,4 @@
import { Button } from '@/components/ui/button'
import {
DropdownMenu,
DropdownMenuContent,
@@ -9,25 +10,32 @@ import {
import { normalizeUrl } from '@/lib/url'
import { useRelaySets } from '@/providers/RelaySetsProvider'
import { TRelaySet } from '@/types'
import { Check, FolderPlus, Plus } from 'lucide-react'
import { ReactNode, useMemo } from 'react'
import { Check, FolderPlus, Plus, Star } from 'lucide-react'
import { useMemo } from 'react'
import { useTranslation } from 'react-i18next'
export default function SaveRelayDropdownMenu({
children,
urls,
asChild = false
atTitlebar = false
}: {
children: ReactNode
urls: string[]
asChild?: boolean
atTitlebar?: boolean
}) {
const { t } = useTranslation()
const { relaySets } = useRelaySets()
const normalizedUrls = useMemo(() => urls.map((url) => normalizeUrl(url)), [urls])
const alreadySaved = useMemo(
() => relaySets.some((set) => normalizedUrls.every((url) => set.relayUrls.includes(url))),
[relaySets, normalizedUrls]
)
return (
<DropdownMenu>
<DropdownMenuTrigger asChild={asChild}>{children}</DropdownMenuTrigger>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size={atTitlebar ? 'titlebar-icon' : 'icon'}>
<Star className={alreadySaved ? 'fill-primary stroke-primary' : ''} />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuLabel>{t('Save to')} ...</DropdownMenuLabel>
<DropdownMenuSeparator />

View File

@@ -1,13 +1,11 @@
import NoteList from '@/components/NoteList'
import SaveRelayDropdownMenu from '@/components/SaveRelayDropdownMenu'
import PrimaryPageLayout from '@/layouts/PrimaryPageLayout'
import { useFeed } from '@/providers/FeedProvider'
import { useEffect, useRef } from 'react'
import { useTranslation } from 'react-i18next'
import FeedButton from './FeedButton'
import SearchButton from './SearchButton'
import SaveRelayDropdownMenu from '@/components/SaveRelayDropdownMenu'
import { Button } from '@/components/ui/button'
import { ListPlus } from 'lucide-react'
export default function NoteListPage() {
const { t } = useTranslation()
@@ -45,11 +43,7 @@ function NoteListPageTitlebar({ temporaryRelayUrls = [] }: { temporaryRelayUrls?
<div>
<SearchButton />
{temporaryRelayUrls.length > 0 && (
<SaveRelayDropdownMenu urls={temporaryRelayUrls} asChild>
<Button variant="ghost" size="titlebar-icon">
<ListPlus />
</Button>
</SaveRelayDropdownMenu>
<SaveRelayDropdownMenu urls={temporaryRelayUrls} atTitlebar />
)}
</div>
</div>

View File

@@ -4,7 +4,7 @@ import SaveRelayDropdownMenu from '@/components/SaveRelayDropdownMenu'
import { Button } from '@/components/ui/button'
import SecondaryPageLayout from '@/layouts/SecondaryPageLayout'
import { normalizeUrl, simplifyUrl } from '@/lib/url'
import { Check, Copy, ListPlus } from 'lucide-react'
import { Check, Copy } from 'lucide-react'
import { useMemo, useState } from 'react'
import NotFoundPage from '../NotFoundPage'
@@ -42,11 +42,7 @@ function RelayPageControls({ url }: { url: string }) {
<Button variant="ghost" size="titlebar-icon" onClick={handleCopy}>
{copied ? <Check /> : <Copy />}
</Button>
<SaveRelayDropdownMenu urls={[url]} asChild>
<Button variant="ghost" size="titlebar-icon">
<ListPlus />
</Button>
</SaveRelayDropdownMenu>
<SaveRelayDropdownMenu urls={[url]} atTitlebar />
</>
)
}