From ab1efc2e2e42b8301ee197406927c2b7d7144a29 Mon Sep 17 00:00:00 2001 From: Kieran Date: Fri, 20 Jan 2023 11:11:50 +0000 Subject: [PATCH] chore: use src relative imports --- src/Const.ts | 2 +- src/Util.ts | 4 +- src/db/User.ts | 2 +- src/db/index.ts | 4 +- src/element/Avatar.tsx | 4 +- src/element/Copy.tsx | 2 +- src/element/DM.tsx | 16 +- src/element/FollowButton.tsx | 6 +- src/element/FollowListBase.tsx | 6 +- src/element/FollowersList.tsx | 8 +- src/element/FollowsList.tsx | 8 +- src/element/FollowsYou.tsx | 8 +- src/element/Invoice.tsx | 4 +- src/element/LNURLTip.tsx | 8 +- src/element/Mention.tsx | 6 +- src/element/Nip05.tsx | 2 +- src/element/Nip5Service.tsx | 16 +- src/element/Note.tsx | 18 +- src/element/NoteCreator.tsx | 12 +- src/element/NoteFooter.tsx | 20 +-- src/element/NoteGhost.tsx | 2 +- src/element/NoteReaction.tsx | 15 +- src/element/NoteToSelf.tsx | 6 +- src/element/ProfileImage.tsx | 12 +- src/element/ProfilePreview.tsx | 8 +- src/element/Relay.tsx | 8 +- src/element/Text.tsx | 18 +- src/element/Textarea.tsx | 10 +- src/element/Thread.tsx | 12 +- src/element/Timeline.tsx | 12 +- src/element/ZapButton.tsx | 6 +- src/feed/EventPublisher.ts | 16 +- src/feed/FollowersFeed.ts | 8 +- src/feed/FollowsFeed.ts | 9 +- src/feed/LoginFeed.ts | 23 +-- src/feed/ProfileFeed.ts | 8 +- src/feed/RelayState.ts | 4 +- src/feed/Subscription.ts | 6 +- src/feed/ThreadFeed.ts | 8 +- src/feed/TimelineFeed.ts | 10 +- src/index.tsx | 32 ++-- src/nostr/Connection.ts | 10 +- src/nostr/Event.ts | 8 +- src/nostr/Subscriptions.ts | 6 +- src/nostr/System.ts | 16 +- src/nostr/Tag.ts | 2 +- src/nostr/Thread.ts | 8 +- src/pages/ChatPage.tsx | 14 +- src/pages/DonatePage.tsx | 5 +- src/pages/EventPage.tsx | 6 +- src/pages/HashTagsPage.tsx | 2 +- src/pages/Layout.tsx | 16 +- src/pages/Login.tsx | 10 +- src/pages/MessagesPage.tsx | 12 +- src/pages/NewUserPage.tsx | 4 +- src/pages/Notifications.tsx | 18 +- src/pages/ProfilePage.tsx | 30 ++-- src/pages/Root.tsx | 13 +- src/pages/SettingsPage.tsx | 24 +-- src/pages/Verification.tsx | 2 +- src/pages/settings/ProfileSettings.tsx | 240 +++++++++++++++++++++++++ src/state/Login.ts | 6 +- src/state/Store.ts | 2 +- tsconfig.json | 1 + 64 files changed, 542 insertions(+), 302 deletions(-) create mode 100644 src/pages/settings/ProfileSettings.tsx diff --git a/src/Const.ts b/src/Const.ts index 9993be4..0ccfbbe 100644 --- a/src/Const.ts +++ b/src/Const.ts @@ -1,4 +1,4 @@ -import { RelaySettings } from "./nostr/Connection"; +import { RelaySettings } from "Nostr/Connection"; /** * Websocket re-connect timeout diff --git a/src/Util.ts b/src/Util.ts index 0871674..68cc7e4 100644 --- a/src/Util.ts +++ b/src/Util.ts @@ -1,7 +1,7 @@ import * as secp from "@noble/secp256k1"; import { bech32 } from "bech32"; -import { HexKey, RawEvent, TaggedRawEvent, u256 } from "./nostr"; -import EventKind from "./nostr/EventKind"; +import { HexKey, RawEvent, TaggedRawEvent, u256 } from "Nostr"; +import EventKind from "Nostr/EventKind"; export async function openFile(): Promise { return new Promise((resolve, reject) => { diff --git a/src/db/User.ts b/src/db/User.ts index a8aec51..c5f4947 100644 --- a/src/db/User.ts +++ b/src/db/User.ts @@ -1,4 +1,4 @@ -import { HexKey, TaggedRawEvent, UserMetadata } from "../nostr"; +import { HexKey, TaggedRawEvent, UserMetadata } from "Nostr"; import { hexToBech32 } from "../Util"; export interface MetadataCache extends UserMetadata { diff --git a/src/db/index.ts b/src/db/index.ts index 8af9d9a..b30881a 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -1,6 +1,6 @@ import Dexie, { Table } from "dexie"; -import { MetadataCache } from "./User"; -import { hexToBech32 } from "../Util"; +import { MetadataCache } from "Db/User"; +import { hexToBech32 } from "Util"; export class SnortDB extends Dexie { diff --git a/src/element/Avatar.tsx b/src/element/Avatar.tsx index fef211f..691e579 100644 --- a/src/element/Avatar.tsx +++ b/src/element/Avatar.tsx @@ -1,9 +1,7 @@ import "./Avatar.css"; import Nostrich from "../nostrich.jpg"; - import { CSSProperties } from "react"; - -import type { UserMetadata } from "../nostr"; +import type { UserMetadata } from "Nostr"; const Avatar = ({ user, ...rest }: { user?: UserMetadata, onClick?: () => void}) => { diff --git a/src/element/Copy.tsx b/src/element/Copy.tsx index 8a4fddb..0168447 100644 --- a/src/element/Copy.tsx +++ b/src/element/Copy.tsx @@ -1,7 +1,7 @@ import "./Copy.css"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCopy, faCheck } from "@fortawesome/free-solid-svg-icons"; -import { useCopy } from "../useCopy"; +import { useCopy } from "useCopy"; export interface CopyProps { text: string, diff --git a/src/element/DM.tsx b/src/element/DM.tsx index f80ea47..3026308 100644 --- a/src/element/DM.tsx +++ b/src/element/DM.tsx @@ -3,14 +3,14 @@ import { useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useInView } from 'react-intersection-observer'; -import useEventPublisher from "../feed/EventPublisher"; -import Event from "../nostr/Event"; -import NoteTime from "./NoteTime"; -import Text from "./Text"; -import { setLastReadDm } from "../pages/MessagesPage"; -import { RootState } from "../state/Store"; -import { HexKey, TaggedRawEvent } from "../nostr"; -import { incDmInteraction } from "../state/Login"; +import useEventPublisher from "Feed/EventPublisher"; +import Event from "Nostr/Event"; +import NoteTime from "Element/NoteTime"; +import Text from "Element/Text"; +import { setLastReadDm } from "Pages/MessagesPage"; +import { RootState } from "State/Store"; +import { HexKey, TaggedRawEvent } from "Nostr"; +import { incDmInteraction } from "State/Login"; export type DMProps = { data: TaggedRawEvent diff --git a/src/element/FollowButton.tsx b/src/element/FollowButton.tsx index b0d75ac..747813b 100644 --- a/src/element/FollowButton.tsx +++ b/src/element/FollowButton.tsx @@ -1,9 +1,9 @@ import { useSelector } from "react-redux"; -import useEventPublisher from "../feed/EventPublisher"; +import useEventPublisher from "Feed/EventPublisher"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faUserMinus, faUserPlus } from "@fortawesome/free-solid-svg-icons"; -import { HexKey } from "../nostr"; -import { RootState } from "../state/Store"; +import { HexKey } from "Nostr"; +import { RootState } from "State/Store"; export interface FollowButtonProps { pubkey: HexKey, diff --git a/src/element/FollowListBase.tsx b/src/element/FollowListBase.tsx index 99dfe88..59e84b1 100644 --- a/src/element/FollowListBase.tsx +++ b/src/element/FollowListBase.tsx @@ -1,6 +1,6 @@ -import useEventPublisher from "../feed/EventPublisher"; -import { HexKey } from "../nostr"; -import ProfilePreview from "./ProfilePreview"; +import useEventPublisher from "Feed/EventPublisher"; +import { HexKey } from "Nostr"; +import ProfilePreview from "Element/ProfilePreview"; export interface FollowListBaseProps { pubkeys: HexKey[], diff --git a/src/element/FollowersList.tsx b/src/element/FollowersList.tsx index a8b3c9b..58bc3ac 100644 --- a/src/element/FollowersList.tsx +++ b/src/element/FollowersList.tsx @@ -1,8 +1,8 @@ import { useMemo } from "react"; -import useFollowersFeed from "../feed/FollowersFeed"; -import { HexKey } from "../nostr"; -import EventKind from "../nostr/EventKind"; -import FollowListBase from "./FollowListBase"; +import useFollowersFeed from "Feed/FollowersFeed"; +import { HexKey } from "Nostr"; +import EventKind from "Nostr/EventKind"; +import FollowListBase from "Element/FollowListBase"; export interface FollowersListProps { pubkey: HexKey diff --git a/src/element/FollowsList.tsx b/src/element/FollowsList.tsx index 53c5378..5e61ffc 100644 --- a/src/element/FollowsList.tsx +++ b/src/element/FollowsList.tsx @@ -1,8 +1,8 @@ import { useMemo } from "react"; -import useFollowsFeed from "../feed/FollowsFeed"; -import { HexKey } from "../nostr"; -import FollowListBase from "./FollowListBase"; -import { getFollowers} from "../feed/FollowsFeed"; +import useFollowsFeed from "Feed/FollowsFeed"; +import { HexKey } from "Nostr"; +import FollowListBase from "Element/FollowListBase"; +import { getFollowers} from "Feed/FollowsFeed"; export interface FollowsListProps { pubkey: HexKey diff --git a/src/element/FollowsYou.tsx b/src/element/FollowsYou.tsx index c9cf63a..e3b0bd8 100644 --- a/src/element/FollowsYou.tsx +++ b/src/element/FollowsYou.tsx @@ -1,10 +1,10 @@ import "./FollowsYou.css"; import { useMemo } from "react"; import { useSelector } from "react-redux"; -import { HexKey } from "../nostr"; -import { RootState } from "../state/Store"; -import useFollowsFeed from "../feed/FollowsFeed"; -import { getFollowers } from "../feed/FollowsFeed"; +import { HexKey } from "Nostr"; +import { RootState } from "State/Store"; +import useFollowsFeed from "Feed/FollowsFeed"; +import { getFollowers } from "Feed/FollowsFeed"; export interface FollowsYouProps { pubkey: HexKey diff --git a/src/element/Invoice.tsx b/src/element/Invoice.tsx index 84d8478..7f90d1c 100644 --- a/src/element/Invoice.tsx +++ b/src/element/Invoice.tsx @@ -3,8 +3,8 @@ import { useState } from "react"; // @ts-expect-error import { decode as invoiceDecode } from "light-bolt11-decoder"; import { useMemo } from "react"; -import NoteTime from "./NoteTime"; -import LNURLTip from "./LNURLTip"; +import NoteTime from "Element/NoteTime"; +import LNURLTip from "Element/LNURLTip"; export interface InvoiceProps { invoice: string diff --git a/src/element/LNURLTip.tsx b/src/element/LNURLTip.tsx index bf5652b..d800226 100644 --- a/src/element/LNURLTip.tsx +++ b/src/element/LNURLTip.tsx @@ -1,9 +1,9 @@ import "./LNURLTip.css"; import { useEffect, useMemo, useState } from "react"; -import { bech32ToText } from "../Util"; -import Modal from "./Modal"; -import QrCode from "./QrCode"; -import Copy from "./Copy"; +import { bech32ToText } from "Util"; +import Modal from "Element/Modal"; +import QrCode from "Element/QrCode"; +import Copy from "Element/Copy"; declare global { interface Window { diff --git a/src/element/Mention.tsx b/src/element/Mention.tsx index 6ea23ec..20898cc 100644 --- a/src/element/Mention.tsx +++ b/src/element/Mention.tsx @@ -1,8 +1,8 @@ import { useMemo } from "react"; import { Link } from "react-router-dom"; -import useProfile from "../feed/ProfileFeed"; -import { HexKey } from "../nostr"; -import { hexToBech32, profileLink } from "../Util"; +import useProfile from "Feed/ProfileFeed"; +import { HexKey } from "Nostr"; +import { hexToBech32, profileLink } from "Util"; export default function Mention({ pubkey }: { pubkey: HexKey }) { const user = useProfile(pubkey)?.get(pubkey); diff --git a/src/element/Nip05.tsx b/src/element/Nip05.tsx index d3250d2..eef8941 100644 --- a/src/element/Nip05.tsx +++ b/src/element/Nip05.tsx @@ -4,7 +4,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faSpinner, faTriangleExclamation } from "@fortawesome/free-solid-svg-icons"; import './Nip05.css' -import { HexKey } from "../nostr"; +import { HexKey } from "Nostr"; interface NostrJson { names: Record diff --git a/src/element/Nip5Service.tsx b/src/element/Nip5Service.tsx index 670126b..bf0185f 100644 --- a/src/element/Nip5Service.tsx +++ b/src/element/Nip5Service.tsx @@ -9,14 +9,14 @@ import { ServiceErrorCode, HandleRegisterResponse, CheckRegisterResponse -} from "../nip05/ServiceProvider"; -import AsyncButton from "./AsyncButton"; -import LNURLTip from "./LNURLTip"; -import Copy from "./Copy"; -import useProfile from "../feed/ProfileFeed"; -import useEventPublisher from "../feed/EventPublisher"; -import { hexToBech32 } from "../Util"; -import { UserMetadata } from "../nostr"; +} from "Nip05/ServiceProvider"; +import AsyncButton from "Element/AsyncButton"; +import LNURLTip from "Element/LNURLTip"; +import Copy from "Element/Copy"; +import useProfile from "Feed/ProfileFeed"; +import useEventPublisher from "Feed/EventPublisher"; +import { hexToBech32 } from "Util"; +import { UserMetadata } from "Nostr"; type Nip05ServiceProps = { name: string, diff --git a/src/element/Note.tsx b/src/element/Note.tsx index f2e8e07..8d5ba8b 100644 --- a/src/element/Note.tsx +++ b/src/element/Note.tsx @@ -2,15 +2,15 @@ import "./Note.css"; import { useCallback, useMemo } from "react"; import { useNavigate } from "react-router-dom"; -import { default as NEvent } from "../nostr/Event"; -import ProfileImage from "./ProfileImage"; -import Text from "./Text"; -import { eventLink, getReactions, hexToBech32 } from "../Util"; -import NoteFooter from "./NoteFooter"; -import NoteTime from "./NoteTime"; -import EventKind from "../nostr/EventKind"; -import useProfile from "../feed/ProfileFeed"; -import { TaggedRawEvent, u256 } from "../nostr"; +import { default as NEvent } from "Nostr/Event"; +import ProfileImage from "Element/ProfileImage"; +import Text from "Element/Text"; +import { eventLink, getReactions, hexToBech32 } from "Util"; +import NoteFooter from "Element/NoteFooter"; +import NoteTime from "Element/NoteTime"; +import EventKind from "Nostr/EventKind"; +import useProfile from "Feed/ProfileFeed"; +import { TaggedRawEvent, u256 } from "Nostr"; import { useInView } from "react-intersection-observer"; export interface NoteProps { diff --git a/src/element/NoteCreator.tsx b/src/element/NoteCreator.tsx index 442f767..426bfce 100644 --- a/src/element/NoteCreator.tsx +++ b/src/element/NoteCreator.tsx @@ -4,12 +4,12 @@ import { faPaperclip } from "@fortawesome/free-solid-svg-icons"; import "./NoteCreator.css"; -import useEventPublisher from "../feed/EventPublisher"; -import { openFile } from "../Util"; -import VoidUpload from "../feed/VoidUpload"; -import { FileExtensionRegex } from "../Const"; -import Textarea from "../element/Textarea"; -import Event, { default as NEvent } from "../nostr/Event"; +import useEventPublisher from "Feed/EventPublisher"; +import { openFile } from "Util"; +import VoidUpload from "Feed/VoidUpload"; +import { FileExtensionRegex } from "Const"; +import Textarea from "Element/Textarea"; +import Event, { default as NEvent } from "Nostr/Event"; export interface NoteCreatorProps { replyTo?: NEvent, diff --git a/src/element/NoteFooter.tsx b/src/element/NoteFooter.tsx index 6ce401a..728c03e 100644 --- a/src/element/NoteFooter.tsx +++ b/src/element/NoteFooter.tsx @@ -3,16 +3,16 @@ import { useSelector } from "react-redux"; import { faHeart, faReply, faThumbsDown, faTrash, faBolt, faRepeat } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { formatShort } from "../Number"; -import useEventPublisher from "../feed/EventPublisher"; -import { getReactions, normalizeReaction, Reaction } from "../Util"; -import { NoteCreator } from "./NoteCreator"; -import LNURLTip from "./LNURLTip"; -import useProfile from "../feed/ProfileFeed"; -import { default as NEvent } from "../nostr/Event"; -import { RootState } from "../state/Store"; -import { HexKey, TaggedRawEvent } from "../nostr"; -import EventKind from "../nostr/EventKind"; +import { formatShort } from "Number"; +import useEventPublisher from "Feed/EventPublisher"; +import { getReactions, normalizeReaction, Reaction } from "Util"; +import { NoteCreator } from "Element/NoteCreator"; +import LNURLTip from "Element/LNURLTip"; +import useProfile from "Feed/ProfileFeed"; +import { default as NEvent } from "Nostr/Event"; +import { RootState } from "State/Store"; +import { HexKey, TaggedRawEvent } from "Nostr"; +import EventKind from "Nostr/EventKind"; export interface NoteFooterProps { related: TaggedRawEvent[], diff --git a/src/element/NoteGhost.tsx b/src/element/NoteGhost.tsx index 21eeb08..dec46e2 100644 --- a/src/element/NoteGhost.tsx +++ b/src/element/NoteGhost.tsx @@ -1,5 +1,5 @@ import "./Note.css"; -import ProfileImage from "./ProfileImage"; +import ProfileImage from "Element/ProfileImage"; export default function NoteGhost(props: any) { return ( diff --git a/src/element/NoteReaction.tsx b/src/element/NoteReaction.tsx index c199df5..d653509 100644 --- a/src/element/NoteReaction.tsx +++ b/src/element/NoteReaction.tsx @@ -1,13 +1,14 @@ import "./NoteReaction.css"; -import EventKind from "../nostr/EventKind"; -import Note from "./Note"; -import ProfileImage from "./ProfileImage"; -import { default as NEvent } from "../nostr/Event"; -import { eventLink, hexToBech32 } from "../Util"; import { Link } from "react-router-dom"; import { useMemo } from "react"; -import NoteTime from "./NoteTime"; -import { RawEvent, TaggedRawEvent } from "../nostr"; + +import EventKind from "Nostr/EventKind"; +import Note from "Element/Note"; +import ProfileImage from "Element/ProfileImage"; +import { default as NEvent } from "Nostr/Event"; +import { eventLink, hexToBech32 } from "Util"; +import NoteTime from "Element/NoteTime"; +import { RawEvent, TaggedRawEvent } from "Nostr"; export interface NoteReactionProps { data?: TaggedRawEvent, diff --git a/src/element/NoteToSelf.tsx b/src/element/NoteToSelf.tsx index 79d963e..74b893c 100644 --- a/src/element/NoteToSelf.tsx +++ b/src/element/NoteToSelf.tsx @@ -3,9 +3,9 @@ import "./NoteToSelf.css"; import { Link, useNavigate } from "react-router-dom"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faBook, faCertificate } from "@fortawesome/free-solid-svg-icons" -import useProfile from "../feed/ProfileFeed"; -import Nip05 from "./Nip05"; -import { profileLink } from "../Util"; +import useProfile from "Feed/ProfileFeed"; +import Nip05 from "Element/Nip05"; +import { profileLink } from "Util"; export interface NoteToSelfProps { pubkey: string, diff --git a/src/element/ProfileImage.tsx b/src/element/ProfileImage.tsx index 9734b51..661433f 100644 --- a/src/element/ProfileImage.tsx +++ b/src/element/ProfileImage.tsx @@ -2,12 +2,12 @@ import "./ProfileImage.css"; import { useMemo } from "react"; import { Link, useNavigate } from "react-router-dom"; -import useProfile from "../feed/ProfileFeed"; -import { hexToBech32, profileLink } from "../Util"; -import Avatar from "./Avatar" -import Nip05 from "./Nip05"; -import { HexKey } from "../nostr"; -import { MetadataCache } from "../db/User"; +import useProfile from "Feed/ProfileFeed"; +import { hexToBech32, profileLink } from "Util"; +import Avatar from "Element/Avatar" +import Nip05 from "Element/Nip05"; +import { HexKey } from "Nostr"; +import { MetadataCache } from "Db/User"; export interface ProfileImageProps { pubkey: HexKey, diff --git a/src/element/ProfilePreview.tsx b/src/element/ProfilePreview.tsx index a209e87..d00aacd 100644 --- a/src/element/ProfilePreview.tsx +++ b/src/element/ProfilePreview.tsx @@ -1,10 +1,10 @@ import "./ProfilePreview.css"; import { ReactNode } from "react"; -import ProfileImage from "./ProfileImage"; -import FollowButton from "./FollowButton"; -import useProfile from "../feed/ProfileFeed"; -import { HexKey } from "../nostr"; +import ProfileImage from "Element/ProfileImage"; +import FollowButton from "Element/FollowButton"; +import useProfile from "Feed/ProfileFeed"; +import { HexKey } from "Nostr"; import { useInView } from "react-intersection-observer"; export interface ProfilePreviewProps { diff --git a/src/element/Relay.tsx b/src/element/Relay.tsx index d165d01..a133aec 100644 --- a/src/element/Relay.tsx +++ b/src/element/Relay.tsx @@ -1,13 +1,13 @@ import "./Relay.css" import { faPlug, faTrash, faSquareCheck, faSquareXmark, faWifi, faUpload, faDownload, faPlugCircleXmark, faEllipsisVertical } from "@fortawesome/free-solid-svg-icons"; -import useRelayState from "../feed/RelayState"; +import useRelayState from "Feed/RelayState"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useMemo, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { removeRelay, setRelays } from "../state/Login"; -import { RootState } from "../state/Store"; -import { RelaySettings } from "../nostr/Connection"; +import { removeRelay, setRelays } from "State/Login"; +import { RootState } from "State/Store"; +import { RelaySettings } from "Nostr/Connection"; export interface RelayProps { addr: string diff --git a/src/element/Text.tsx b/src/element/Text.tsx index 762143a..9f56e3b 100644 --- a/src/element/Text.tsx +++ b/src/element/Text.tsx @@ -1,17 +1,17 @@ +import './Text.css' +import { useMemo } from "react"; import { Link } from "react-router-dom"; import ReactMarkdown from "react-markdown"; import { TwitterTweetEmbed } from "react-twitter-embed"; -import { UrlRegex, FileExtensionRegex, MentionRegex, InvoiceRegex, YoutubeUrlRegex, TweetUrlRegex, HashtagRegex } from "../Const"; -import { eventLink, hexToBech32 } from "../Util"; -import Invoice from "./Invoice"; -import Hashtag from "./Hashtag"; +import { UrlRegex, FileExtensionRegex, MentionRegex, InvoiceRegex, YoutubeUrlRegex, TweetUrlRegex, HashtagRegex } from "Const"; +import { eventLink, hexToBech32 } from "Util"; +import Invoice from "Element/Invoice"; +import Hashtag from "Element/Hashtag"; -import './Text.css' -import { useMemo } from "react"; -import Tag from "../nostr/Tag"; -import { MetadataCache } from "../db/User"; -import Mention from "./Mention"; +import Tag from "Nostr/Tag"; +import { MetadataCache } from "Db/User"; +import Mention from "Element/Mention"; function transformHttpLink(a: string) { try { diff --git a/src/element/Textarea.tsx b/src/element/Textarea.tsx index 94c783d..99915ae 100644 --- a/src/element/Textarea.tsx +++ b/src/element/Textarea.tsx @@ -7,11 +7,11 @@ import ReactTextareaAutocomplete from "@webscopeio/react-textarea-autocomplete"; import emoji from "@jukben/emoji-search"; import TextareaAutosize from "react-textarea-autosize"; -import Avatar from "./Avatar"; -import Nip05 from "./Nip05"; -import { hexToBech32 } from "../Util"; -import { db } from "../db"; -import { MetadataCache } from "../db/User"; +import Avatar from "Element/Avatar"; +import Nip05 from "Element/Nip05"; +import { hexToBech32 } from "Util"; +import { db } from "Db"; +import { MetadataCache } from "Db/User"; interface EmojiItemProps { name: string diff --git a/src/element/Thread.tsx b/src/element/Thread.tsx index 59b5030..cfaa0b8 100644 --- a/src/element/Thread.tsx +++ b/src/element/Thread.tsx @@ -1,11 +1,11 @@ import { useMemo } from "react"; import { Link } from "react-router-dom"; -import { TaggedRawEvent, u256 } from "../nostr"; -import { default as NEvent } from "../nostr/Event"; -import EventKind from "../nostr/EventKind"; -import { eventLink } from "../Util"; -import Note from "./Note"; -import NoteGhost from "./NoteGhost"; +import { TaggedRawEvent, u256 } from "Nostr"; +import { default as NEvent } from "Nostr/Event"; +import EventKind from "Nostr/EventKind"; +import { eventLink } from "Util"; +import Note from "Element/Note"; +import NoteGhost from "Element/NoteGhost"; export interface ThreadProps { this?: u256, diff --git a/src/element/Timeline.tsx b/src/element/Timeline.tsx index 184dec7..02d4c03 100644 --- a/src/element/Timeline.tsx +++ b/src/element/Timeline.tsx @@ -1,10 +1,10 @@ import { useMemo } from "react"; -import useTimelineFeed, { TimelineSubject } from "../feed/TimelineFeed"; -import { TaggedRawEvent } from "../nostr"; -import EventKind from "../nostr/EventKind"; -import LoadMore from "./LoadMore"; -import Note from "./Note"; -import NoteReaction from "./NoteReaction"; +import useTimelineFeed, { TimelineSubject } from "Feed/TimelineFeed"; +import { TaggedRawEvent } from "Nostr"; +import EventKind from "Nostr/EventKind"; +import LoadMore from "Element/LoadMore"; +import Note from "Element/Note"; +import NoteReaction from "Element/NoteReaction"; export interface TimelineProps { postsOnly: boolean, diff --git a/src/element/ZapButton.tsx b/src/element/ZapButton.tsx index 9271b02..82416d0 100644 --- a/src/element/ZapButton.tsx +++ b/src/element/ZapButton.tsx @@ -2,9 +2,9 @@ import "./ZapButton.css"; import { faBolt } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useState } from "react"; -import useProfile from "../feed/ProfileFeed"; -import { HexKey } from "../nostr"; -import LNURLTip from "./LNURLTip"; +import useProfile from "Feed/ProfileFeed"; +import { HexKey } from "Nostr"; +import LNURLTip from "Element/LNURLTip"; const ZapButton = ({ pubkey }: { pubkey: HexKey }) => { const profile = useProfile(pubkey)?.get(pubkey); diff --git a/src/feed/EventPublisher.ts b/src/feed/EventPublisher.ts index 5f4b4f9..33b4ba7 100644 --- a/src/feed/EventPublisher.ts +++ b/src/feed/EventPublisher.ts @@ -1,12 +1,12 @@ import { useSelector } from "react-redux"; -import { System } from "../nostr/System"; -import { default as NEvent } from "../nostr/Event"; -import EventKind from "../nostr/EventKind"; -import Tag from "../nostr/Tag"; -import { RootState } from "../state/Store"; -import { HexKey, RawEvent, u256, UserMetadata } from "../nostr"; -import { bech32ToHex } from "../Util" -import { HashtagRegex } from "../Const"; +import { System } from "Nostr/System"; +import { default as NEvent } from "Nostr/Event"; +import EventKind from "Nostr/EventKind"; +import Tag from "Nostr/Tag"; +import { RootState } from "State/Store"; +import { HexKey, RawEvent, u256, UserMetadata } from "Nostr"; +import { bech32ToHex } from "Util" +import { HashtagRegex } from "Const"; declare global { interface Window { diff --git a/src/feed/FollowersFeed.ts b/src/feed/FollowersFeed.ts index efd6aa3..7e0f65e 100644 --- a/src/feed/FollowersFeed.ts +++ b/src/feed/FollowersFeed.ts @@ -1,8 +1,8 @@ import { useMemo } from "react"; -import { HexKey } from "../nostr"; -import EventKind from "../nostr/EventKind"; -import { Subscriptions } from "../nostr/Subscriptions"; -import useSubscription from "./Subscription"; +import { HexKey } from "Nostr"; +import EventKind from "Nostr/EventKind"; +import { Subscriptions } from "Nostr/Subscriptions"; +import useSubscription from "Feed/Subscription"; export default function useFollowersFeed(pubkey: HexKey) { const sub = useMemo(() => { diff --git a/src/feed/FollowsFeed.ts b/src/feed/FollowsFeed.ts index 7dd61b5..b1f4c88 100644 --- a/src/feed/FollowsFeed.ts +++ b/src/feed/FollowsFeed.ts @@ -1,9 +1,8 @@ import { useMemo } from "react"; -import { HexKey } from "../nostr"; -import EventKind from "../nostr/EventKind"; -import { Subscriptions} from "../nostr/Subscriptions"; -import useSubscription from "./Subscription"; -import { NoteStore } from "./Subscription" +import { HexKey } from "Nostr"; +import EventKind from "Nostr/EventKind"; +import { Subscriptions} from "Nostr/Subscriptions"; +import useSubscription, { NoteStore } from "Feed/Subscription"; export default function useFollowsFeed(pubkey: HexKey) { const sub = useMemo(() => { diff --git a/src/feed/LoginFeed.ts b/src/feed/LoginFeed.ts index efc60a0..d4c62db 100644 --- a/src/feed/LoginFeed.ts +++ b/src/feed/LoginFeed.ts @@ -1,16 +1,17 @@ -import Nostrich from "../nostrich.jpg"; +import Nostrich from "nostrich.jpg"; import { useEffect, useMemo } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { HexKey, TaggedRawEvent } from "../nostr"; -import EventKind from "../nostr/EventKind"; -import { Subscriptions } from "../nostr/Subscriptions"; -import { addDirectMessage, addNotifications, setFollows, setRelays } from "../state/Login"; -import { RootState } from "../state/Store"; -import { db } from "../db"; -import useSubscription from "./Subscription"; -import { mapEventToProfile, MetadataCache } from "../db/User"; -import { getDisplayName } from "../element/ProfileImage"; -import { MentionRegex } from "../Const"; + +import { HexKey, TaggedRawEvent } from "Nostr"; +import EventKind from "Nostr/EventKind"; +import { Subscriptions } from "Nostr/Subscriptions"; +import { addDirectMessage, addNotifications, setFollows, setRelays } from "State/Login"; +import { RootState } from "State/Store"; +import { db } from "Db"; +import useSubscription from "Feed/Subscription"; +import { mapEventToProfile, MetadataCache } from "Db/User"; +import { getDisplayName } from "Element/ProfileImage"; +import { MentionRegex } from "Const"; /** * Managed loading data for the current logged in user diff --git a/src/feed/ProfileFeed.ts b/src/feed/ProfileFeed.ts index 32548e2..435a592 100644 --- a/src/feed/ProfileFeed.ts +++ b/src/feed/ProfileFeed.ts @@ -1,9 +1,9 @@ import { useLiveQuery } from "dexie-react-hooks"; import { useEffect, useMemo } from "react"; -import { db } from "../db"; -import { MetadataCache } from "../db/User"; -import { HexKey } from "../nostr"; -import { System } from "../nostr/System"; +import { db } from "Db"; +import { MetadataCache } from "Db/User"; +import { HexKey } from "Nostr"; +import { System } from "Nostr/System"; export default function useProfile(pubKey: HexKey | Array | undefined): Map | undefined { const user = useLiveQuery(async () => { diff --git a/src/feed/RelayState.ts b/src/feed/RelayState.ts index c1253e9..2c78311 100644 --- a/src/feed/RelayState.ts +++ b/src/feed/RelayState.ts @@ -1,6 +1,6 @@ import { useSyncExternalStore } from "react"; -import { System } from "../nostr/System"; -import { CustomHook, StateSnapshot } from "../nostr/Connection"; +import { System } from "Nostr/System"; +import { CustomHook, StateSnapshot } from "Nostr/Connection"; const noop = (f: CustomHook) => { return () => { }; }; const noopState = (): StateSnapshot | undefined => { diff --git a/src/feed/Subscription.ts b/src/feed/Subscription.ts index 5926cd5..0d5d77d 100644 --- a/src/feed/Subscription.ts +++ b/src/feed/Subscription.ts @@ -1,7 +1,7 @@ import { useEffect, useMemo, useReducer, useState } from "react"; -import { System } from "../nostr/System"; -import { TaggedRawEvent } from "../nostr"; -import { Subscriptions } from "../nostr/Subscriptions"; +import { System } from "Nostr/System"; +import { TaggedRawEvent } from "Nostr"; +import { Subscriptions } from "Nostr/Subscriptions"; export type NoteStore = { notes: Array, diff --git a/src/feed/ThreadFeed.ts b/src/feed/ThreadFeed.ts index 7f99066..3fadc96 100644 --- a/src/feed/ThreadFeed.ts +++ b/src/feed/ThreadFeed.ts @@ -1,8 +1,8 @@ import { useEffect, useMemo, useState } from "react"; -import { u256 } from "../nostr"; -import EventKind from "../nostr/EventKind"; -import { Subscriptions } from "../nostr/Subscriptions"; -import useSubscription from "./Subscription"; +import { u256 } from "Nostr"; +import EventKind from "Nostr/EventKind"; +import { Subscriptions } from "Nostr/Subscriptions"; +import useSubscription from "Feed/Subscription"; export default function useThreadFeed(id: u256) { const [trackingEvents, setTrackingEvent] = useState([id]); diff --git a/src/feed/TimelineFeed.ts b/src/feed/TimelineFeed.ts index bc6cd82..e97f7bd 100644 --- a/src/feed/TimelineFeed.ts +++ b/src/feed/TimelineFeed.ts @@ -1,9 +1,9 @@ import { useEffect, useMemo, useState } from "react"; -import { u256 } from "../nostr"; -import EventKind from "../nostr/EventKind"; -import { Subscriptions } from "../nostr/Subscriptions"; -import { unixNow } from "../Util"; -import useSubscription from "./Subscription"; +import { u256 } from "Nostr"; +import EventKind from "Nostr/EventKind"; +import { Subscriptions } from "Nostr/Subscriptions"; +import { unixNow } from "Util"; +import useSubscription from "Feed/Subscription"; export interface TimelineFeedOptions { method: "TIME_RANGE" | "LIMIT_UNTIL" diff --git a/src/index.tsx b/src/index.tsx index 32d73d0..2ae7f46 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -10,22 +10,22 @@ import { } from "react-router-dom"; // @ts-expect-error -import * as serviceWorkerRegistration from './serviceWorkerRegistration'; -import EventPage from './pages/EventPage'; -import Layout from './pages/Layout'; -import LoginPage from './pages/Login'; -import ProfilePage from './pages/ProfilePage'; -import RootPage from './pages/Root'; -import Store from "./state/Store"; -import NotificationsPage from './pages/Notifications'; -import NewUserPage from './pages/NewUserPage'; -import SettingsPage from './pages/SettingsPage'; -import ErrorPage from './pages/ErrorPage'; -import VerificationPage from './pages/Verification'; -import MessagesPage from './pages/MessagesPage'; -import ChatPage from './pages/ChatPage'; -import DonatePage from './pages/DonatePage'; -import HashTagsPage from './pages/HashTagsPage'; +import * as serviceWorkerRegistration from 'serviceWorkerRegistration'; +import Store from "State/Store"; +import EventPage from 'Pages/EventPage'; +import Layout from 'Pages/Layout'; +import LoginPage from 'Pages/Login'; +import ProfilePage from 'Pages/ProfilePage'; +import RootPage from 'Pages/Root'; +import NotificationsPage from 'Pages/Notifications'; +import NewUserPage from 'Pages/NewUserPage'; +import SettingsPage from 'Pages/SettingsPage'; +import ErrorPage from 'Pages/ErrorPage'; +import VerificationPage from 'Pages/Verification'; +import MessagesPage from 'Pages/MessagesPage'; +import ChatPage from 'Pages/ChatPage'; +import DonatePage from 'Pages/DonatePage'; +import HashTagsPage from 'Pages/HashTagsPage'; /** * HTTP query provider diff --git a/src/nostr/Connection.ts b/src/nostr/Connection.ts index 30bbb7c..680eb64 100644 --- a/src/nostr/Connection.ts +++ b/src/nostr/Connection.ts @@ -1,11 +1,11 @@ import * as secp from "@noble/secp256k1"; import { v4 as uuid } from "uuid"; -import { Subscriptions } from "./Subscriptions"; -import { default as NEvent } from "./Event"; -import { DefaultConnectTimeout } from "../Const"; -import { ConnectionStats } from "./ConnectionStats"; -import { RawEvent, TaggedRawEvent } from "."; +import { Subscriptions } from "Nostr/Subscriptions"; +import { default as NEvent } from "Nostr/Event"; +import { DefaultConnectTimeout } from "Const"; +import { ConnectionStats } from "Nostr/ConnectionStats"; +import { RawEvent, TaggedRawEvent } from "Nostr"; export type CustomHook = (state: Readonly) => void; diff --git a/src/nostr/Event.ts b/src/nostr/Event.ts index 1620919..baf7aa3 100644 --- a/src/nostr/Event.ts +++ b/src/nostr/Event.ts @@ -1,9 +1,9 @@ import * as secp from '@noble/secp256k1'; import * as base64 from "@protobufjs/base64" -import { HexKey, RawEvent, TaggedRawEvent } from '.'; -import EventKind from "./EventKind"; -import Tag from './Tag'; -import Thread from './Thread'; +import { HexKey, RawEvent, TaggedRawEvent } from 'Nostr'; +import EventKind from "Nostr/EventKind"; +import Tag from 'Nostr/Tag'; +import Thread from 'Nostr/Thread'; export default class Event { /** diff --git a/src/nostr/Subscriptions.ts b/src/nostr/Subscriptions.ts index 676886c..b9af235 100644 --- a/src/nostr/Subscriptions.ts +++ b/src/nostr/Subscriptions.ts @@ -1,7 +1,7 @@ import { v4 as uuid } from "uuid"; -import { TaggedRawEvent, RawReqFilter, u256 } from "."; -import Connection from "./Connection"; -import EventKind from "./EventKind"; +import { TaggedRawEvent, RawReqFilter, u256 } from "Nostr"; +import Connection from "Nostr/Connection"; +import EventKind from "Nostr/EventKind"; export type NEventHandler = (e: TaggedRawEvent) => void; export type OnEndHandler = (c: Connection) => void; diff --git a/src/nostr/System.ts b/src/nostr/System.ts index e10848a..8cfda4a 100644 --- a/src/nostr/System.ts +++ b/src/nostr/System.ts @@ -1,11 +1,11 @@ -import { HexKey, TaggedRawEvent } from "."; -import { ProfileCacheExpire } from "../Const"; -import { db } from "../db"; -import { mapEventToProfile, MetadataCache } from "../db/User"; -import Connection, { RelaySettings } from "./Connection"; -import Event from "./Event"; -import EventKind from "./EventKind"; -import { Subscriptions } from "./Subscriptions"; +import { HexKey, TaggedRawEvent } from "Nostr"; +import { ProfileCacheExpire } from "Const"; +import { db } from "Db"; +import { mapEventToProfile, MetadataCache } from "Db/User"; +import Connection, { RelaySettings } from "Nostr/Connection"; +import Event from "Nostr/Event"; +import EventKind from "Nostr/EventKind"; +import { Subscriptions } from "Nostr/Subscriptions"; /** * Manages nostr content retrival system diff --git a/src/nostr/Tag.ts b/src/nostr/Tag.ts index 33e0041..e10af86 100644 --- a/src/nostr/Tag.ts +++ b/src/nostr/Tag.ts @@ -1,4 +1,4 @@ -import { HexKey, RawReqFilter, u256 } from "."; +import { HexKey, u256 } from "Nostr"; export default class Tag { Original: string[]; diff --git a/src/nostr/Thread.ts b/src/nostr/Thread.ts index 36e6f1b..6286744 100644 --- a/src/nostr/Thread.ts +++ b/src/nostr/Thread.ts @@ -1,7 +1,7 @@ -import { u256 } from "."; -import { default as NEvent } from "./Event"; -import EventKind from "./EventKind"; -import Tag from "./Tag"; +import { u256 } from "Nostr"; +import { default as NEvent } from "Nostr/Event"; +import EventKind from "Nostr/EventKind"; +import Tag from "Nostr/Tag"; export default class Thread { Root?: Tag; diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index 4e13600..f67bdc7 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -4,14 +4,14 @@ import { useSelector } from "react-redux"; import { useParams } from "react-router-dom"; import { useInView } from 'react-intersection-observer'; -import ProfileImage from "../element/ProfileImage"; -import { bech32ToHex } from "../Util"; -import useEventPublisher from "../feed/EventPublisher"; +import ProfileImage from "Element/ProfileImage"; +import { bech32ToHex } from "Util"; +import useEventPublisher from "Feed/EventPublisher"; -import DM from "../element/DM"; -import { RawEvent } from "../nostr"; -import { dmsInChat, isToSelf } from "./MessagesPage"; -import NoteToSelf from "../element/NoteToSelf"; +import DM from "Element/DM"; +import { RawEvent } from "Nostr"; +import { dmsInChat, isToSelf } from "Pages/MessagesPage"; +import NoteToSelf from "Element/NoteToSelf"; type RouterParams = { id: string diff --git a/src/pages/DonatePage.tsx b/src/pages/DonatePage.tsx index 9d940ac..516afd8 100644 --- a/src/pages/DonatePage.tsx +++ b/src/pages/DonatePage.tsx @@ -1,6 +1,5 @@ -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import ProfilePreview from "../element/ProfilePreview"; -import ZapButton from "../element/ZapButton"; +import ProfilePreview from "Element/ProfilePreview"; +import ZapButton from "Element/ZapButton"; const Developers = [ "63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed", // kieran diff --git a/src/pages/EventPage.tsx b/src/pages/EventPage.tsx index e9f979c..5f17dd1 100644 --- a/src/pages/EventPage.tsx +++ b/src/pages/EventPage.tsx @@ -1,7 +1,7 @@ import { useParams } from "react-router-dom"; -import Thread from "../element/Thread"; -import useThreadFeed from "../feed/ThreadFeed"; -import { parseId } from "../Util"; +import Thread from "Element/Thread"; +import useThreadFeed from "Feed/ThreadFeed"; +import { parseId } from "Util"; export default function EventPage() { const params = useParams(); diff --git a/src/pages/HashTagsPage.tsx b/src/pages/HashTagsPage.tsx index c1aabf5..4390c60 100644 --- a/src/pages/HashTagsPage.tsx +++ b/src/pages/HashTagsPage.tsx @@ -1,5 +1,5 @@ import { useParams } from "react-router-dom"; -import Timeline from "../element/Timeline"; +import Timeline from "Element/Timeline"; const HashTagsPage = () => { const params = useParams(); diff --git a/src/pages/Layout.tsx b/src/pages/Layout.tsx index f42531d..9129a2d 100644 --- a/src/pages/Layout.tsx +++ b/src/pages/Layout.tsx @@ -5,14 +5,14 @@ import { Outlet, useNavigate } from "react-router-dom"; import { faBell, faMessage } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { System } from "../nostr/System" -import ProfileImage from "../element/ProfileImage"; -import { init } from "../state/Login"; -import useLoginFeed from "../feed/LoginFeed"; -import { RootState } from "../state/Store"; -import { HexKey, RawEvent, TaggedRawEvent } from "../nostr"; -import { RelaySettings } from "../nostr/Connection"; -import { totalUnread } from "./MessagesPage"; +import { RootState } from "State/Store"; +import { init } from "State/Login"; +import { HexKey, RawEvent, TaggedRawEvent } from "Nostr"; +import { RelaySettings } from "Nostr/Connection"; +import { System } from "Nostr/System" +import ProfileImage from "Element/ProfileImage"; +import useLoginFeed from "Feed/LoginFeed"; +import { totalUnread } from "Pages/MessagesPage"; export default function Layout() { const dispatch = useDispatch(); diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx index c0653e8..cf117b8 100644 --- a/src/pages/Login.tsx +++ b/src/pages/Login.tsx @@ -3,11 +3,11 @@ import { useDispatch, useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; import * as secp from '@noble/secp256k1'; -import { setPrivateKey, setPublicKey } from "../state/Login"; -import { EmailRegex } from "../Const"; -import { bech32ToHex } from "../Util"; -import { RootState } from "../state/Store"; -import { HexKey } from "../nostr"; +import { RootState } from "State/Store"; +import { setPrivateKey, setPublicKey } from "State/Login"; +import { EmailRegex } from "Const"; +import { bech32ToHex } from "Util"; +import { HexKey } from "Nostr"; export default function LoginPage() { const dispatch = useDispatch(); diff --git a/src/pages/MessagesPage.tsx b/src/pages/MessagesPage.tsx index a2fcf2e..8a24f67 100644 --- a/src/pages/MessagesPage.tsx +++ b/src/pages/MessagesPage.tsx @@ -1,13 +1,13 @@ import { useMemo } from "react"; import { useDispatch, useSelector } from "react-redux" -import { HexKey, RawEvent } from "../nostr"; -import UnreadCount from "../element/UnreadCount"; -import ProfileImage from "../element/ProfileImage"; +import { HexKey, RawEvent } from "Nostr"; +import UnreadCount from "Element/UnreadCount"; +import ProfileImage from "Element/ProfileImage"; import { hexToBech32 } from "../Util"; -import { incDmInteraction } from "../state/Login"; -import { RootState } from "../state/Store"; -import NoteToSelf from "../element/NoteToSelf"; +import { incDmInteraction } from "State/Login"; +import { RootState } from "State/Store"; +import NoteToSelf from "Element/NoteToSelf"; type DmChat = { pubkey: HexKey, diff --git a/src/pages/NewUserPage.tsx b/src/pages/NewUserPage.tsx index 17b721a..1017f68 100644 --- a/src/pages/NewUserPage.tsx +++ b/src/pages/NewUserPage.tsx @@ -1,5 +1,5 @@ -import { RecommendedFollows } from "../Const"; -import ProfilePreview from "../element/ProfilePreview"; +import { RecommendedFollows } from "Const"; +import ProfilePreview from "Element/ProfilePreview"; export default function NewUserPage() { diff --git a/src/pages/Notifications.tsx b/src/pages/Notifications.tsx index 1586e79..703935f 100644 --- a/src/pages/Notifications.tsx +++ b/src/pages/Notifications.tsx @@ -1,14 +1,14 @@ import { useEffect, useMemo } from "react"; import { useDispatch, useSelector } from "react-redux" -import Note from "../element/Note"; -import NoteReaction from "../element/NoteReaction"; -import useSubscription from "../feed/Subscription"; -import { TaggedRawEvent } from "../nostr"; -import Event from "../nostr/Event"; -import EventKind from "../nostr/EventKind"; -import { Subscriptions } from "../nostr/Subscriptions"; -import { markNotificationsRead } from "../state/Login"; -import { RootState } from "../state/Store"; +import Note from "Element/Note"; +import NoteReaction from "Element/NoteReaction"; +import useSubscription from "Feed/Subscription"; +import { TaggedRawEvent } from "Nostr"; +import Event from "Nostr/Event"; +import EventKind from "Nostr/EventKind"; +import { Subscriptions } from "Nostr/Subscriptions"; +import { markNotificationsRead } from "State/Login"; +import { RootState } from "State/Store"; export default function NotificationsPage() { const dispatch = useDispatch(); diff --git a/src/pages/ProfilePage.tsx b/src/pages/ProfilePage.tsx index d697d63..8ad0e74 100644 --- a/src/pages/ProfilePage.tsx +++ b/src/pages/ProfilePage.tsx @@ -6,21 +6,21 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faGear, faEnvelope } from "@fortawesome/free-solid-svg-icons"; import { useNavigate, useParams } from "react-router-dom"; -import useProfile from "../feed/ProfileFeed"; -import FollowButton from "../element/FollowButton"; -import { extractLnAddress, parseId, hexToBech32 } from "../Util"; -import Avatar from "../element/Avatar"; -import Timeline from "../element/Timeline"; -import Text from '../element/Text' -import LNURLTip from "../element/LNURLTip"; -import Nip05 from "../element/Nip05"; -import Copy from "../element/Copy"; -import ProfilePreview from "../element/ProfilePreview"; -import FollowersList from "../element/FollowersList"; -import FollowsList from "../element/FollowsList"; -import { RootState } from "../state/Store"; -import { HexKey } from "../nostr"; -import FollowsYou from "../element/FollowsYou" +import useProfile from "Feed/ProfileFeed"; +import FollowButton from "Element/FollowButton"; +import { extractLnAddress, parseId, hexToBech32 } from "Util"; +import Avatar from "Element/Avatar"; +import Timeline from "Element/Timeline"; +import Text from 'Element/Text' +import LNURLTip from "Element/LNURLTip"; +import Nip05 from "Element/Nip05"; +import Copy from "Element/Copy"; +import ProfilePreview from "Element/ProfilePreview"; +import FollowersList from "Element/FollowersList"; +import FollowsList from "Element/FollowsList"; +import { RootState } from "State/Store"; +import { HexKey } from "Nostr"; +import FollowsYou from "Element/FollowsYou" enum ProfileTab { Notes = "Notes", diff --git a/src/pages/Root.tsx b/src/pages/Root.tsx index d5f8a12..7538334 100644 --- a/src/pages/Root.tsx +++ b/src/pages/Root.tsx @@ -1,12 +1,13 @@ import "./Root.css"; +import { useState } from "react"; import { useSelector } from "react-redux"; import { Link } from "react-router-dom"; -import { NoteCreator } from "../element/NoteCreator"; -import Timeline from "../element/Timeline"; -import { useState } from "react"; -import { RootState } from "../state/Store"; -import { HexKey } from "../nostr"; -import { TimelineSubject } from "../feed/TimelineFeed"; + +import { RootState } from "State/Store"; +import { NoteCreator } from "Element/NoteCreator"; +import Timeline from "Element/Timeline"; +import { HexKey } from "Nostr"; +import { TimelineSubject } from "Feed/TimelineFeed"; const RootTab = { Posts: 0, diff --git a/src/pages/SettingsPage.tsx b/src/pages/SettingsPage.tsx index 3c8c80a..5202445 100644 --- a/src/pages/SettingsPage.tsx +++ b/src/pages/SettingsPage.tsx @@ -1,5 +1,5 @@ import "./SettingsPage.css"; -import Nostrich from "../nostrich.jpg"; +import Nostrich from "nostrich.jpg"; import { useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; @@ -7,17 +7,17 @@ import { useNavigate } from "react-router-dom"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faShop } from "@fortawesome/free-solid-svg-icons"; -import useEventPublisher from "../feed/EventPublisher"; -import useProfile from "../feed/ProfileFeed"; -import VoidUpload from "../feed/VoidUpload"; -import { logout, setRelays } from "../state/Login"; -import { hexToBech32, openFile } from "../Util"; -import Relay from "../element/Relay"; -import Copy from "../element/Copy"; -import { RootState } from "../state/Store"; -import { HexKey, UserMetadata } from "../nostr"; -import { RelaySettings } from "../nostr/Connection"; -import { MetadataCache } from "../db/User"; +import { RootState } from "State/Store"; +import { logout, setRelays } from "State/Login"; +import useEventPublisher from "Feed/EventPublisher"; +import useProfile from "Feed/ProfileFeed"; +import VoidUpload from "Feed/VoidUpload"; +import { hexToBech32, openFile } from "Util"; +import Relay from "Element/Relay"; +import Copy from "Element/Copy"; +import { HexKey, UserMetadata } from "Nostr"; +import { RelaySettings } from "Nostr/Connection"; +import { MetadataCache } from "Db/User"; export default function SettingsPage() { const navigate = useNavigate(); diff --git a/src/pages/Verification.tsx b/src/pages/Verification.tsx index f61575c..5620454 100644 --- a/src/pages/Verification.tsx +++ b/src/pages/Verification.tsx @@ -1,4 +1,4 @@ -import Nip5Service from "../element/Nip5Service"; +import Nip5Service from "Element/Nip5Service"; import './Verification.css' diff --git a/src/pages/settings/ProfileSettings.tsx b/src/pages/settings/ProfileSettings.tsx new file mode 100644 index 0000000..0fa5d5a --- /dev/null +++ b/src/pages/settings/ProfileSettings.tsx @@ -0,0 +1,240 @@ +import "./SettingsPage.css"; +import Nostrich from "nostrich.jpg"; + +import { useEffect, useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import { useNavigate } from "react-router-dom"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faShop } from "@fortawesome/free-solid-svg-icons"; + +import useEventPublisher from "Feed/EventPublisher"; +import useProfile from "Feed/ProfileFeed"; +import VoidUpload from "Feed/VoidUpload"; +import { logout, setRelays } from "State/Login"; +import { hexToBech32, openFile } from "Util"; +import Relay from "Element/Relay"; +import Copy from "Element/Copy"; +import { RootState } from "State/Store"; +import { HexKey, UserMetadata } from "Nostr"; +import { RelaySettings } from "Nostr/Connection"; +import { MetadataCache } from "Db/User"; + +export default function SettingsPage() { + const navigate = useNavigate(); + const id = useSelector(s => s.login.publicKey); + const privKey = useSelector(s => s.login.privateKey); + const relays = useSelector>(s => s.login.relays); + const dispatch = useDispatch(); + const user = useProfile(id)?.get(id || ""); + const publisher = useEventPublisher(); + + const [name, setName] = useState(); + const [displayName, setDisplayName] = useState(); + const [picture, setPicture] = useState(); + const [banner, setBanner] = useState(); + const [about, setAbout] = useState(); + const [website, setWebsite] = useState(); + const [nip05, setNip05] = useState(); + const [lud06, setLud06] = useState(); + const [lud16, setLud16] = useState(); + const [newRelay, setNewRelay] = useState(); + + const avatarPicture = (picture?.length ?? 0) === 0 ? Nostrich : picture + + useEffect(() => { + if (user) { + setName(user.name); + setDisplayName(user.display_name) + setPicture(user.picture); + setBanner(user.banner); + setAbout(user.about); + setWebsite(user.website); + setNip05(user.nip05); + setLud06(user.lud06); + setLud16(user.lud16); + } + }, [user]); + + async function saveProfile() { + // copy user object and delete internal fields + let userCopy = { + ...user, + name, + display_name: displayName, + about, + picture, + banner, + website, + nip05, + lud16 + }; + delete userCopy["loaded"]; + delete userCopy["created"]; + delete userCopy["pubkey"]; + console.debug(userCopy); + + let ev = await publisher.metadata(userCopy); + console.debug(ev); + publisher.broadcast(ev); + } + + async function uploadFile() { + let file = await openFile(); + if (file) { + console.log(file); + let rsp = await VoidUpload(file, file.name); + if (!rsp?.ok) { + throw "Upload failed, please try again later"; + } + return rsp.file; + } + } + + async function setNewAvatar() { + const rsp = await uploadFile(); + if (rsp) { + setPicture(rsp.meta?.url ?? `https://void.cat/d/${rsp.id}`); + } + } + + async function setNewBanner() { + const rsp = await uploadFile(); + if (rsp) { + setBanner(rsp.meta?.url ?? `https://void.cat/d/${rsp.id}`); + } + } + + async function saveRelays() { + let ev = await publisher.saveRelays(); + publisher.broadcast(ev); + } + + function editor() { + return ( +
+
+
Name:
+
+ setName(e.target.value)} /> +
+
+
+
Display name:
+
+ setDisplayName(e.target.value)} /> +
+
+
+
About:
+
+ +
+
+
+
Website:
+
+ setWebsite(e.target.value)} /> +
+
+
+
NIP-05:
+
+ setNip05(e.target.value)} /> +
navigate("/verification")}> + +   + Buy +
+
+
+
+
LN Address:
+
+ setLud16(e.target.value)} /> +
+
+
+
+
{ dispatch(logout()); navigate("/"); }}>Logout
+
+
+
saveProfile()}>Save
+
+
+
+ ) + } + + function addNewRelay() { + if ((newRelay?.length ?? 0) > 0) { + const parsed = new URL(newRelay!); + const payload = { + relays: { + ...relays, + [parsed.toString()]: { read: false, write: false } + }, + createdAt: Math.floor(new Date().getTime() / 1000) + }; + dispatch(setRelays(payload)) + } + } + + function addRelay() { + return ( + <> +

Add Relays

+
+ setNewRelay(e.target.value)} /> +
+
addNewRelay()}>Add
+ + ) + } + + function settings() { + if (!id) return null; + return ( + <> +

Settings

+
+
+

Avatar

+
+
setNewAvatar()}>Edit
+
+
+
+

Header

+
+
setNewBanner()}>Edit
+
+
+
+ {editor()} + + ) + } + + return ( +
+ {settings()} + {privKey && (
+
+

Private Key:

+
+
+ +
+
)} +

Relays

+
+ {Object.keys(relays || {}).map(a => )} +
+
+
+
saveRelays()}>Save
+
+ {addRelay()} +
+ ); +} diff --git a/src/state/Login.ts b/src/state/Login.ts index ef286e0..7365c80 100644 --- a/src/state/Login.ts +++ b/src/state/Login.ts @@ -1,8 +1,8 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' import * as secp from '@noble/secp256k1'; -import { DefaultRelays } from '../Const'; -import { HexKey, RawEvent, TaggedRawEvent } from '../nostr'; -import { RelaySettings } from '../nostr/Connection'; +import { DefaultRelays } from 'Const'; +import { HexKey, RawEvent, TaggedRawEvent } from 'Nostr'; +import { RelaySettings } from 'Nostr/Connection'; const PrivateKeyItem = "secret"; const PublicKeyItem = "pubkey"; diff --git a/src/state/Store.ts b/src/state/Store.ts index af5fe6e..1c99761 100644 --- a/src/state/Store.ts +++ b/src/state/Store.ts @@ -1,5 +1,5 @@ import { configureStore } from "@reduxjs/toolkit"; -import { reducer as LoginReducer } from "./Login"; +import { reducer as LoginReducer } from "State/Login"; const store = configureStore({ reducer: { diff --git a/tsconfig.json b/tsconfig.json index 973f6a2..9e16265 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "baseUrl": "src", "target": "es6", "jsx": "react-jsx", "moduleResolution": "node",