diff --git a/packages/app/public/icons.svg b/packages/app/public/icons.svg index ae164d36..2a78a7c8 100644 --- a/packages/app/public/icons.svg +++ b/packages/app/public/icons.svg @@ -347,6 +347,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/packages/app/src/Element/AsyncButton.css b/packages/app/src/Element/AsyncButton.css index 6e544a2d..ff0f4a27 100644 --- a/packages/app/src/Element/AsyncButton.css +++ b/packages/app/src/Element/AsyncButton.css @@ -1,14 +1,24 @@ -button { - position: relative; -} - .spinner-wrapper { position: absolute; width: 100%; height: 100%; top: 0; left: 0; +} + +.spinner-button > span { display: flex; justify-content: center; align-items: center; } + +.light .spinner-button { + background: #fff; + border: 1px solid var(--border-color); + color: var(--font-secondary); + box-shadow: rgba(0, 0, 0, 0.08) 0 1px 1px; +} + +.light .spinner-button:hover { + box-shadow: rgba(0, 0, 0, 0.2) 0 1px 3px; +} diff --git a/packages/app/src/Element/AsyncButton.tsx b/packages/app/src/Element/AsyncButton.tsx index 93a91239..c5641733 100644 --- a/packages/app/src/Element/AsyncButton.tsx +++ b/packages/app/src/Element/AsyncButton.tsx @@ -30,10 +30,10 @@ const AsyncButton = React.forwardRef((props return ( + + + ); +} diff --git a/packages/app/src/Element/Event/NoteCreator.tsx b/packages/app/src/Element/Event/NoteCreator.tsx index 4008c91a..49e0273e 100644 --- a/packages/app/src/Element/Event/NoteCreator.tsx +++ b/packages/app/src/Element/Event/NoteCreator.tsx @@ -1,14 +1,6 @@ import "./NoteCreator.css"; import { FormattedMessage, useIntl } from "react-intl"; -import { - EventKind, - NostrPrefix, - TaggedNostrEvent, - EventBuilder, - tryParseNostrLink, - NostrLink, - NostrEvent, -} from "@snort/system"; +import { EventKind, NostrPrefix, TaggedNostrEvent, EventBuilder, tryParseNostrLink, NostrLink } from "@snort/system"; import Icon from "Icons/Icon"; import useEventPublisher from "Hooks/useEventPublisher"; @@ -21,12 +13,13 @@ import Note from "Element/Event/Note"; import { ClipboardEventHandler } from "react"; import useLogin from "Hooks/useLogin"; -import { System, WasmPowWorker } from "index"; +import { WasmPowWorker } from "index"; import AsyncButton from "Element/AsyncButton"; import { AsyncIcon } from "Element/AsyncIcon"; import { fetchNip05Pubkey } from "@snort/shared"; import { ZapTarget } from "Zapper"; import { useNoteCreator } from "State/NoteCreator"; +import { NoteBroadcaster } from "./NoteBroadcaster"; export function NoteCreator() { const { formatMessage } = useIntl(); @@ -123,24 +116,11 @@ export function NoteCreator() { } } - async function sendEventToRelays(ev: NostrEvent) { - if (note.selectedCustomRelays) { - await Promise.all(note.selectedCustomRelays.map(r => System.WriteOnceToRelay(r, ev))); - } else { - System.BroadcastEvent(ev); - } - } - async function sendNote() { const ev = await buildNote(); if (ev) { - await sendEventToRelays(ev); - for (const oe of note.otherEvents ?? []) { - await sendEventToRelays(oe); - } - note.update(v => { - v.reset(); - v.show = false; + note.update(n => { + n.sending = (note.otherEvents ?? []).concat(ev); }); } } @@ -327,60 +307,109 @@ export function NoteCreator() { )); }*/ - const handlePaste: ClipboardEventHandler = evt => { - if (evt.clipboardData) { - const clipboardItems = evt.clipboardData.items; - const items: DataTransferItem[] = Array.from(clipboardItems).filter(function (item: DataTransferItem) { - // Filter the image items only - return /^image\//.test(item.type); - }); - if (items.length === 0) { - return; - } - - const item = items[0]; - const blob = item.getAsFile(); - if (blob) { - uploadFile(blob); - } - } - }; - - if (!note.show) return null; - return ( - note.update(v => (v.show = false))}> - {note.replyTo && ( - - )} - {note.preview && getPreviewNote()} - {!note.preview && ( -
-