refactor: Simplify Nostr connection management and enhance store integration
- Refactor useNostr composable to utilize a centralized Pinia store for connection state and client management. - Update NostrFeed and App components to leverage the new store-based approach for relay configuration and client instantiation. - Remove direct relay URL handling from components, improving maintainability and consistency across the application.
This commit is contained in:
parent
0324cf8ec5
commit
236a8a59b9
5 changed files with 85 additions and 38 deletions
|
|
@ -1,38 +1,24 @@
|
|||
import { ref } from 'vue'
|
||||
import { NostrClient, type NostrClientConfig } from '@/lib/nostr/client'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useNostrStore } from '@/stores/nostr'
|
||||
import type { NostrClientConfig } from '@/lib/nostr/client'
|
||||
|
||||
export function useNostr(config: NostrClientConfig) {
|
||||
const client = new NostrClient(config)
|
||||
const isConnected = ref(false)
|
||||
const isConnecting = ref(false)
|
||||
const error = ref<Error | null>(null)
|
||||
|
||||
async function connect() {
|
||||
try {
|
||||
error.value = null
|
||||
isConnecting.value = true
|
||||
await client.connect()
|
||||
isConnected.value = client.isConnected
|
||||
} catch (err) {
|
||||
error.value = err instanceof Error ? err : new Error('Failed to connect')
|
||||
isConnected.value = false
|
||||
} finally {
|
||||
isConnecting.value = false
|
||||
}
|
||||
export function useNostr(config?: NostrClientConfig) {
|
||||
const store = useNostrStore()
|
||||
|
||||
// If custom relays are provided, update the store
|
||||
if (config?.relays) {
|
||||
store.setRelayUrls(config.relays)
|
||||
}
|
||||
|
||||
function disconnect() {
|
||||
client.disconnect()
|
||||
isConnected.value = false
|
||||
isConnecting.value = false
|
||||
error.value = null
|
||||
}
|
||||
// Return reactive refs from the store
|
||||
const { isConnected, isConnecting, error } = storeToRefs(store)
|
||||
|
||||
return {
|
||||
isConnected,
|
||||
isConnecting,
|
||||
error,
|
||||
connect,
|
||||
disconnect
|
||||
connect: store.connect,
|
||||
disconnect: store.disconnect,
|
||||
getClient: store.getClient
|
||||
}
|
||||
}
|
||||
|
|
@ -4,8 +4,11 @@ import { createTextNote, createReaction, createProfileMetadata } from '@/lib/nos
|
|||
import { identity } from '@/composables/useIdentity'
|
||||
import { toast } from 'vue-sonner'
|
||||
|
||||
export function useSocial(relayUrls: string[]) {
|
||||
const client = new NostrClient({ relays: relayUrls })
|
||||
import { useNostr } from './useNostr'
|
||||
|
||||
export function useSocial(relayUrls?: string[]) {
|
||||
const { getClient } = useNostr(relayUrls ? { relays: relayUrls } : undefined)
|
||||
const client = getClient()
|
||||
const isPublishing = ref(false)
|
||||
const profiles = ref(new Map<string, any>())
|
||||
|
||||
|
|
@ -152,5 +155,4 @@ export function useSocial(relayUrls: string[]) {
|
|||
}
|
||||
|
||||
// Export singleton instance for global use
|
||||
import { config } from '@/lib/config'
|
||||
export const social = useSocial(config.nostr.relays)
|
||||
export const social = useSocial()
|
||||
Loading…
Add table
Add a link
Reference in a new issue