diff --git a/packages/app/package.json b/packages/app/package.json index 4de97dbe..cf3bc1fe 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -34,6 +34,7 @@ "react-intersection-observer": "^9.4.1", "react-intl": "^6.4.4", "react-router-dom": "^6.5.0", + "react-tag-input-component": "^2.0.2", "react-textarea-autosize": "^8.4.0", "react-twitter-embed": "^4.0.4", "recharts": "^2.8.0", diff --git a/packages/app/src/Element/Event/NoteCreator.css b/packages/app/src/Element/Event/NoteCreator.css index 01dd8abc..27b72352 100644 --- a/packages/app/src/Element/Event/NoteCreator.css +++ b/packages/app/src/Element/Event/NoteCreator.css @@ -95,3 +95,27 @@ linear-gradient(var(--gray-superdark), var(--gray-superdark)) padding-box, linear-gradient(90deg, #ef9644, #fd7c49, #ff5e58, #ff3b70, #ff088e, #eb00b1, #c31ed5, #7b41f6) border-box; } + +.note-creator-modal .rti--container { + background-color: unset !important; + box-shadow: unset !important; + border: 2px solid var(--border-color) !important; + border-radius: 12px !important; + padding: 4px 8px !important; +} + +.note-creator-modal .rti--tag { + color: black !important; + padding: 4px 10px !important; + border-radius: 12px !important; + display: unset !important; +} + +.note-creator-modal .rti--input { + width: 100% !important; + border: unset !important; +} + +.note-creator-modal .rti--tag button { + padding: 0 0 0 var(--rti-s); +} diff --git a/packages/app/src/Element/Event/NoteCreator.tsx b/packages/app/src/Element/Event/NoteCreator.tsx index 6e4d9ce2..260df82a 100644 --- a/packages/app/src/Element/Event/NoteCreator.tsx +++ b/packages/app/src/Element/Event/NoteCreator.tsx @@ -2,17 +2,18 @@ import "./NoteCreator.css"; import { FormattedMessage, useIntl } from "react-intl"; import { EventKind, NostrPrefix, TaggedNostrEvent, EventBuilder, tryParseNostrLink, NostrLink } from "@snort/system"; import classNames from "classnames"; +import { TagsInput } from "react-tag-input-component"; import Icon from "Icons/Icon"; import useEventPublisher from "Hooks/useEventPublisher"; -import { openFile } from "SnortUtils"; +import { appendDedupe, openFile } from "SnortUtils"; import Textarea from "Element/Textarea"; import Modal from "Element/Modal"; import ProfileImage from "Element/User/ProfileImage"; import useFileUpload from "Upload"; import Note from "Element/Event/Note"; -import { ClipboardEventHandler, DragEvent } from "react"; +import { ClipboardEventHandler, DragEvent, useEffect, useState } from "react"; import useLogin from "Hooks/useLogin"; import { GetPowWorker } from "index"; import AsyncButton from "Element/AsyncButton"; @@ -23,6 +24,8 @@ import { useNoteCreator } from "State/NoteCreator"; import { NoteBroadcaster } from "./NoteBroadcaster"; import FileUploadProgress from "./FileUpload"; import { ToggleSwitch } from "Icons/Toggle"; +import NostrBandApi from "External/NostrBand"; +import { useLocale } from "IntlProvider"; export function NoteCreator() { const { formatMessage } = useIntl(); @@ -99,6 +102,10 @@ export function NoteCreator() { extraTags ??= []; extraTags.push(...note.pollOptions.map((a, i) => ["poll_option", i.toString(), a])); } + if (note.hashTags.length > 0) { + extraTags ??= []; + extraTags.push(...note.hashTags.map(a => ["t", a.toLowerCase()])); + } // add quote repost if (note.quote) { if (!note.note.endsWith("\n")) { @@ -307,18 +314,18 @@ export function NoteCreator() { onChange={e => { note.update( v => - (v.selectedCustomRelays = - // set false if all relays selected - e.target.checked && + (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), - )), + ? undefined + : // otherwise return selectedCustomRelays with target relay added / removed + a.filter(el => + el === r + ? e.target.checked + : !note.selectedCustomRelays || note.selectedCustomRelays.includes(el), + )), ); }} /> @@ -387,9 +394,9 @@ export function NoteCreator() { onChange={e => note.update( v => - (v.zapSplits = arr.map((vv, ii) => - ii === i ? { ...vv, weight: Number(e.target.value) } : vv, - )), + (v.zapSplits = arr.map((vv, ii) => + ii === i ? { ...vv, weight: Number(e.target.value) } : vv, + )), ) } /> @@ -565,7 +572,7 @@ export function NoteCreator() { )} {note.preview && getPreviewNote()} - {!note.preview && ( + {!note.preview && (<>