49 lines
1.3 KiB
TypeScript
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,
|
|
};
|
|
}
|