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 && ( -
-