Browse Source

feat: improve style of save relay button

imwald
codytseng 1 year ago
parent
commit
35b0350728
  1. 8
      src/components/OthersRelayList/index.tsx
  2. 9
      src/components/RelaySetsSetting/TemporaryRelaySet.tsx
  3. 22
      src/components/SaveRelayDropdownMenu/index.tsx
  4. 10
      src/pages/primary/NoteListPage/index.tsx
  5. 8
      src/pages/secondary/RelayPage/index.tsx

8
src/components/OthersRelayList/index.tsx

@ -1,12 +1,10 @@ @@ -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 }) { @@ -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>
)

9
src/components/RelaySetsSetting/TemporaryRelaySet.tsx

@ -1,8 +1,7 @@ @@ -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() { @@ -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>
)
}

22
src/components/SaveRelayDropdownMenu/index.tsx

@ -1,3 +1,4 @@ @@ -1,3 +1,4 @@
import { Button } from '@/components/ui/button'
import {
DropdownMenu,
DropdownMenuContent,
@ -9,25 +10,32 @@ import { @@ -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 />

10
src/pages/primary/NoteListPage/index.tsx

@ -1,13 +1,11 @@ @@ -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? @@ -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>

8
src/pages/secondary/RelayPage/index.tsx

@ -4,7 +4,7 @@ import SaveRelayDropdownMenu from '@/components/SaveRelayDropdownMenu' @@ -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 }) { @@ -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 />
</>
)
}

Loading…
Cancel
Save