diff --git a/src/Text.js b/src/Text.js
index 2dc7723a..382376b3 100644
--- a/src/Text.js
+++ b/src/Text.js
@@ -27,22 +27,22 @@ function transformHttpLink(a) {
case "m4v": {
return
}
- default:
- return {url.toString()}
+ default:
+ return {url.toString()}
}
} else if (youtubeId) {
return (
- <>
-
-
-
- >
+ <>
+
+
+
+ >
)
} else {
return {url.toString()}
@@ -57,7 +57,7 @@ export function extractLinks(fragments) {
if (typeof f === "string") {
return f.split(UrlRegex).map(a => {
if (a.startsWith("http")) {
- return transformHttpLink(a)
+ return transformHttpLink(a)
}
return a;
});
diff --git a/src/Util.js b/src/Util.js
index a05d85fa..40390fcb 100644
--- a/src/Util.js
+++ b/src/Util.js
@@ -62,4 +62,31 @@ export function eventLink(hex) {
export function profileLink(hex) {
let buf = secp.utils.hexToBytes(hex);
return `/p/${bech32.encode("npub", bech32.toWords(buf))}`;
+}
+
+/**
+ * Reaction types
+ */
+export const Reaction = {
+ Positive: "+",
+ Negative: "-"
+};
+
+/**
+ * Return normalized reaction content
+ * @param {string} content
+ * @returns
+ */
+export function normalizeReaction(content) {
+ switch(content) {
+ case "": return Reaction.Positive;
+ case "🤙": return Reaction.Positive;
+ case "❤️": return Reaction.Positive;
+ case "👍": return Reaction.Positive;
+ case "💯": return Reaction.Positive;
+ case "+": return Reaction.Positive;
+ case "-": return Reaction.Negative;
+ case "👎": return Reaction.Negative;
+ }
+ return content;
}
\ No newline at end of file
diff --git a/src/element/Note.js b/src/element/Note.js
index 7631cb8e..425abb55 100644
--- a/src/element/Note.js
+++ b/src/element/Note.js
@@ -1,18 +1,14 @@
import "./Note.css";
-import { useCallback, useState } from "react";
+import { useCallback } from "react";
import { useSelector } from "react-redux";
import moment from "moment";
import { useNavigate } from "react-router-dom";
-import { faHeart, faReply, faThumbsDown, faTrash, faBolt } from "@fortawesome/free-solid-svg-icons";
-import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import Event from "../nostr/Event";
import ProfileImage from "./ProfileImage";
-import useEventPublisher from "../feed/EventPublisher";
-import { NoteCreator } from "./NoteCreator";
import { extractLinks, extractMentions, extractInvoices } from "../Text";
import { eventLink } from "../Util";
-import LNURLTip from "./LNURLTip";
+import NoteFooter from "./NoteFooter";
export default function Note(props) {
const navigate = useNavigate();
@@ -21,23 +17,9 @@ export default function Note(props) {
const dataEvent = props["data-ev"];
const reactions = props.reactions;
const deletion = props.deletion;
- const emojiReactions = reactions?.filter(({ Content }) => Content && Content !== "+" && Content !== "-" && Content !== "❤️")
- .reduce((acc, { Content }) => {
- const amount = acc[Content] || 0
- return { ...acc, [Content]: amount + 1 }
- }, {})
- const likes = reactions?.filter(({ Content }) => Content === "+" || Content === "❤️").length ?? 0
- const dislikes = reactions?.filter(({ Content }) => Content === "-").length ?? 0
- const publisher = useEventPublisher();
- const [reply, setReply] = useState(false);
- const [tip, setTip] = useState(false);
+
const users = useSelector(s => s.users?.users);
- const login = useSelector(s => s.login.publicKey);
const ev = dataEvent ?? Event.FromObject(data);
- const isMine = ev.PubKey === login;
- const liked = reactions?.find(({ PubKey, Content }) => Content === "+" && PubKey === login)
- const disliked = reactions?.find(({ PubKey, Content }) => Content === "-" && PubKey === login)
- const author = users[ev.PubKey];
const options = {
showHeader: true,
@@ -46,10 +28,6 @@ export default function Note(props) {
...opt
};
- function hasReacted(emoji) {
- return reactions?.find(({ PubKey, Content }) => Content === emoji && PubKey === login)
- }
-
const transformBody = useCallback(() => {
let body = ev?.Content ?? "";
@@ -87,42 +65,6 @@ export default function Note(props) {
)
}
- async function react(emoji) {
- let evLike = await publisher.like(ev, emoji);
- publisher.broadcast(evLike);
- }
-
- async function like() {
- let evLike = await publisher.like(ev);
- publisher.broadcast(evLike);
- }
-
- async function dislike() {
- let evLike = await publisher.dislike(ev);
- publisher.broadcast(evLike);
- }
-
- async function deleteEvent() {
- if (window.confirm(`Are you sure you want to delete ${ev.Id.substring(0, 8)}?`)) {
- let evDelete = await publisher.delete(ev.Id);
- publisher.broadcast(evDelete);
- }
- }
-
- function tipButton() {
- let service = author?.lud16 || author?.lud06;
- if (service) {
- return (
- <>
- setTip(true)}>
-