Browse Source

bug-fixes

imwald
Silberengel 3 weeks ago
parent
commit
5a9129e046
  1. 4
      src/components/NoteList/index.tsx
  2. 2
      src/components/PaytoLink/index.tsx
  3. 4
      src/components/Profile/ProfileFeed.tsx
  4. 4
      src/hooks/useProfileReportsEvents.tsx
  5. 4
      src/hooks/useProfileTimeline.tsx
  6. 4
      src/hooks/useProfileWall.tsx
  7. 2
      src/i18n/locales/cs.ts
  8. 2
      src/i18n/locales/de.ts
  9. 2
      src/i18n/locales/en.ts
  10. 2
      src/i18n/locales/es.ts
  11. 2
      src/i18n/locales/fr.ts
  12. 2
      src/i18n/locales/nl.ts
  13. 2
      src/i18n/locales/pl.ts
  14. 2
      src/i18n/locales/ru.ts
  15. 2
      src/i18n/locales/tr.ts
  16. 2
      src/i18n/locales/zh.ts
  17. 14
      src/providers/DeletedEventProvider.tsx

4
src/components/NoteList/index.tsx

@ -34,7 +34,7 @@ import { useFeedAttestedSuperchatIds } from '@/hooks/useFeedAttestedSuperchatIds @@ -34,7 +34,7 @@ import { useFeedAttestedSuperchatIds } from '@/hooks/useFeedAttestedSuperchatIds
import { shouldIncludePaymentInFeed } from '@/lib/superchat'
import { isTouchDevice } from '@/lib/utils'
import { useContentPolicyOptional } from '@/providers/ContentPolicyProvider'
import { useDeletedEvent } from '@/providers/DeletedEventProvider'
import { useDeletedEventSafe } from '@/providers/DeletedEventProvider'
import { useMuteList } from '@/contexts/mute-list-context'
import { muteSetHas } from '@/lib/mute-set'
import { useNostr } from '@/providers/NostrProvider'
@ -858,7 +858,7 @@ const NoteList = forwardRef( @@ -858,7 +858,7 @@ const NoteList = forwardRef(
const isOffline =
contentPolicy?.isOffline ??
(!navigator.onLine || (navigator as Navigator & { connection?: { type?: string } }).connection?.type === 'none')
const { isEventDeleted } = useDeletedEvent()
const { isEventDeleted } = useDeletedEventSafe()
const { favoriteRelays, blockedRelays } = useFavoriteRelays()
const [events, setEvents] = useState<Event[]>([])
const eventsRef = useRef<Event[]>([])

2
src/components/PaytoLink/index.tsx

@ -84,7 +84,7 @@ export default function PaytoLink({ @@ -84,7 +84,7 @@ export default function PaytoLink({
const categoryLabel = (() => {
const c = info?.category
if (!c) return ''
if (c === 'bitcoin-layer') return 'Bitcoin layer'
if (c === 'bitcoin-layer') return 'Bitcoin layer (Lightning)'
return c.charAt(0).toUpperCase() + c.slice(1)
})()
const childText = flattenPaytoLinkChildText(children)

4
src/components/Profile/ProfileFeed.tsx

@ -7,7 +7,7 @@ import { ExtendedKind, PROFILE_FEED_KINDS, PROFILE_TIMELINE_REQ_LIMIT } from '@/ @@ -7,7 +7,7 @@ import { ExtendedKind, PROFILE_FEED_KINDS, PROFILE_TIMELINE_REQ_LIMIT } from '@/
import { useProfileAuthorFeedSubRequests } from '@/hooks/useProfileAuthorFeedSubRequests'
import { useProfilePins } from '@/hooks/useProfilePins'
import { useKindFilterOrDefaults } from '@/providers/KindFilterProvider'
import { useDeletedEvent } from '@/providers/DeletedEventProvider'
import { useDeletedEventSafe } from '@/providers/DeletedEventProvider'
import client from '@/services/client.service'
import { nip19, kinds } from 'nostr-tools'
import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'
@ -20,7 +20,7 @@ const ProfileFeed = forwardRef< @@ -20,7 +20,7 @@ const ProfileFeed = forwardRef<
{ pubkey: string; /** Payment methods, badges, and other author replaceables. */ onRefreshExtras?: () => void }
>(({ pubkey, onRefreshExtras }, ref) => {
const { t } = useTranslation()
const { isEventDeleted } = useDeletedEvent()
const { isEventDeleted } = useDeletedEventSafe()
const { showKinds, showKind1OPs, showKind1Replies, showKind1111, feedKindFilterBypass } =
useKindFilterOrDefaults()
const profileTimelineShowKinds = useMemo(() => {

4
src/hooks/useProfileReportsEvents.tsx

@ -7,7 +7,7 @@ import { isReportAuthoredBy, reportTargetsPubkey } from '@/lib/nip56-reports' @@ -7,7 +7,7 @@ import { isReportAuthoredBy, reportTargetsPubkey } from '@/lib/nip56-reports'
import { normalizeHexPubkey } from '@/lib/pubkey'
import { dedupeNormalizeRelayUrlsOrdered } from '@/lib/relay-url-priority'
import { normalizeAnyRelayUrl, subtractNormalizedRelayUrls } from '@/lib/url'
import { useDeletedEvent } from '@/providers/DeletedEventProvider'
import { useDeletedEventSafe } from '@/providers/DeletedEventProvider'
import { useFavoriteRelays } from '@/providers/FavoriteRelaysProvider'
import { useNostrOptional } from '@/providers/nostr-context'
import client from '@/services/client.service'
@ -80,7 +80,7 @@ export function useProfileReportsEvents({ @@ -80,7 +80,7 @@ export function useProfileReportsEvents({
const { favoriteRelays, blockedRelays } = useFavoriteRelays()
const useGlobalRelayBootstrap = useGlobalRelayBootstrapDefaults()
const nostr = useNostrOptional()
const { isEventDeleted, tombstoneEpoch } = useDeletedEvent()
const { isEventDeleted, tombstoneEpoch } = useDeletedEventSafe()
const isEventDeletedRef = useRef(isEventDeleted)
isEventDeletedRef.current = isEventDeleted

4
src/hooks/useProfileTimeline.tsx

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
import { useDeletedEvent } from '@/providers/DeletedEventProvider'
import { useDeletedEventSafe } from '@/providers/DeletedEventProvider'
import client, { eventService } from '@/services/client.service'
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { Event, kinds as nostrKinds, type Filter } from 'nostr-tools'
@ -158,7 +158,7 @@ export function useProfileTimeline({ @@ -158,7 +158,7 @@ export function useProfileTimeline({
() => relayListsContentKey(favoriteRelays, blockedRelays),
[favoriteRelays, blockedRelays]
)
const { isEventDeleted, tombstoneEpoch } = useDeletedEvent()
const { isEventDeleted, tombstoneEpoch } = useDeletedEventSafe()
const isEventDeletedRef = useRef(isEventDeleted)
isEventDeletedRef.current = isEventDeleted

4
src/hooks/useProfileWall.tsx

@ -35,7 +35,7 @@ import { isValidPubkey, userIdToPubkey } from '@/lib/pubkey' @@ -35,7 +35,7 @@ import { isValidPubkey, userIdToPubkey } from '@/lib/pubkey'
import { normalizeAnyRelayUrl } from '@/lib/url'
import { useFavoriteRelays } from '@/providers/FavoriteRelaysProvider'
import type { TSubRequestFilter } from '@/types'
import { useDeletedEvent } from '@/providers/DeletedEventProvider'
import { useDeletedEventSafe } from '@/providers/DeletedEventProvider'
import client, { replaceableEventService } from '@/services/client.service'
import { ReplaceableEventService } from '@/services/client-replaceable-events.service'
import indexedDb from '@/services/indexed-db.service'
@ -263,7 +263,7 @@ function relayListsContentKey(favoriteRelays: string[], blockedRelays: string[]) @@ -263,7 +263,7 @@ function relayListsContentKey(favoriteRelays: string[], blockedRelays: string[])
export function useProfileWall(pubkey: string, profileEventId: string | undefined) {
const { favoriteRelays, blockedRelays } = useFavoriteRelays()
const useGlobalRelayBootstrap = useGlobalRelayBootstrapDefaults()
const { isEventDeleted } = useDeletedEvent()
const { isEventDeleted } = useDeletedEventSafe()
const isEventDeletedRef = useRef(isEventDeleted)
isEventDeletedRef.current = isEventDeleted

2
src/i18n/locales/cs.ts

@ -675,7 +675,7 @@ export default { @@ -675,7 +675,7 @@ export default {
'Show all categories': 'Show all categories',
'Other payment categories ({{count}})': 'Other payment categories ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Bitcoin layer',
'paytoCategory.bitcoin-layer': 'Bitcoin layer (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Crypto',
'paytoCategory.stablecoin': 'Stablecoin',

2
src/i18n/locales/de.ts

@ -683,7 +683,7 @@ export default { @@ -683,7 +683,7 @@ export default {
'Show all categories': 'Alle Kategorien anzeigen',
'Other payment categories ({{count}})': 'Weitere Zahlungskategorien ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Bitcoin-Layer',
'paytoCategory.bitcoin-layer': 'Bitcoin-Layer (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Krypto',
'paytoCategory.stablecoin': 'Stablecoin',

2
src/i18n/locales/en.ts

@ -673,7 +673,7 @@ export default { @@ -673,7 +673,7 @@ export default {
'Show all categories': 'Show all categories',
'Other payment categories ({{count}})': 'Other payment categories ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Bitcoin layer',
'paytoCategory.bitcoin-layer': 'Bitcoin layer (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Crypto',
'paytoCategory.stablecoin': 'Stablecoin',

2
src/i18n/locales/es.ts

@ -677,7 +677,7 @@ export default { @@ -677,7 +677,7 @@ export default {
'Show all categories': 'Mostrar todas las categorías',
'Other payment categories ({{count}})': 'Otras categorías de pago ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Capa Bitcoin',
'paytoCategory.bitcoin-layer': 'Capa Bitcoin (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Cripto',
'paytoCategory.stablecoin': 'Stablecoin',

2
src/i18n/locales/fr.ts

@ -676,7 +676,7 @@ export default { @@ -676,7 +676,7 @@ export default {
'Show all categories': 'Afficher toutes les catégories',
'Other payment categories ({{count}})': 'Autres catégories de paiement ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Couche Bitcoin',
'paytoCategory.bitcoin-layer': 'Couche Bitcoin (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Crypto',
'paytoCategory.stablecoin': 'Stablecoin',

2
src/i18n/locales/nl.ts

@ -675,7 +675,7 @@ export default { @@ -675,7 +675,7 @@ export default {
'Show all categories': 'Show all categories',
'Other payment categories ({{count}})': 'Other payment categories ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Bitcoin layer',
'paytoCategory.bitcoin-layer': 'Bitcoin layer (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Crypto',
'paytoCategory.stablecoin': 'Stablecoin',

2
src/i18n/locales/pl.ts

@ -674,7 +674,7 @@ export default { @@ -674,7 +674,7 @@ export default {
'Show all categories': 'Pokaż wszystkie kategorie',
'Other payment categories ({{count}})': 'Inne kategorie płatności ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Warstwa Bitcoin',
'paytoCategory.bitcoin-layer': 'Warstwa Bitcoin (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Krypto',
'paytoCategory.stablecoin': 'Stablecoin',

2
src/i18n/locales/ru.ts

@ -677,7 +677,7 @@ export default { @@ -677,7 +677,7 @@ export default {
'Show all categories': 'Показать все категории',
'Other payment categories ({{count}})': 'Другие категории оплаты ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Слой Bitcoin',
'paytoCategory.bitcoin-layer': 'Слой Bitcoin (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Крипто',
'paytoCategory.stablecoin': 'Стейблкоин',

2
src/i18n/locales/tr.ts

@ -675,7 +675,7 @@ export default { @@ -675,7 +675,7 @@ export default {
'Show all categories': 'Show all categories',
'Other payment categories ({{count}})': 'Other payment categories ({{count}})',
'paytoCategory.bitcoin': 'Bitcoin',
'paytoCategory.bitcoin-layer': 'Bitcoin layer',
'paytoCategory.bitcoin-layer': 'Bitcoin layer (Lightning)',
'paytoCategory.monero': 'Monero',
'paytoCategory.crypto': 'Crypto',
'paytoCategory.stablecoin': 'Stablecoin',

2
src/i18n/locales/zh.ts

@ -673,7 +673,7 @@ export default { @@ -673,7 +673,7 @@ export default {
'Show all categories': '显示所有类别',
'Other payment categories ({{count}})': '其他支付类别 ({{count}})',
'paytoCategory.bitcoin': '比特币',
'paytoCategory.bitcoin-layer': '比特币二层',
'paytoCategory.bitcoin-layer': '比特币二层 (Lightning)',
'paytoCategory.monero': '门罗币',
'paytoCategory.crypto': '加密货币',
'paytoCategory.stablecoin': '稳定币',

14
src/providers/DeletedEventProvider.tsx

@ -16,12 +16,26 @@ type TDeletedEventContext = { @@ -16,12 +16,26 @@ type TDeletedEventContext = {
const DeletedEventContext = createContext<TDeletedEventContext | undefined>(undefined)
const noopIsEventDeleted = () => false
const noopAddDeletedEvent = () => {}
const noopAddDeletedEventId = () => {}
const DELETED_EVENT_CONTEXT_FALLBACK: TDeletedEventContext = {
addDeletedEvent: noopAddDeletedEvent,
addDeletedEventId: noopAddDeletedEventId,
isEventDeleted: noopIsEventDeleted,
tombstoneEpoch: 0
}
/** Returns undefined outside provider (e.g. Asciidoc `createRoot` embeds before wrappers mount). */
export function useDeletedEventOptional(): TDeletedEventContext | undefined {
return useContext(DeletedEventContext)
}
/** Non-throwing; use in feeds/lists that only filter tombstones (survives HMR context splits). */
export function useDeletedEventSafe(): TDeletedEventContext {
return useDeletedEventOptional() ?? DELETED_EVENT_CONTEXT_FALLBACK
}
export const useDeletedEvent = () => {
const context = useDeletedEventOptional()
if (!context) {

Loading…
Cancel
Save