From 71f7f728fdf7914b64405ed92ce80bb362c04f4c Mon Sep 17 00:00:00 2001 From: Kieran Date: Thu, 21 Sep 2023 21:02:59 +0100 Subject: [PATCH] Various --- packages/app/package.json | 2 - packages/app/src/Cache/GiftWrapCache.ts | 4 +- packages/app/src/Element/BadgeList.tsx | 2 +- packages/app/src/Element/DM.tsx | 2 +- packages/app/src/Element/Deck/Articles.tsx | 2 +- packages/app/src/Element/FollowButton.tsx | 2 +- packages/app/src/Element/FollowListBase.tsx | 17 +- packages/app/src/Element/LogoutButton.tsx | 6 +- packages/app/src/Element/Modal.css | 1 + packages/app/src/Element/Modal.tsx | 23 +- packages/app/src/Element/Nip5Service.tsx | 2 +- packages/app/src/Element/Note.tsx | 2 +- packages/app/src/Element/NoteContextMenu.tsx | 24 +- packages/app/src/Element/NoteCreator.tsx | 492 ++++++++---------- packages/app/src/Element/NoteFooter.tsx | 27 +- packages/app/src/Element/PinPrompt.css | 7 + packages/app/src/Element/PinPrompt.tsx | 121 +++++ packages/app/src/Element/Poll.tsx | 2 +- packages/app/src/Element/PubkeyList.tsx | 2 +- packages/app/src/Element/ReBroadcaster.tsx | 69 +-- packages/app/src/Element/Reactions.tsx | 2 +- packages/app/src/Element/SendSats.tsx | 4 +- packages/app/src/Element/SpotlightMedia.tsx | 2 +- packages/app/src/Element/TimelineFollows.tsx | 2 +- packages/app/src/Element/TrendingPosts.tsx | 2 +- packages/app/src/Element/WriteMessage.tsx | 2 +- packages/app/src/Feed/EventPublisher.ts | 10 - packages/app/src/Feed/LoginFeed.ts | 6 +- .../Feed/{FeedReactions.ts => Reactions.ts} | 9 +- packages/app/src/Feed/ThreadFeed.ts | 10 +- packages/app/src/Hooks/useEventPublisher.tsx | 21 + packages/app/src/Hooks/useLoginHandler.tsx | 15 +- packages/app/src/Hooks/useModeration.tsx | 2 +- .../app/src/Hooks/useRefreshFeedcache.tsx | 9 +- packages/app/src/Login/Functions.ts | 51 +- packages/app/src/Login/LoginSession.ts | 18 +- packages/app/src/Login/MultiAccountStore.ts | 154 +++--- packages/app/src/Login/index.ts | 1 + packages/app/src/Pages/DeckLayout.tsx | 2 +- packages/app/src/Pages/HashTagsPage.tsx | 2 +- packages/app/src/Pages/Layout.tsx | 73 +-- packages/app/src/Pages/LoginPage.tsx | 38 +- packages/app/src/Pages/MessagesPage.tsx | 2 +- packages/app/src/Pages/ProfilePage.tsx | 18 +- packages/app/src/Pages/new/ProfileSetup.tsx | 2 +- packages/app/src/Pages/settings/Profile.tsx | 2 +- packages/app/src/Pages/settings/Relays.tsx | 2 +- packages/app/src/Pages/settings/Root.tsx | 3 +- .../src/Pages/settings/handle/LNAddress.tsx | 2 +- .../src/Pages/settings/handle/ListHandles.tsx | 2 +- .../Pages/settings/handle/TransferHandle.tsx | 2 +- .../Pages/subscribe/ManageSubscription.tsx | 2 +- .../src/Pages/subscribe/SubscriptionCard.tsx | 2 +- packages/app/src/Pages/subscribe/index.tsx | 2 +- packages/app/src/State/NoteCreator.ts | 91 ---- packages/app/src/State/NoteCreator.tsx | 80 +++ packages/app/src/State/ReBroadcast.ts | 34 -- packages/app/src/State/Store.ts | 15 - packages/app/src/index.tsx | 14 +- packages/shared/src/external-store.ts | 6 +- packages/system/src/encrypted.ts | 70 +++ packages/system/src/event-publisher.ts | 5 +- packages/system/src/impl/nip44.ts | 1 - packages/system/src/index.ts | 1 + packages/system/src/nostr-system.ts | 2 +- packages/system/src/query.ts | 2 +- packages/system/src/request-builder.ts | 2 +- packages/system/src/request-trim.ts | 15 +- yarn.lock | 104 +--- 69 files changed, 863 insertions(+), 864 deletions(-) create mode 100644 packages/app/src/Element/PinPrompt.css create mode 100644 packages/app/src/Element/PinPrompt.tsx delete mode 100644 packages/app/src/Feed/EventPublisher.ts rename packages/app/src/Feed/{FeedReactions.ts => Reactions.ts} (64%) create mode 100644 packages/app/src/Hooks/useEventPublisher.tsx delete mode 100644 packages/app/src/State/NoteCreator.ts create mode 100644 packages/app/src/State/NoteCreator.tsx delete mode 100644 packages/app/src/State/ReBroadcast.ts delete mode 100644 packages/app/src/State/Store.ts create mode 100644 packages/system/src/encrypted.ts diff --git a/packages/app/package.json b/packages/app/package.json index c83e6437..2f4e9dca 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -6,7 +6,6 @@ "@lightninglabs/lnc-web": "^0.2.3-alpha", "@noble/curves": "^1.0.0", "@noble/hashes": "^1.2.0", - "@reduxjs/toolkit": "^1.9.1", "@scure/base": "^1.1.1", "@scure/bip32": "^1.3.0", "@scure/bip39": "^1.1.1", @@ -27,7 +26,6 @@ "react-dom": "^18.2.0", "react-intersection-observer": "^9.4.1", "react-intl": "^6.4.4", - "react-redux": "^8.0.5", "react-router-dom": "^6.5.0", "react-textarea-autosize": "^8.4.0", "react-twitter-embed": "^4.0.4", diff --git a/packages/app/src/Cache/GiftWrapCache.ts b/packages/app/src/Cache/GiftWrapCache.ts index 67f00b91..f1f6fde0 100644 --- a/packages/app/src/Cache/GiftWrapCache.ts +++ b/packages/app/src/Cache/GiftWrapCache.ts @@ -2,7 +2,7 @@ import { EventKind, EventPublisher, RequestBuilder, TaggedNostrEvent } from "@sn import { UnwrappedGift, db } from "Db"; import { findTag, unwrap } from "SnortUtils"; import { RefreshFeedCache } from "./RefreshFeedCache"; -import { LoginSession } from "Login"; +import { LoginSession, LoginSessionType } from "Login"; export class GiftWrapCache extends RefreshFeedCache { constructor() { @@ -15,7 +15,7 @@ export class GiftWrapCache extends RefreshFeedCache { buildSub(session: LoginSession, rb: RequestBuilder): void { const pubkey = session.publicKey; - if (pubkey) { + if (pubkey && session.type === LoginSessionType.PrivateKey) { rb.withFilter().kinds([EventKind.GiftWrap]).tag("p", [pubkey]).since(this.newest()); } } diff --git a/packages/app/src/Element/BadgeList.tsx b/packages/app/src/Element/BadgeList.tsx index 06cbb319..062ff55b 100644 --- a/packages/app/src/Element/BadgeList.tsx +++ b/packages/app/src/Element/BadgeList.tsx @@ -35,7 +35,7 @@ export default function BadgeList({ badges }: { badges: TaggedNostrEvent[] }) { ))} {showModal && ( - setShowModal(false)}> + setShowModal(false)}>
setShowModal(false)}> diff --git a/packages/app/src/Element/DM.tsx b/packages/app/src/Element/DM.tsx index b9a4c5e7..13ce1bf0 100644 --- a/packages/app/src/Element/DM.tsx +++ b/packages/app/src/Element/DM.tsx @@ -3,7 +3,7 @@ import { useEffect, useState } from "react"; import { FormattedMessage, useIntl } from "react-intl"; import { useInView } from "react-intersection-observer"; -import useEventPublisher from "Feed/EventPublisher"; +import useEventPublisher from "Hooks/useEventPublisher"; import NoteTime from "Element/NoteTime"; import Text from "Element/Text"; import useLogin from "Hooks/useLogin"; diff --git a/packages/app/src/Element/Deck/Articles.tsx b/packages/app/src/Element/Deck/Articles.tsx index 10efb1bc..b63c7498 100644 --- a/packages/app/src/Element/Deck/Articles.tsx +++ b/packages/app/src/Element/Deck/Articles.tsx @@ -2,7 +2,7 @@ import { NostrLink } from "@snort/system"; import { useArticles } from "Feed/ArticlesFeed"; import { orderDescending } from "SnortUtils"; import Note from "../Note"; -import { useReactions } from "Feed/FeedReactions"; +import { useReactions } from "Feed/Reactions"; export default function Articles() { const data = useArticles(); diff --git a/packages/app/src/Element/FollowButton.tsx b/packages/app/src/Element/FollowButton.tsx index c2cb0e54..b47f1445 100644 --- a/packages/app/src/Element/FollowButton.tsx +++ b/packages/app/src/Element/FollowButton.tsx @@ -2,7 +2,7 @@ import "./FollowButton.css"; import { FormattedMessage } from "react-intl"; import { HexKey } from "@snort/system"; -import useEventPublisher from "Feed/EventPublisher"; +import useEventPublisher from "Hooks/useEventPublisher"; import { parseId } from "SnortUtils"; import useLogin from "Hooks/useLogin"; import AsyncButton from "Element/AsyncButton"; diff --git a/packages/app/src/Element/FollowListBase.tsx b/packages/app/src/Element/FollowListBase.tsx index 31e84f34..5e9ae9d7 100644 --- a/packages/app/src/Element/FollowListBase.tsx +++ b/packages/app/src/Element/FollowListBase.tsx @@ -2,13 +2,16 @@ import { ReactNode } from "react"; import { FormattedMessage } from "react-intl"; import { HexKey } from "@snort/system"; -import useEventPublisher from "Feed/EventPublisher"; +import useEventPublisher from "Hooks/useEventPublisher"; import ProfilePreview from "Element/ProfilePreview"; import useLogin from "Hooks/useLogin"; import { System } from "index"; import messages from "./messages"; import { FollowsFeed } from "Cache"; +import AsyncButton from "./AsyncButton"; +import { setFollows } from "Login"; +import { dedupe } from "@snort/shared"; export interface FollowListBaseProps { pubkeys: HexKey[]; @@ -30,13 +33,15 @@ export default function FollowListBase({ profileActions, }: FollowListBaseProps) { const publisher = useEventPublisher(); - const { follows, relays } = useLogin(); + const login = useLogin(); async function followAll() { if (publisher) { - const ev = await publisher.contactList([...pubkeys, ...follows.item], relays.item); - await FollowsFeed.backFill(System, pubkeys); + const newFollows = dedupe([...pubkeys, ...login.follows.item]); + const ev = await publisher.contactList(newFollows, login.relays.item); System.BroadcastEvent(ev); + await FollowsFeed.backFill(System, pubkeys); + setFollows(login, newFollows, ev.created_at); } } @@ -46,9 +51,9 @@ export default function FollowListBase({
{title}
{actions} - +
)} {pubkeys?.map(a => ( diff --git a/packages/app/src/Element/LogoutButton.tsx b/packages/app/src/Element/LogoutButton.tsx index 4a941434..cda67067 100644 --- a/packages/app/src/Element/LogoutButton.tsx +++ b/packages/app/src/Element/LogoutButton.tsx @@ -7,15 +7,15 @@ import messages from "./messages"; export default function LogoutButton() { const navigate = useNavigate(); - const publicKey = useLogin().publicKey; + const login = useLogin(); - if (!publicKey) return; + if (!login.publicKey) return; return ( @@ -266,18 +253,18 @@ export function NoteCreator() { } function changePollOption(i: number, v: string) { - if (pollOptions) { - const copy = [...pollOptions]; + if (note.pollOptions) { + const copy = [...note.pollOptions]; copy[i] = v; - dispatch(setPollOptions(copy)); + note.update(v => v.pollOptions = copy); } } function removePollOption(i: number) { - if (pollOptions) { - const copy = [...pollOptions]; + if (note.pollOptions) { + const copy = [...note.pollOptions]; copy.splice(i, 1); - dispatch(setPollOptions(copy)); + note.update(v => v.pollOptions = copy); } } @@ -292,19 +279,16 @@ export function NoteCreator() {
- dispatch( - setSelectedCustomRelays( - // set false if all relays selected - e.target.checked && selectedCustomRelays && selectedCustomRelays.length == a.length - 1 - ? false - : // otherwise return selectedCustomRelays with target relay added / removed - a.filter(el => - el === r ? e.target.checked : !selectedCustomRelays || selectedCustomRelays.includes(el), - ), - ), - ) + checked={!note.selectedCustomRelays || note.selectedCustomRelays.includes(r)} + onChange={e => { + note.update(v => v.selectedCustomRelays = ( + // set false if all relays selected + e.target.checked && note.selectedCustomRelays && note.selectedCustomRelays.length == a.length - 1 + ? undefined + : // otherwise return selectedCustomRelays with target relay added / removed + a.filter(el => el === r ? e.target.checked : !note.selectedCustomRelays || note.selectedCustomRelays.includes(el)) + )); + } } />
@@ -345,163 +329,147 @@ export function NoteCreator() { } }; - return ( - <> - {show && ( - dispatch(setShow(false))}> - {replyTo && ( - - )} - {preview && getPreviewNote()} - {!preview && ( -
-