: null}
>
)
}
@@ -160,19 +153,22 @@ export default function ProfilePage() {
return (
<>
-
- {isMe ?
-
- : null
- }
+
+
+ {isMe ?
+
+ : null
+ }
+
{isMe ? editor() : details()}
-
Notes
+
+
Notes
{notes?.sort((a, b) => b.created_at - a.created_at).map(a =>
)}
>
)
diff --git a/src/pages/Root.js b/src/pages/Root.js
index 6859be34..4840f1cb 100644
--- a/src/pages/Root.js
+++ b/src/pages/Root.js
@@ -1,36 +1,31 @@
import "./Root.css";
import { useSelector } from "react-redux";
-import { useState } from "react";
-import Timeline from "./Timeline";
-import useEventPublisher from "./feed/EventPublisher";
+import Note from "../element/Note";
+import useTimelineFeed from "../feed/TimelineFeed";
+import { NoteCreator } from "../element/NoteCreator";
export default function RootPage() {
- const publisher = useEventPublisher();
const pubKey = useSelector(s => s.login.publicKey);
+ const follows = useSelector(a => a.login.follows)
+ const { notes } = useTimelineFeed(follows);
- const [note, setNote] = useState("");
-
- async function sendNote() {
- let ev = await publisher.note(note);
-
- console.debug("Sending note: ", ev);
- publisher.broadcast(ev);
- setNote("");
- }
-
- function noteSigner() {
- return (
-
-
setNote(e.target.value)}>
-
sendNote()}>Send
-
- );
+ function followHints() {
+ if (follows?.length === 0 && pubKey) {
+ return (
+ <>
+
Hmm you're not following anybody?
+ >
+ );
+ }
}
return (
<>
- {pubKey ? noteSigner() : null}
-
+ {pubKey ?
: null}
+ {followHints()}
+
+ {notes?.sort((a, b) => b.created_at - a.created_at).map(e => )}
+
>
);
}
\ No newline at end of file
diff --git a/src/pages/Timeline.js b/src/pages/Timeline.js
deleted file mode 100644
index 645923cb..00000000
--- a/src/pages/Timeline.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useSelector } from "react-redux";
-import Note from "../element/Note";
-import useTimelineFeed from "./feed/TimelineFeed";
-
-export default function Timeline() {
- const follows = useSelector(a => a.login.follows)
- const { notes } = useTimelineFeed(follows);
-
- return (
-
- {notes?.sort((a, b) => b.created_at - a.created_at).map(e => )}
-
- );
-}
\ No newline at end of file
diff --git a/src/state/Login.js b/src/state/Login.js
index 3588856c..125927d1 100644
--- a/src/state/Login.js
+++ b/src/state/Login.js
@@ -2,6 +2,7 @@ import { createSlice } from '@reduxjs/toolkit'
import * as secp from '@noble/secp256k1';
const PrivateKeyItem = "secret";
+const Nip07PublicKeyItem = "nip07:pubkey";
const LoginSlice = createSlice({
name: "Login",
@@ -35,6 +36,7 @@ const LoginSlice = createSlice({
init: (state) => {
state.privateKey = window.localStorage.getItem(PrivateKeyItem);
if (state.privateKey) {
+ window.localStorage.removeItem(Nip07PublicKeyItem); // reset nip07 if using private key
state.publicKey = secp.utils.bytesToHex(secp.schnorr.getPublicKey(state.privateKey, true));
}
state.relays = {
@@ -43,6 +45,13 @@ const LoginSlice = createSlice({
"wss://relay.damus.io": { read: true, write: true },
"wss://nostr-pub.wellorder.net": { read: true, write: true }
};
+
+ // check nip07 pub key
+ let nip07PubKey = window.localStorage.getItem(Nip07PublicKeyItem);
+ if(nip07PubKey && !state.privateKey) {
+ state.publicKey = nip07PubKey;
+ state.nip07 = true;
+ }
},
setPrivateKey: (state, action) => {
state.privateKey = action.payload;
@@ -53,6 +62,7 @@ const LoginSlice = createSlice({
state.publicKey = action.payload;
},
setNip07PubKey: (state, action) => {
+ window.localStorage.setItem(Nip07PublicKeyItem, action.payload);
state.publicKey = action.payload;
state.nip07 = true;
},
diff --git a/src/state/Users.js b/src/state/Users.js
index b7ca0c5f..93b7d074 100644
--- a/src/state/Users.js
+++ b/src/state/Users.js
@@ -40,7 +40,7 @@ const UsersSlice = createSlice({
if (!Array.isArray(ud)) {
ud = [ud];
}
- console.debug("Set user profiles: ", ud);
+
for (let x of ud) {
let existing = state.users[x.pubkey];
if (existing) {
diff --git a/yarn.lock b/yarn.lock
index 0ca22cec..50c5a571 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4124,6 +4124,11 @@ execa@^5.0.0:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
+exenv@^1.2.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d"
+ integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==
+
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -5838,7 +5843,7 @@ lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-loose-envify@^1.1.0, loose-envify@^1.4.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -7030,7 +7035,7 @@ prompts@^2.0.1, prompts@^2.4.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
-prop-types@^15.8.1:
+prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -7195,6 +7200,21 @@ react-is@^18.0.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+react-lifecycles-compat@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
+react-modal@^3.16.1:
+ version "3.16.1"
+ resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.16.1.tgz#34018528fc206561b1a5467fc3beeaddafb39b2b"
+ integrity sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==
+ dependencies:
+ exenv "^1.2.0"
+ prop-types "^15.7.2"
+ react-lifecycles-compat "^3.0.0"
+ warning "^4.0.3"
+
react-redux@^8.0.5:
version "8.0.5"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.5.tgz#e5fb8331993a019b8aaf2e167a93d10af469c7bd"
@@ -8491,6 +8511,13 @@ walker@^1.0.7:
dependencies:
makeerror "1.0.12"
+warning@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
watchpack@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"