mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-06-01 10:41:26 +02:00
Add option to hide usernames
This commit is contained in:
parent
c119e02a8a
commit
bc71d92055
5
.changeset/afraid-apricots-fix.md
Normal file
5
.changeset/afraid-apricots-fix.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
"nostrudel": minor
|
||||
---
|
||||
|
||||
Add option to hide usernames
|
@ -10,7 +10,7 @@ import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { buildAppSelectUrl } from "../../../helpers/nostr/apps";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import Timestamp from "../../timestamp";
|
||||
|
||||
export default function EmbeddedArticle({ article, ...props }: Omit<CardProps, "children"> & { article: NostrEvent }) {
|
||||
|
@ -13,7 +13,7 @@ import {
|
||||
} from "@chakra-ui/react";
|
||||
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { getBadgeDescription, getBadgeImage, getBadgeName } from "../../../helpers/nostr/badges";
|
||||
|
@ -3,7 +3,7 @@ import { Box, Card, CardBody, CardFooter, CardHeader, CardProps, Flex, Heading,
|
||||
import { nip19 } from "nostr-tools";
|
||||
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import useChannelMetadata from "../../../hooks/use-channel-metadata";
|
||||
import HoverLinkOverlay from "../../hover-link-overlay";
|
||||
|
@ -3,7 +3,7 @@ import { Card, CardFooter, CardHeader, CardProps, Heading, LinkBox, LinkOverlay,
|
||||
import { nip19 } from "nostr-tools";
|
||||
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { getCommunityImage, getCommunityName } from "../../../helpers/nostr/communities";
|
||||
|
||||
|
@ -3,7 +3,7 @@ import { Card, CardBody, CardHeader, CardProps, LinkBox, Spacer, Text } from "@c
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import Timestamp from "../../timestamp";
|
||||
import DecryptPlaceholder from "../../../views/messages/decrypt-placeholder";
|
||||
import { MessageContent } from "../../../views/messages/message";
|
||||
|
@ -16,7 +16,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { getEmojisFromPack, getPackName } from "../../../helpers/nostr/emoji-packs";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import EmojiPackFavoriteButton from "../../../views/emoji-packs/components/emoji-pack-favorite-button";
|
||||
import EmojiPackMenu from "../../../views/emoji-packs/components/emoji-pack-menu";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
|
@ -5,7 +5,7 @@ import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { getGoalName } from "../../../helpers/nostr/goal";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import GoalProgress from "../../../views/goals/components/goal-progress";
|
||||
import GoalZapButton from "../../../views/goals/components/goal-zap-button";
|
||||
import GoalTopZappers from "../../../views/goals/components/goal-top-zappers";
|
||||
|
@ -6,7 +6,7 @@ import { getListDescription, getListName, isSpecialListKind } from "../../../hel
|
||||
import { createCoordinate } from "../../../services/replaceable-event-requester";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import ListFeedButton from "../../../views/lists/components/list-feed-button";
|
||||
import { ListCardContent } from "../../../views/lists/components/list-card";
|
||||
|
||||
|
@ -4,7 +4,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import { UserDnsIdentityIcon } from "../../user-dns-identity-icon";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import appSettings from "../../../services/settings/app-settings";
|
||||
|
@ -3,7 +3,7 @@ import { Card, CardProps, Flex, LinkBox, Spacer, Text } from "@chakra-ui/react";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import Timestamp from "../../timestamp";
|
||||
import ReactionIcon from "../../event-reactions/reaction-icon";
|
||||
import { NoteLink } from "../../note-link";
|
||||
|
@ -17,7 +17,7 @@ import {
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import { CompactNoteContent } from "../../compact-note-content";
|
||||
import { getDownloadURL, getHashtags, getStreamURL } from "../../../helpers/nostr/stemstr";
|
||||
import { DownloadIcon, ReplyIcon } from "../../icons";
|
||||
|
@ -2,7 +2,7 @@ import { Box, Card, CardProps, Divider, Flex, Link, Text } from "@chakra-ui/reac
|
||||
import { Link as RouterLink } from "react-router-dom";
|
||||
|
||||
import { NostrEvent, isATag } from "../../../types/nostr-event";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import UserAvatar from "../../user-avatar";
|
||||
import ChatMessageContent from "../../../views/streams/stream/stream-chat/chat-message-content";
|
||||
import useReplaceableEvent from "../../../hooks/use-replaceable-event";
|
||||
|
@ -4,7 +4,7 @@ import { Link as RouterLink, useNavigate } from "react-router-dom";
|
||||
import { parseStreamEvent } from "../../../helpers/nostr/stream";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import StreamStatusBadge from "../../../views/streams/components/status-badge";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import UserAvatar from "../../user-avatar";
|
||||
import useEventNaddr from "../../../hooks/use-event-naddr";
|
||||
import Timestamp from "../../timestamp";
|
||||
|
@ -3,7 +3,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import appSettings from "../../../services/settings/app-settings";
|
||||
import EventVerificationIcon from "../../event-verification-icon";
|
||||
|
@ -18,7 +18,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import Timestamp from "../../timestamp";
|
||||
import Magnet from "../../icons/magnet";
|
||||
|
@ -3,7 +3,7 @@ import { Box, Button, Card, CardBody, CardHeader, CardProps, Flex, Link, Text, u
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import { truncatedId } from "../../../helpers/nostr/events";
|
||||
import { buildAppSelectUrl } from "../../../helpers/nostr/apps";
|
||||
import { UserDnsIdentityIcon } from "../../user-dns-identity-icon";
|
||||
|
@ -3,7 +3,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
|
||||
import { EmbedableContent, embedJSX } from "../../helpers/embeds";
|
||||
import { DraftNostrEvent, NostrEvent } from "../../types/nostr-event";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import { getMatchHashtag, getMatchNostrLink, stripInvisibleChar } from "../../helpers/regexp";
|
||||
import { safeDecode } from "../../helpers/nip19";
|
||||
import { EmbedEventPointer } from "../embed-event";
|
||||
|
@ -16,7 +16,7 @@ import {
|
||||
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import UserAvatarLink from "../user-avatar-link";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import { LightningIcon } from "../icons";
|
||||
import { ParsedZap } from "../../helpers/nostr/zaps";
|
||||
import { readablizeSats } from "../../helpers/bolt11";
|
||||
|
@ -4,7 +4,7 @@ import { useMemo } from "react";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import { groupReactions } from "../../helpers/nostr/reactions";
|
||||
import UserAvatarLink from "../user-avatar-link";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import ReactionIcon from "../event-reactions/reaction-icon";
|
||||
|
||||
function ShowMoreGrid({
|
||||
|
@ -3,7 +3,7 @@ import { Kind } from "nostr-tools";
|
||||
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import UserAvatarLink from "../user-avatar-link";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
|
@ -28,7 +28,7 @@ import signingService from "../../services/signing";
|
||||
import accountService from "../../services/account";
|
||||
import PayStep from "./pay-step";
|
||||
import { getInvoiceFromCallbackUrl } from "../../helpers/lnurl";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import relayHintService from "../../services/event-relay-hint";
|
||||
|
||||
export type PayRequest = { invoice?: string; pubkey: string; error?: any };
|
||||
|
@ -10,7 +10,7 @@ import { EmbedEvent, EmbedProps } from "../embed-event";
|
||||
import useAppSettings from "../../hooks/use-app-settings";
|
||||
import CustomZapAmountOptions from "./zap-options";
|
||||
import UserAvatar from "../user-avatar";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
|
||||
function UserCard({ pubkey, percent }: { pubkey: string; percent?: number }) {
|
||||
const { address } = useUserLNURLMetadata(pubkey);
|
||||
|
@ -3,7 +3,7 @@ import { Alert, Box, Button, ButtonGroup, Flex, IconButton, Spacer, useDisclosur
|
||||
|
||||
import { PayRequest } from ".";
|
||||
import UserAvatar from "../user-avatar";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import { ChevronDownIcon, ChevronUpIcon, CheckIcon, ErrorIcon, LightningIcon } from "../icons";
|
||||
import { InvoiceModalContent } from "../invoice-modal";
|
||||
import { PropsWithChildren, useEffect, useState } from "react";
|
||||
|
@ -9,7 +9,7 @@ import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import accountService from "../../services/account";
|
||||
import UserAvatar from "../user-avatar";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import { GhostIcon } from "../icons";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
|
@ -31,7 +31,7 @@ declare module "yet-another-react-lightbox" {
|
||||
|
||||
import { NostrEvent } from "../types/nostr-event";
|
||||
import UserAvatarLink from "./user-avatar-link";
|
||||
import { UserLink } from "./user-link";
|
||||
import UserLink from "./user-link";
|
||||
import { UserDnsIdentityIcon } from "./user-dns-identity-icon";
|
||||
import styled from "@emotion/styled";
|
||||
import { getSharableEventAddress } from "../helpers/nip19";
|
||||
|
@ -31,7 +31,7 @@ import { getEventUID } from "../../helpers/nostr/events";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import UserAvatarLink from "../user-avatar-link";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import { useSigningContext } from "../../providers/signing-provider";
|
||||
import relayScoreboardService from "../../services/relay-scoreboard";
|
||||
import NostrPublishAction from "../../classes/nostr-publish-action";
|
||||
|
@ -20,7 +20,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
|
||||
import NoteMenu from "./note-menu";
|
||||
import { EventRelays } from "./note-relays";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import { UserDnsIdentityIcon } from "../user-dns-identity-icon";
|
||||
import NoteZapButton from "./note-zap-button";
|
||||
import { ExpandProvider } from "../../providers/expanded";
|
||||
|
@ -17,7 +17,7 @@ import { EventSplit } from "../../helpers/nostr/zaps";
|
||||
import { AddIcon } from "../icons";
|
||||
import { normalizeToHex } from "../../helpers/nip19";
|
||||
import UserAvatar from "../user-avatar";
|
||||
import { UserLink } from "../user-link";
|
||||
import UserLink from "../user-link";
|
||||
import NpubAutocomplete from "../npub-autocomplete";
|
||||
|
||||
function getRemainingPercent(split: EventSplit) {
|
||||
|
@ -3,7 +3,7 @@ import { Flex, Text } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import UserAvatar from "../../user-avatar";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import RelayCard from "../../../views/relays/components/relay-card";
|
||||
import { safeRelayUrl } from "../../../helpers/url";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
|
@ -8,7 +8,7 @@ import { Note } from "../../note";
|
||||
import NoteMenu from "../../note/note-menu";
|
||||
import UserAvatar from "../../user-avatar";
|
||||
import { UserDnsIdentityIcon } from "../../user-dns-identity-icon";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import { useReadRelayUrls } from "../../../hooks/use-client-relays";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
|
@ -21,7 +21,7 @@ import { parseStreamEvent } from "../../../helpers/nostr/stream";
|
||||
import useEventNaddr from "../../../hooks/use-event-naddr";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import UserAvatar from "../../user-avatar";
|
||||
import { UserLink } from "../../user-link";
|
||||
import UserLink from "../../user-link";
|
||||
import StreamStatusBadge from "../../../views/streams/components/status-badge";
|
||||
import { EventRelays } from "../../note/note-relays";
|
||||
import { useAsync } from "react-use";
|
||||
|
@ -5,9 +5,9 @@ import { useAsync } from "react-use";
|
||||
|
||||
import { getIdenticon } from "../helpers/identicon";
|
||||
import { safeUrl } from "../helpers/parse";
|
||||
import appSettings from "../services/settings/app-settings";
|
||||
import useSubject from "../hooks/use-subject";
|
||||
import { getUserDisplayName } from "../helpers/user-metadata";
|
||||
import useAppSettings from "../hooks/use-app-settings";
|
||||
import useCurrentAccount from "../hooks/use-current-account";
|
||||
|
||||
export const UserIdenticon = memo(({ pubkey }: { pubkey: string }) => {
|
||||
const { value: identicon } = useAsync(() => getIdenticon(pubkey), [pubkey]);
|
||||
@ -21,9 +21,11 @@ export type UserAvatarProps = Omit<AvatarProps, "src"> & {
|
||||
noProxy?: boolean;
|
||||
};
|
||||
export const UserAvatar = forwardRef<HTMLDivElement, UserAvatarProps>(({ pubkey, noProxy, relay, ...props }, ref) => {
|
||||
const { imageProxy, proxyUserMedia } = useSubject(appSettings);
|
||||
const { imageProxy, proxyUserMedia, hideUsernames } = useAppSettings();
|
||||
const account = useCurrentAccount();
|
||||
const metadata = useUserMetadata(pubkey, relay ? [relay] : undefined);
|
||||
const picture = useMemo(() => {
|
||||
if (hideUsernames && pubkey !== account?.pubkey) return undefined;
|
||||
if (metadata?.picture) {
|
||||
const src = safeUrl(metadata?.picture);
|
||||
if (!noProxy) {
|
||||
@ -36,7 +38,7 @@ export const UserAvatar = forwardRef<HTMLDivElement, UserAvatarProps>(({ pubkey,
|
||||
}
|
||||
return src;
|
||||
}
|
||||
}, [metadata?.picture, imageProxy]);
|
||||
}, [metadata?.picture, imageProxy, hideUsernames, account]);
|
||||
|
||||
return (
|
||||
<Avatar
|
||||
|
@ -4,6 +4,8 @@ import { nip19 } from "nostr-tools";
|
||||
|
||||
import { getUserDisplayName } from "../helpers/user-metadata";
|
||||
import { useUserMetadata } from "../hooks/use-user-metadata";
|
||||
import useAppSettings from "../hooks/use-app-settings";
|
||||
import useCurrentAccount from "../hooks/use-current-account";
|
||||
|
||||
export type UserLinkProps = LinkProps & {
|
||||
pubkey: string;
|
||||
@ -11,13 +13,15 @@ export type UserLinkProps = LinkProps & {
|
||||
tab?: string;
|
||||
};
|
||||
|
||||
export const UserLink = ({ pubkey, showAt, tab, ...props }: UserLinkProps) => {
|
||||
export default function UserLink({ pubkey, showAt, tab, ...props }: UserLinkProps) {
|
||||
const metadata = useUserMetadata(pubkey);
|
||||
const account = useCurrentAccount();
|
||||
const { hideUsernames } = useAppSettings();
|
||||
|
||||
return (
|
||||
<Link as={RouterLink} to={`/u/${nip19.npubEncode(pubkey)}` + (tab ? "/" + tab : "")} whiteSpace="nowrap" {...props}>
|
||||
{showAt && "@"}
|
||||
{getUserDisplayName(metadata, pubkey)}
|
||||
{hideUsernames && pubkey !== account?.pubkey ? "Anon" : getUserDisplayName(metadata, pubkey)}
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
}
|
||||
|
@ -2,13 +2,15 @@ import { Text, TextProps } from "@chakra-ui/react";
|
||||
|
||||
import { getUserDisplayName } from "../helpers/user-metadata";
|
||||
import { useUserMetadata } from "../hooks/use-user-metadata";
|
||||
import useAppSettings from "../hooks/use-app-settings";
|
||||
|
||||
export default function UserName({ pubkey, ...props }: Omit<TextProps, "children"> & { pubkey: string }) {
|
||||
const metadata = useUserMetadata(pubkey);
|
||||
const { hideUsernames } = useAppSettings();
|
||||
|
||||
return (
|
||||
<Text as="span" whiteSpace="nowrap" fontWeight="bold" {...props}>
|
||||
{getUserDisplayName(metadata, pubkey)}
|
||||
{hideUsernames ? "Anon" : getUserDisplayName(metadata, pubkey)}
|
||||
</Text>
|
||||
);
|
||||
}
|
||||
|
@ -37,8 +37,8 @@ const DecryptionContext = createContext<DecryptionContextType>({
|
||||
getQueue: () => [],
|
||||
});
|
||||
|
||||
export function useDecryptionContext(){
|
||||
return useContext(DecryptionContext)
|
||||
export function useDecryptionContext() {
|
||||
return useContext(DecryptionContext);
|
||||
}
|
||||
export function useDecryptionContainer(pubkey: string, data: string) {
|
||||
const { getOrCreateContainer, addToQueue, startQueue } = useContext(DecryptionContext);
|
||||
|
@ -39,7 +39,7 @@ import replaceableEventLoaderService from "../services/replaceable-event-request
|
||||
import useUserMuteList from "../hooks/use-user-mute-list";
|
||||
import { DraftNostrEvent } from "../types/nostr-event";
|
||||
import UserAvatar from "../components/user-avatar";
|
||||
import { UserLink } from "../components/user-link";
|
||||
import UserLink from "../components/user-link";
|
||||
import { ChevronDownIcon } from "../components/icons";
|
||||
|
||||
type MuteModalContextType = {
|
||||
|
@ -8,7 +8,7 @@ export type Account = {
|
||||
relays?: string[];
|
||||
secKey?: ArrayBuffer;
|
||||
iv?: Uint8Array;
|
||||
connectionType?: 'extension'|'serial';
|
||||
connectionType?: "extension" | "serial";
|
||||
localSettings?: AppSettings;
|
||||
};
|
||||
|
||||
|
@ -30,6 +30,7 @@ export type AppSettingsV1 = Omit<AppSettingsV0, "version"> & {
|
||||
export type AppSettingsV2 = Omit<AppSettingsV1, "version"> & { version: 2; theme: string };
|
||||
export type AppSettingsV3 = Omit<AppSettingsV2, "version"> & { version: 3; quickReactions: string[] };
|
||||
export type AppSettingsV4 = Omit<AppSettingsV3, "version"> & { version: 4; loadOpenGraphData: boolean };
|
||||
export type AppSettingsV5 = Omit<AppSettingsV4, "version"> & { version: 5; hideUsernames: boolean };
|
||||
|
||||
export function isV0(settings: { version: number }): settings is AppSettingsV0 {
|
||||
return settings.version === undefined || settings.version === 0;
|
||||
@ -46,15 +47,20 @@ export function isV3(settings: { version: number }): settings is AppSettingsV3 {
|
||||
export function isV4(settings: { version: number }): settings is AppSettingsV4 {
|
||||
return settings.version === 4;
|
||||
}
|
||||
export function isV5(settings: { version: number }): settings is AppSettingsV5 {
|
||||
return settings.version === 5;
|
||||
}
|
||||
|
||||
export type AppSettings = AppSettingsV4;
|
||||
export type AppSettings = AppSettingsV5;
|
||||
|
||||
export const defaultSettings: AppSettings = {
|
||||
version: 4,
|
||||
version: 5,
|
||||
theme: "default",
|
||||
colorMode: "system",
|
||||
maxPageWidth: "none",
|
||||
blurImages: true,
|
||||
// nostr:nevent1qqsxvkjgpc6zhydj4rxjpl0frev7hmgynruq027mujdgy2hwjypaqfspzpmhxue69uhkummnw3ezuamfdejszythwden5te0dehhxarjw4jjucm0d5sfntd0
|
||||
hideUsernames: false,
|
||||
autoShowMedia: true,
|
||||
proxyUserMedia: false,
|
||||
loadOpenGraphData: true,
|
||||
@ -76,11 +82,12 @@ export const defaultSettings: AppSettings = {
|
||||
};
|
||||
|
||||
export function upgradeSettings(settings: { version: number }): AppSettings | null {
|
||||
if (isV0(settings)) return { ...defaultSettings, ...settings, version: 4 };
|
||||
if (isV1(settings)) return { ...defaultSettings, ...settings, version: 4 };
|
||||
if (isV2(settings)) return { ...defaultSettings, ...settings, version: 4 };
|
||||
if (isV3(settings)) return { ...defaultSettings, ...settings, version: 4 };
|
||||
if (isV4(settings)) return settings;
|
||||
if (isV0(settings)) return { ...defaultSettings, ...settings, version: 5 };
|
||||
if (isV1(settings)) return { ...defaultSettings, ...settings, version: 5 };
|
||||
if (isV2(settings)) return { ...defaultSettings, ...settings, version: 5 };
|
||||
if (isV3(settings)) return { ...defaultSettings, ...settings, version: 5 };
|
||||
if (isV4(settings)) return { ...defaultSettings, ...settings, version: 5 };
|
||||
if (isV5(settings)) return settings;
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ import useSubject from "../../hooks/use-subject";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import { getEventCoordinate } from "../../helpers/nostr/events";
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import Timestamp from "../../components/timestamp";
|
||||
import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
import BadgeAwardCard from "./components/badge-award-card";
|
||||
|
@ -8,7 +8,7 @@ import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { getEventUID } from "../../../helpers/nostr/events";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import Timestamp from "../../../components/timestamp";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
|
||||
|
@ -3,7 +3,7 @@ import { Link as RouterLink, useNavigate } from "react-router-dom";
|
||||
import { ButtonGroup, Card, CardBody, CardHeader, CardProps, Flex, Heading, Image, Link, Text } from "@chakra-ui/react";
|
||||
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
|
@ -21,7 +21,7 @@ import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import HoverLinkOverlay from "../../../components/hover-link-overlay";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import useSingleEvent from "../../../hooks/use-single-event";
|
||||
import { useReadRelayUrls } from "../../../hooks/use-client-relays";
|
||||
import singleEventService from "../../../services/single-event";
|
||||
|
@ -3,7 +3,7 @@ import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import UserAvatar from "../../../components/user-avatar";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { memo, useMemo, useRef } from "react";
|
||||
import { EmbedableContent, embedUrls } from "../../../helpers/embeds";
|
||||
import {
|
||||
|
@ -22,7 +22,7 @@ import useTimelineLoader from "../../../hooks/use-timeline-loader";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import IntersectionObserverProvider from "../../../providers/intersection-observer";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import HoverLinkOverlay from "../../../components/hover-link-overlay";
|
||||
import UserAvatar from "../../../components/user-avatar";
|
||||
import { useRelaySelectionContext } from "../../../providers/relay-selection-provider";
|
||||
|
@ -20,7 +20,7 @@ import { useRegisterIntersectionEntity } from "../../../providers/intersection-o
|
||||
import { getEventUID } from "../../../helpers/nostr/events";
|
||||
import { getCommunityImage, getCommunityName } from "../../../helpers/nostr/communities";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import useCountCommunityMembers from "../../../hooks/use-count-community-members";
|
||||
import { readablizeSats } from "../../../helpers/bolt11";
|
||||
import User01 from "../../../components/icons/user-01";
|
||||
|
@ -30,7 +30,7 @@ import { SubmitHandler, useForm } from "react-hook-form";
|
||||
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import UserAvatar from "../../../components/user-avatar";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { TrashIcon } from "../../../components/icons";
|
||||
import Upload01 from "../../../components/icons/upload-01";
|
||||
import { nostrBuildUploadImage } from "../../../helpers/nostr-build";
|
||||
|
@ -14,7 +14,7 @@ import {
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { AdditionalRelayProvider } from "../../providers/additional-relay-context";
|
||||
|
||||
import TrendUp01 from "../../components/icons/trend-up-01";
|
||||
|
@ -22,7 +22,7 @@ import IntersectionObserverProvider from "../../../providers/intersection-observ
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import TimelineActionAndStatus from "../../../components/timeline-page/timeline-action-and-status";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
|
||||
|
@ -24,7 +24,7 @@ import HoverLinkOverlay from "../../../components/hover-link-overlay";
|
||||
import { CompactNoteContent } from "../../../components/compact-note-content";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { getEventUID, parseHardcodedNoteContent } from "../../../helpers/nostr/events";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import useUserMuteFilter from "../../../hooks/use-user-mute-filter";
|
||||
import { useReadRelayUrls } from "../../../hooks/use-client-relays";
|
||||
|
@ -23,7 +23,7 @@ import {
|
||||
} from "../../../helpers/nostr/communities";
|
||||
import CommunityDescription from "../../communities/components/community-description";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import CommunityJoinButton from "../../communities/components/community-join-button";
|
||||
import CommunityMenu from "./community-menu";
|
||||
|
@ -10,7 +10,7 @@ import {
|
||||
} from "../../../helpers/nostr/communities";
|
||||
import CommunityDescription from "../../communities/components/community-description";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import CommunityJoinButton from "../../communities/components/community-join-button";
|
||||
import CommunityMenu from "./community-menu";
|
||||
|
@ -14,7 +14,7 @@ import {
|
||||
} from "@chakra-ui/react";
|
||||
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
|
@ -21,7 +21,7 @@ import {
|
||||
Text,
|
||||
} from "@chakra-ui/react";
|
||||
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { ChevronLeftIcon } from "../../components/icons";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { useDeleteEventContext } from "../../providers/delete-event-provider";
|
||||
|
@ -3,7 +3,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
import { ButtonGroup, Card, CardBody, CardHeader, CardProps, Flex, Heading, Link, Text } from "@chakra-ui/react";
|
||||
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
|
@ -5,7 +5,7 @@ import { getGoalRelays } from "../../../helpers/nostr/goal";
|
||||
import useEventZaps from "../../../hooks/use-event-zaps";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { readablizeSats } from "../../../helpers/bolt11";
|
||||
import { LightningIcon } from "../../../components/icons";
|
||||
|
||||
|
@ -4,7 +4,7 @@ import { getGoalRelays } from "../../../helpers/nostr/goal";
|
||||
import useEventZaps from "../../../hooks/use-event-zaps";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { readablizeSats } from "../../../helpers/bolt11";
|
||||
import { LightningIcon } from "../../../components/icons";
|
||||
import Timestamp from "../../../components/timestamp";
|
||||
|
@ -10,7 +10,7 @@ import useSingleEvent from "../../hooks/use-single-event";
|
||||
import { isHexKey } from "../../helpers/nip19";
|
||||
import { EventPointer } from "nostr-tools/lib/types/nip19";
|
||||
import UserAvatar from "../../components/user-avatar";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import GoalContents from "./components/goal-contents";
|
||||
import GoalZapList from "./components/goal-zap-list";
|
||||
import { readablizeSats } from "../../helpers/bolt11";
|
||||
|
@ -16,7 +16,7 @@ import {
|
||||
import { Kind } from "nostr-tools";
|
||||
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import {
|
||||
getEventsFromList,
|
||||
getListDescription,
|
||||
|
@ -10,7 +10,12 @@ import NostrPublishAction from "../../../classes/nostr-publish-action";
|
||||
import clientRelaysService from "../../../services/client-relays";
|
||||
import replaceableEventLoaderService from "../../../services/replaceable-event-requester";
|
||||
import useFavoriteLists, { FAVORITE_LISTS_IDENTIFIER } from "../../../hooks/use-favorite-lists";
|
||||
import { NOTE_LIST_KIND, isSpecialListKind, listAddCoordinate, listRemoveCoordinate } from "../../../helpers/nostr/lists";
|
||||
import {
|
||||
NOTE_LIST_KIND,
|
||||
isSpecialListKind,
|
||||
listAddCoordinate,
|
||||
listRemoveCoordinate,
|
||||
} from "../../../helpers/nostr/lists";
|
||||
|
||||
export default function ListFavoriteButton({
|
||||
list,
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { useNavigate, useParams } from "react-router-dom";
|
||||
import { Kind, nip19 } from "nostr-tools";
|
||||
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { Box, Button, Flex, Heading, SimpleGrid, Spacer, Text } from "@chakra-ui/react";
|
||||
import { ChevronLeftIcon } from "../../components/icons";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
|
@ -6,7 +6,7 @@ import { useNavigate, useParams } from "react-router-dom";
|
||||
|
||||
import { ChevronLeftIcon } from "../../components/icons";
|
||||
import UserAvatar from "../../components/user-avatar";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { isHexKey } from "../../helpers/nip19";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import { useSigningContext } from "../../providers/signing-provider";
|
||||
|
@ -15,7 +15,7 @@ import {
|
||||
} from "../../components/embed-types";
|
||||
import { useRegisterIntersectionEntity } from "../../providers/intersection-observer";
|
||||
import UserAvatar from "../../components/user-avatar";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { getEventUID } from "../../helpers/nostr/events";
|
||||
import Timestamp from "../../components/timestamp";
|
||||
|
||||
|
@ -19,7 +19,7 @@ import { TrustProvider } from "../../../providers/trust";
|
||||
import ReplyForm from "./reply-form";
|
||||
import useClientSideMuteFilter from "../../../hooks/use-client-side-mute-filter";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import Timestamp from "../../../components/timestamp";
|
||||
import { NoteContents } from "../../../components/note/text-note-contents";
|
||||
import Expand01 from "../../../components/icons/expand-01";
|
||||
|
@ -22,7 +22,7 @@ import {
|
||||
import { useState } from "react";
|
||||
import { useRelayInfo } from "../../../hooks/use-relay-info";
|
||||
import UserAvatar from "../../../components/user-avatar";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { safeRelayUrl } from "../../../helpers/url";
|
||||
import { useDebounce } from "react-use";
|
||||
import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon";
|
||||
|
@ -29,7 +29,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
import { useRelayInfo } from "../../../hooks/use-relay-info";
|
||||
import { RelayFavicon } from "../../../components/relay-favicon";
|
||||
import { CodeIcon } from "../../../components/icons";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import UserAvatar from "../../../components/user-avatar";
|
||||
import { useClientRelays } from "../../../hooks/use-client-relays";
|
||||
import clientRelaysService from "../../../services/client-relays";
|
||||
|
@ -3,7 +3,7 @@ import { Card, CardBody, CardHeader, Link } from "@chakra-ui/react";
|
||||
import { Link as RouterLink } from "react-router-dom";
|
||||
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon";
|
||||
import StarRating from "../../../components/star-rating";
|
||||
import { safeJson } from "../../../helpers/parse";
|
||||
|
@ -9,7 +9,7 @@ import { EmbedableContent, embedUrls } from "../../helpers/embeds";
|
||||
import UserAvatar from "../../components/user-avatar";
|
||||
import { UserDnsIdentityIcon } from "../../components/user-dns-identity-icon";
|
||||
import { embedNostrLinks, renderGenericUrl } from "../../components/embed-types";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import trustedUserStatsService, { NostrBandUserStats } from "../../services/trusted-user-stats";
|
||||
import { useRelaySelectionRelays } from "../../providers/relay-selection-provider";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { useMemo, useState } from "react";
|
||||
import { UseControllerProps, useController, useFormContext } from "react-hook-form";
|
||||
import { useFormContext } from "react-hook-form";
|
||||
import { Link as RouterLink } from "react-router-dom";
|
||||
import {
|
||||
Flex,
|
||||
FormControl,
|
||||
@ -21,6 +22,7 @@ import {
|
||||
useDisclosure,
|
||||
IconButton,
|
||||
Button,
|
||||
Link,
|
||||
} from "@chakra-ui/react";
|
||||
import { matchSorter } from "match-sorter";
|
||||
|
||||
@ -173,6 +175,26 @@ export default function DisplaySettings() {
|
||||
<span>Enabled: blur media from people you aren't following</span>
|
||||
</FormHelperText>
|
||||
</FormControl>
|
||||
<FormControl>
|
||||
<Flex alignItems="center">
|
||||
<FormLabel htmlFor="hideUsernames" mb="0">
|
||||
Hide Usernames (anon mode)
|
||||
</FormLabel>
|
||||
<Switch id="hideUsernames" {...register("hideUsernames")} />
|
||||
</Flex>
|
||||
<FormHelperText>
|
||||
<span>
|
||||
Enabled: hides usernames and pictures.{" "}
|
||||
<Link
|
||||
as={RouterLink}
|
||||
color="blue.500"
|
||||
to="/n/nevent1qqsxvkjgpc6zhydj4rxjpl0frev7hmgynruq027mujdgy2hwjypaqfspzpmhxue69uhkummnw3ezuamfdejszythwden5te0dehhxarjw4jjucm0d5sfntd0"
|
||||
>
|
||||
Details
|
||||
</Link>
|
||||
</span>
|
||||
</FormHelperText>
|
||||
</FormControl>
|
||||
<FormControl>
|
||||
<Flex alignItems="center">
|
||||
<FormLabel htmlFor="show-content-warning" mb="0">
|
||||
|
@ -3,7 +3,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
import { useAsync } from "react-use";
|
||||
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { containerProps } from "./common";
|
||||
import { UserFollowButton } from "../../components/user-follow-button";
|
||||
import { Kind0ParsedContent } from "../../helpers/user-metadata";
|
||||
|
@ -4,7 +4,7 @@ import { Box, Card, CardBody, CardProps, Flex, Heading, LinkBox, LinkOverlay, Te
|
||||
import { ParsedStream } from "../../../helpers/nostr/stream";
|
||||
import { Link as RouterLink } from "react-router-dom";
|
||||
import UserAvatar from "../../../components/user-avatar";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import StreamStatusBadge from "./status-badge";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import useEventNaddr from "../../../hooks/use-event-naddr";
|
||||
|
@ -2,7 +2,7 @@ import { useMemo } from "react";
|
||||
import { Flex, FlexProps, Text } from "@chakra-ui/react";
|
||||
|
||||
import { parseZapEvent } from "../../../helpers/nostr/zaps";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { LightningIcon } from "../../../components/icons";
|
||||
import { readablizeSats } from "../../../helpers/bolt11";
|
||||
import useStreamChatTimeline from "../stream/stream-chat/use-stream-chat-timeline";
|
||||
|
@ -26,7 +26,7 @@ import { unique } from "../../../helpers/array";
|
||||
import { LiveVideoPlayer } from "../../../components/live-video-player";
|
||||
import StreamChat, { ChatDisplayMode } from "./stream-chat";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import StreamSummaryContent from "../components/stream-summary-content";
|
||||
import { ChevronLeftIcon, ExternalLinkIcon } from "../../../components/icons";
|
||||
import useSetColorMode from "../../../hooks/use-set-color-mode";
|
||||
|
@ -3,7 +3,7 @@ import { Box, Text } from "@chakra-ui/react";
|
||||
|
||||
import { ParsedStream } from "../../../../helpers/nostr/stream";
|
||||
import UserAvatar from "../../../../components/user-avatar";
|
||||
import { UserLink } from "../../../../components/user-link";
|
||||
import UserLink from "../../../../components/user-link";
|
||||
import { NostrEvent } from "../../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../../providers/intersection-observer";
|
||||
import { TrustProvider } from "../../../../providers/trust";
|
||||
|
@ -3,7 +3,7 @@ import { Box, Flex, Text } from "@chakra-ui/react";
|
||||
|
||||
import { ParsedStream } from "../../../../helpers/nostr/stream";
|
||||
import UserAvatar from "../../../../components/user-avatar";
|
||||
import { UserLink } from "../../../../components/user-link";
|
||||
import UserLink from "../../../../components/user-link";
|
||||
import { NostrEvent } from "../../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../../providers/intersection-observer";
|
||||
import { LightningIcon } from "../../../../components/icons";
|
||||
|
@ -5,7 +5,7 @@ import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import RequireCurrentAccount from "../../providers/require-current-account";
|
||||
import { useNetworkConnectionCount } from "../../hooks/use-user-network";
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { ChevronLeftIcon } from "../../components/icons";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
|
@ -6,7 +6,7 @@ import useSubject from "../../../hooks/use-subject";
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import useStreamChatTimeline from "../../streams/stream/stream-chat/use-stream-chat-timeline";
|
||||
import UserAvatar from "../../../components/user-avatar";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import useUserMuteFunctions from "../../../hooks/use-user-mute-functions";
|
||||
import { useMuteModalContext } from "../../../providers/mute-modal-provider";
|
||||
import useUserMuteList from "../../../hooks/use-user-mute-list";
|
||||
|
@ -5,7 +5,7 @@ import { Link as RouterLink, useLocation } from "react-router-dom";
|
||||
import { getTorrentMagnetLink, getTorrentSize, getTorrentTitle } from "../../../helpers/nostr/torrents";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import Timestamp from "../../../components/timestamp";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import Magnet from "../../../components/icons/magnet";
|
||||
import { getNeventForEventId } from "../../../helpers/nip19";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
|
@ -21,7 +21,7 @@ import {
|
||||
} from "@chakra-ui/react";
|
||||
import useClientSideMuteFilter from "../../../hooks/use-client-side-mute-filter";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon";
|
||||
import Timestamp from "../../../components/timestamp";
|
||||
import Minus from "../../../components/icons/minus";
|
||||
|
@ -27,7 +27,7 @@ import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import { ErrorBoundary } from "../../components/error-boundary";
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import {
|
||||
TORRENT_COMMENT_KIND,
|
||||
getTorrentFiles,
|
||||
|
@ -24,7 +24,7 @@ import { getEventCoordinate } from "../../../helpers/nostr/events";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import { UserLink } from "../../../components/user-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import Timestamp from "../../../components/timestamp";
|
||||
import { useState } from "react";
|
||||
|
||||
|
@ -12,7 +12,7 @@ import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status";
|
||||
import { NostrEvent, isPTag } from "../../types/nostr-event";
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import ArrowRight from "../../components/icons/arrow-right";
|
||||
import { AtIcon } from "../../components/icons";
|
||||
import Timestamp from "../../components/timestamp";
|
||||
|
@ -10,7 +10,7 @@ import IntersectionObserverProvider, { useRegisterIntersectionEntity } from "../
|
||||
import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status";
|
||||
import { useMemo, useRef } from "react";
|
||||
import { getEventUID } from "../../helpers/nostr/events";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
|
||||
function FollowerItem({ event }: { event: Event }) {
|
||||
|
@ -3,7 +3,7 @@ import { Flex, Heading, Link, SimpleGrid } from "@chakra-ui/react";
|
||||
import { Link as RouterLink, useOutletContext } from "react-router-dom";
|
||||
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import { MUTE_LIST_KIND, PEOPLE_LIST_KIND, getListName, getPubkeysFromList } from "../../helpers/nostr/lists";
|
||||
|
@ -13,7 +13,7 @@ import IntersectionObserverProvider, { useRegisterIntersectionEntity } from "../
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import { TrustProvider } from "../../providers/trust";
|
||||
import UserAvatar from "../../components/user-avatar";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import NoteMenu from "../../components/note/note-menu";
|
||||
import { EmbedEventPointer } from "../../components/embed-event";
|
||||
import { embedEmoji } from "../../components/embed-types";
|
||||
|
@ -4,7 +4,7 @@ import { useOutletContext } from "react-router-dom";
|
||||
import { Kind } from "nostr-tools";
|
||||
|
||||
import { NoteLink } from "../../components/note-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { filterTagsByContentRefs, getEventUID } from "../../helpers/nostr/events";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { isETag, isPTag, NostrEvent } from "../../types/nostr-event";
|
||||
|
@ -7,7 +7,7 @@ import { ErrorBoundary, ErrorFallback } from "../../components/error-boundary";
|
||||
import { LightningIcon } from "../../components/icons";
|
||||
import { NoteLink } from "../../components/note-link";
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import { UserLink } from "../../components/user-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { readablizeSats } from "../../helpers/bolt11";
|
||||
import { isProfileZap, isNoteZap, parseZapEvent, totalZaps } from "../../helpers/nostr/zaps";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
|
Loading…
x
Reference in New Issue
Block a user