From b4f37b1ed350bd5fa84f5784e11036551ccb1ddd Mon Sep 17 00:00:00 2001 From: Kieran Date: Fri, 31 Mar 2023 23:43:07 +0100 Subject: [PATCH] feat: preview note --- packages/app/src/Element/Note.tsx | 10 +++- packages/app/src/Element/NoteCreator.tsx | 71 +++++++++++++++++------- packages/app/src/lang.json | 3 + packages/app/src/translations/en.json | 3 +- 4 files changed, 65 insertions(+), 22 deletions(-) diff --git a/packages/app/src/Element/Note.tsx b/packages/app/src/Element/Note.tsx index 96d1bee9..486d38c7 100644 --- a/packages/app/src/Element/Note.tsx +++ b/packages/app/src/Element/Note.tsx @@ -46,6 +46,7 @@ export interface NoteProps { showReactionsLink?: boolean; canUnpin?: boolean; canUnbookmark?: boolean; + canClick?: boolean; }; } @@ -177,7 +178,7 @@ export default function Note(props: NoteProps) { eTarget: TaggedRawEvent, isTargetAllowed: boolean = e.target === e.currentTarget ) { - if (!isTargetAllowed) { + if (!isTargetAllowed || opt?.canClick === false) { return; } @@ -280,7 +281,12 @@ export default function Note(props: NoteProps) { <> {options.showHeader && (
- + {(options.showTime || options.showBookmarked) && (
{options.showBookmarked && ( diff --git a/packages/app/src/Element/NoteCreator.tsx b/packages/app/src/Element/NoteCreator.tsx index 0b3d1df2..cada2502 100644 --- a/packages/app/src/Element/NoteCreator.tsx +++ b/packages/app/src/Element/NoteCreator.tsx @@ -1,7 +1,7 @@ import "./NoteCreator.css"; import { useState } from "react"; import { FormattedMessage } from "react-intl"; -import { TaggedRawEvent } from "@snort/nostr"; +import { RawEvent, TaggedRawEvent } from "@snort/nostr"; import Icon from "Icons/Icon"; import useEventPublisher from "Feed/EventPublisher"; @@ -10,6 +10,7 @@ import Textarea from "Element/Textarea"; import Modal from "Element/Modal"; import ProfileImage from "Element/ProfileImage"; import useFileUpload from "Upload"; +import Note from "Element/Note"; import messages from "./messages"; @@ -40,11 +41,11 @@ export interface NoteCreatorProps { export function NoteCreator(props: NoteCreatorProps) { const { show, setShow, replyTo, onSend, autoFocus } = props; const publisher = useEventPublisher(); - const [note, setNote] = useState(""); - const [error, setError] = useState(); - const [active, setActive] = useState(false); + const [note, setNote] = useState(""); + const [error, setError] = useState(""); + const [active, setActive] = useState(false); + const [preview, setPreview] = useState(); const uploader = useFileUpload(); - const hasErrors = (error?.length ?? 0) > 0; async function sendNote() { if (note) { @@ -98,27 +99,59 @@ export function NoteCreator(props: NoteCreatorProps) { sendNote().catch(console.warn); } + async function loadPreview() { + if (preview) { + setPreview(undefined); + } else { + const tmpNote = await publisher.note(note); + if (tmpNote) { + setPreview(tmpNote); + } + } + } + + function getPreviewNote() { + if (preview) { + return ( + + ); + } + } + return ( <> {show && ( setShow(false)}> {replyTo && } -
-
-