patrickulrich.com/src/hooks/useCurrentUser.ts
2025-04-17 11:23:46 -05:00

49 lines
1.3 KiB
TypeScript

import { type NLoginType, NUser, useNostrLogin } from '@nostrify/react/login';
import { useNostr } from '@nostrify/react';
import { useCallback, useMemo } from 'react';
import { useAuthor } from './useAuthor.ts';
export function useCurrentUser() {
const { nostr } = useNostr();
const { logins } = useNostrLogin();
const loginToUser = useCallback((login: NLoginType): NUser => {
switch (login.type) {
case 'nsec':
return NUser.fromNsecLogin(login);
case 'bunker':
return NUser.fromBunkerLogin(login, nostr);
case 'extension':
return NUser.fromExtensionLogin(login);
default:
// Learn how to define other login types: https://nostrify.dev/react/logins#custom-login-types
throw new Error(`Unsupported login type: ${login.type}`);
}
}, [nostr]);
const users = useMemo(() => {
const users: NUser[] = [];
for (const login of logins) {
try {
const user = loginToUser(login);
users.push(user);
} catch (error) {
console.warn('Skipped invalid login', login.id, error);
}
}
return users;
}, [logins, loginToUser]);
const user = users[0] as NUser | undefined;
const data = useAuthor(user?.pubkey);
return {
user,
data,
users,
};
}