feat: favorite relays (#250)

This commit is contained in:
Cody Tseng
2025-04-05 15:31:34 +08:00
committed by GitHub
parent fab9ff88b5
commit c739d9d28c
63 changed files with 1081 additions and 982 deletions

View File

@@ -1,5 +1,5 @@
import MailboxSetting from '@/components/MailboxSetting'
import RelaySetsSetting from '@/components/RelaySetsSetting'
import FavoriteRelaysSetting from '@/components/FavoriteRelaysSetting'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
import SecondaryPageLayout from '@/layouts/SecondaryPageLayout'
import { forwardRef, useEffect, useState } from 'react'
@@ -7,28 +7,28 @@ import { useTranslation } from 'react-i18next'
const RelaySettingsPage = forwardRef(({ index }: { index?: number }, ref) => {
const { t } = useTranslation()
const [tabValue, setTabValue] = useState('relay-sets')
const [tabValue, setTabValue] = useState('favorite-relays')
useEffect(() => {
switch (window.location.hash) {
case '#mailbox':
setTabValue('mailbox')
break
case '#relay-sets':
setTabValue('relay-sets')
case '#favorite-relays':
setTabValue('favorite-relays')
break
}
}, [])
return (
<SecondaryPageLayout ref={ref} index={index} title={t('Relay settings')}>
<Tabs value={tabValue} onValueChange={setTabValue} className="px-4 space-y-4">
<Tabs value={tabValue} onValueChange={setTabValue} className="px-4 pb-4 space-y-4">
<TabsList>
<TabsTrigger value="relay-sets">{t('Relay Sets')}</TabsTrigger>
<TabsTrigger value="favorite-relays">{t('Favorite Relays')}</TabsTrigger>
<TabsTrigger value="mailbox">{t('Read & Write Relays')}</TabsTrigger>
</TabsList>
<TabsContent value="relay-sets">
<RelaySetsSetting />
<TabsContent value="favorite-relays">
<FavoriteRelaysSetting />
</TabsContent>
<TabsContent value="mailbox">
<MailboxSetting />

View File

@@ -73,14 +73,14 @@ const SettingsPage = forwardRef(({ index }: { index?: number }, ref) => {
</SelectContent>
</Select>
</SettingItem>
<SettingItem onClick={() => push(toRelaySettings())}>
<SettingItem className="clickable" onClick={() => push(toRelaySettings())}>
<div className="flex items-center gap-4">
<Server />
<div>{t('Relays')}</div>
</div>
<ChevronRight />
</SettingItem>
<SettingItem onClick={() => push(toWallet())}>
<SettingItem className="clickable" onClick={() => push(toWallet())}>
<div className="flex items-center gap-4">
<Wallet />
<div>{t('Wallet')}</div>
@@ -89,6 +89,7 @@ const SettingsPage = forwardRef(({ index }: { index?: number }, ref) => {
</SettingItem>
{!!nsec && (
<SettingItem
className="clickable"
onClick={() => {
navigator.clipboard.writeText(nsec)
setCopiedNsec(true)
@@ -104,6 +105,7 @@ const SettingsPage = forwardRef(({ index }: { index?: number }, ref) => {
)}
{!!ncryptsec && (
<SettingItem
className="clickable"
onClick={() => {
navigator.clipboard.writeText(ncryptsec)
setCopiedNcryptsec(true)
@@ -118,7 +120,7 @@ const SettingsPage = forwardRef(({ index }: { index?: number }, ref) => {
</SettingItem>
)}
<AboutInfoDialog>
<SettingItem>
<SettingItem className="clickable">
<div className="flex items-center gap-4">
<Info />
<div>{t('About')}</div>
@@ -145,7 +147,7 @@ const SettingItem = forwardRef<HTMLDivElement, HTMLProps<HTMLDivElement>>(
return (
<div
className={cn(
'flex clickable justify-between items-center px-4 py-2 h-[52px] rounded-lg [&_svg]:size-4 [&_svg]:shrink-0',
'flex justify-between select-none items-center px-4 py-2 h-[52px] rounded-lg [&_svg]:size-4 [&_svg]:shrink-0',
className
)}
{...props}