blog post and other fixes/additions #124
@ -14,17 +14,11 @@ import {
|
|||||||
useNDKContext,
|
useNDKContext,
|
||||||
useNSFWList
|
useNSFWList
|
||||||
} from 'hooks'
|
} from 'hooks'
|
||||||
import { kinds, nip19, UnsignedEvent } from 'nostr-tools'
|
import { kinds, UnsignedEvent } from 'nostr-tools'
|
||||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
import {
|
import { Link, useLoaderData, useNavigation } from 'react-router-dom'
|
||||||
useParams,
|
|
||||||
Navigate,
|
|
||||||
Link,
|
|
||||||
useLoaderData,
|
|
||||||
useNavigation
|
|
||||||
} from 'react-router-dom'
|
|
||||||
import { toast } from 'react-toastify'
|
import { toast } from 'react-toastify'
|
||||||
import { appRoutes, getProfilePageRoute } from 'routes'
|
import { appRoutes } from 'routes'
|
||||||
import {
|
import {
|
||||||
BlogCardDetails,
|
BlogCardDetails,
|
||||||
FilterOptions,
|
FilterOptions,
|
||||||
@ -38,8 +32,6 @@ import {
|
|||||||
copyTextToClipboard,
|
copyTextToClipboard,
|
||||||
DEFAULT_FILTER_OPTIONS,
|
DEFAULT_FILTER_OPTIONS,
|
||||||
extractBlogCardDetails,
|
extractBlogCardDetails,
|
||||||
log,
|
|
||||||
LogType,
|
|
||||||
now,
|
now,
|
||||||
npubToHex,
|
npubToHex,
|
||||||
scrollIntoView,
|
scrollIntoView,
|
||||||
@ -52,23 +44,11 @@ import { BlogCard } from 'components/BlogCard'
|
|||||||
|
|
||||||
export const ProfilePage = () => {
|
export const ProfilePage = () => {
|
||||||
const {
|
const {
|
||||||
|
profilePubkey,
|
||||||
profile,
|
profile,
|
||||||
isBlocked: _isBlocked,
|
isBlocked: _isBlocked,
|
||||||
isOwnProfile
|
isOwnProfile
|
||||||
} = useLoaderData() as ProfilePageLoaderResult
|
} = useLoaderData() as ProfilePageLoaderResult
|
||||||
// Try to decode nprofile parameter
|
|
||||||
const { nprofile } = useParams()
|
|
||||||
let profilePubkey: string | undefined
|
|
||||||
try {
|
|
||||||
const value = nprofile
|
|
||||||
? nip19.decode(nprofile as `nprofile1${string}`)
|
|
||||||
: undefined
|
|
||||||
profilePubkey = value?.data.pubkey
|
|
||||||
} catch (error) {
|
|
||||||
// Silently ignore and redirect to home or logged in user
|
|
||||||
log(true, LogType.Error, 'Failed to decode nprofile.', error)
|
|
||||||
}
|
|
||||||
|
|
||||||
const scrollTargetRef = useRef<HTMLDivElement>(null)
|
const scrollTargetRef = useRef<HTMLDivElement>(null)
|
||||||
const { ndk, publish, fetchEventFromUserRelays, fetchMods } = useNDKContext()
|
const { ndk, publish, fetchEventFromUserRelays, fetchMods } = useNDKContext()
|
||||||
const userState = useAppSelector((state) => state.user)
|
const userState = useAppSelector((state) => state.user)
|
||||||
@ -292,22 +272,6 @@ export const ProfilePage = () => {
|
|||||||
profilePubkey
|
profilePubkey
|
||||||
)
|
)
|
||||||
|
|
||||||
// Redirect route
|
|
||||||
let profileRoute = appRoutes.home
|
|
||||||
if (!nprofile && userState.auth && userState.user) {
|
|
||||||
// Redirect to user's profile is no profile is linked
|
|
||||||
const userHexKey = npubToHex(userState.user.npub as string)
|
|
||||||
|
|
||||||
if (userHexKey) {
|
|
||||||
profileRoute = getProfilePageRoute(
|
|
||||||
nip19.nprofileEncode({
|
|
||||||
pubkey: userHexKey
|
|
||||||
})
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!profilePubkey) return <Navigate to={profileRoute} replace={true} />
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='InnerBodyMain'>
|
<div className='InnerBodyMain'>
|
||||||
<div className='ContainerMain'>
|
<div className='ContainerMain'>
|
||||||
|
@ -4,9 +4,10 @@ import { LoaderFunctionArgs, redirect } from 'react-router-dom'
|
|||||||
import { appRoutes, getProfilePageRoute } from 'routes'
|
import { appRoutes, getProfilePageRoute } from 'routes'
|
||||||
import { store } from 'store'
|
import { store } from 'store'
|
||||||
import { MuteLists, UserProfile } from 'types'
|
import { MuteLists, UserProfile } from 'types'
|
||||||
import { log, LogType } from 'utils'
|
import { log, LogType, npubToHex } from 'utils'
|
||||||
|
|
||||||
export interface ProfilePageLoaderResult {
|
export interface ProfilePageLoaderResult {
|
||||||
|
profilePubkey: string
|
||||||
profile: UserProfile
|
profile: UserProfile
|
||||||
isBlocked: boolean
|
isBlocked: boolean
|
||||||
isOwnProfile: boolean
|
isOwnProfile: boolean
|
||||||
@ -24,10 +25,25 @@ export const profileRouteLoader =
|
|||||||
const { nprofile } = params
|
const { nprofile } = params
|
||||||
let profilePubkey: string | undefined
|
let profilePubkey: string | undefined
|
||||||
try {
|
try {
|
||||||
const value = nprofile
|
// Decode if it starts with nprofile1
|
||||||
? nip19.decode(nprofile as `nprofile1${string}`)
|
if (nprofile?.startsWith('nprofile1')) {
|
||||||
: undefined
|
const value = nprofile
|
||||||
profilePubkey = value?.data.pubkey
|
? nip19.decode(nprofile as `nprofile1${string}`)
|
||||||
|
: undefined
|
||||||
|
profilePubkey = value?.data.pubkey
|
||||||
|
} else if (nprofile?.startsWith('npub1')) {
|
||||||
|
// Try to get hex from the npub and encode it to nprofile
|
||||||
|
const value = npubToHex(nprofile)
|
||||||
|
if (value) {
|
||||||
|
return redirect(
|
||||||
|
getProfilePageRoute(
|
||||||
|
nip19.nprofileEncode({
|
||||||
|
pubkey: value
|
||||||
|
})
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Silently ignore and redirect to home or logged in user
|
// Silently ignore and redirect to home or logged in user
|
||||||
log(true, LogType.Error, 'Failed to decode nprofile.', error)
|
log(true, LogType.Error, 'Failed to decode nprofile.', error)
|
||||||
@ -57,6 +73,7 @@ export const profileRouteLoader =
|
|||||||
|
|
||||||
// Empty result
|
// Empty result
|
||||||
const result: ProfilePageLoaderResult = {
|
const result: ProfilePageLoaderResult = {
|
||||||
|
profilePubkey: profilePubkey,
|
||||||
profile: {},
|
profile: {},
|
||||||
isBlocked: false,
|
isBlocked: false,
|
||||||
isOwnProfile: false,
|
isOwnProfile: false,
|
||||||
|
Loading…
Reference in New Issue
Block a user