feat: improve style of save relay button
This commit is contained in:
@@ -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>
|
||||
)
|
||||
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user